Что такое анонимная функция
Что проверяют
Точность терминов. В Kotlin анонимная функция и лямбда это разные конструкции с разным поведением return, и собеседник обычно проверяет именно это различие, а не умение написать короткий колбэк.
Как отвечать
Анонимная функция это fun без имени, с обычным телом и явно указанным типом результата:
val double = fun(x: Int): Int { return x * 2 }
items.filter(fun(item: Item): Boolean { return item.isVisible })Лямбда это выражение в фигурных скобках, значением которого становится последняя строка тела:
val double = { x: Int -> x * 2 }Главная разница в return. В анонимной функции он выходит из неё самой. В лямбде голый return это нелокальный возврат, он выходит из внешней функции и разрешён только внутри inline-функции, а вернуть значение из самой лямбды можно меткой вида return@filter.
Второе отличие: у анонимной функции нет неявного имени параметра it, и её нельзя вынести за скобки последним аргументом.
Для мобильной разработки добавьте контекст жизненного цикла. Лямбда, переданная в inline-функцию стандартной библиотеки, объекта не создаёт, а лямбда, сохранённая в поле или отданная в колбэк, это объект, который держит всё захваченное. Отсюда правило про слушателей: захватили экран или элемент разметки в долгоживущий колбэк, получили утечку на всё время его жизни.
Где спотыкаются
Называют лямбдой всё подряд и на прямой вопрос про разницу не могут показать ни одного примера, где поведение действительно отличается. Проверяется именно возврат.
Путают анонимную функцию с анонимным объектом. Запись через object : создаёт экземпляр класса и нужна там, где у интерфейса несколько методов, а короткая запись через лямбду работает только для интерфейса с одним методом.
Не думают про время жизни. Колбэк, зарегистрированный в долгоживущем компоненте, переживает экран, и захваченная ссылка на элемент интерфейса не даёт освободить память. Снимать регистрацию нужно в парном методе жизненного цикла.