На этом шаге мы рассмотрим назначение этой функции.
Первая на нашем пути - функция apply. Ее можно считать функцией настройки: она позволяет вызвать несколько функций для объекта-получателя и настроить его для дальнейшего использования. После выполнения указанного лямбда-выражения apply возвращает настроенный объект-получатель.
Функцию apply можно использовать, чтобы уменьшить количество повторений при подготовке объекта к использованию. Вот пример настройки экземпляра файла без apply:
val menuFile = File("menu-file.txt") menuFile.setReadable(true) menuFile.setWritable(true) menuFile.setExecutable(false)
Используя функцию apply, то же самое можно реализовать меньшим количеством кода:
val menuFile = File("menu-file.txt").apply { setReadable(true) setWritable(true) setExecutable(false) }
Функция apply позволяет отбросить имя переменной в каждом вызове функции, выполняемом для настройки объекта-получателя, потому что все функции в лямбде вызываются относительно объекта-приемника, для которого вызвана сама функция.
Такое поведение иногда называют ограничением относительной области видимости (relative scoping), потому что вызовы всех функций внутри лямбды относятся к объекту-приемнику:
val menuFile = File("menu-file.txt").apply { setReadable(true) // На самом деле, menuFile.setReadable(true) setWritable(true) // На самом деле, menuFile.setWritable(true) setExecutable(false) // На самом деле, menuFile.setExecutable(false) }
На следующем шаге мы рассмотрим функцию let.