Объясни scope-функции
Вопрос
Объясни разницу между let, run, with, apply и also и приведи пример, когда какую берёшь.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Два различия: `it` или `this`, результат лямбды или сам объект
`apply` для настройки объекта, возвращает объект
`also` для побочных эффектов в цепочке
`let` для преобразования и `?.let` для не-null
`run` и `with` чтобы вычислить значение из полей объекта
Не вкладывать scope-функции друг в друга
Что могут спросить следом
- В чём ловушка
?.let { } ?: run { }? - Какие из них inline?
Разбор
Все пять функций выполняют блок над объектом и отличаются двумя вещами: как объект виден внутри и что возвращается. apply даёт this и возвращает сам объект, поэтому подходит для настройки: создаю Intent или Paint и в блоке выставляю поля. also даёт it и тоже возвращает объект, это для побочного действия в цепочке, например залогировать результат. let даёт it и возвращает результат лямбды, его беру для преобразования и особенно в форме ?.let, чтобы выполнить код только для не-null. run и with дают this и возвращают результат, они удобны, когда из полей объекта нужно вычислить одно значение. Все они inline, накладных расходов нет. Главное правило читаемости: не вкладывать их друг в друга, иначе непонятно, что сейчас it и this.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.