Выбор ответа Middle Функции, расширения и scope-функции обновлено

run или with

Вопрос

Чем obj.run { } отличается от with(obj) { }?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Почти ничем, но run это расширение и работает с ?. Обе функции дают объект как this и возвращают результат лямбды.

Варианты ответа

  1. Почти ничем, но run это расширение и работает с ?.правильный ответ
  2. with возвращает сам объект, а run результат лямбды
  3. run запускает блок в новой корутине, with синхронно
  4. with можно вызывать только у data class и object

Разбор

Обе функции дают объект как this и возвращают результат лямбды. Разница в форме вызова: with(obj) это обычная функция с аргументом, а run это расширение, поэтому можно написать obj?.run { } и выполнить блок только для не-null. run не связан с корутинами (это launch), а with работает с любым объектом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.