На этом шаге мы рассмотрим назначение и применение этой функции.
Последняя стандартная функция - это takeIf. Эта функция работает немного иначе, чем другие стандартные функции: она вычисляет условие, или предикат, заданное в лямбде, которое возвращает истинное или ложное значение. Если условие истинно, takeIf вернет объект-приемник. Если условие ложно, она вернет null.
Рассмотрите следующий пример, который читает файл, только если файл доступен для чтения и для записи:
val fileContents = File("myfile.txt") .takeIf { it.canRead() && it.canWrite() } ?.readText()
Без takeIf это выглядит более громоздко:
val file = File("myfile.txt") val fileContents = if (file.canRead() && file.canWrite()) { file.readText() } else { null }
Вариант с takeIf не требует временной переменной file и явного возврата null. Эту функцию удобно использовать для проверки условия перед присваиванием значения переменной или продолжением работы. Концептуально takeIf - это оператор if, но с преимуществом прямого воздействия на экземпляр, что часто позволяет избавиться от временной переменной.
На следующем шаге мы рассмотрим функцию takeUnless.