Ответ вслух Junior Функции, расширения и scope-функции спрашивают часто обновлено

Объясни scope-функции

Вопрос

Объясни разницу между let, run, with, apply и also и приведи пример, когда какую берёшь.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Все пять функций выполняют блок над объектом и отличаются двумя вещами: как объект виден внутри и что возвращается. apply даёт this и возвращает сам объект, поэтому подходит для настройки: создаю Intent или Paint и в блоке выставляю поля. also даёт it и тоже возвращает объект, это для побочного действия в цепочке,…

Что должно прозвучать в ответе

  • Два различия: `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 ошибок.