Java

Зачем нужны лямбда функции? И в частности в Котлине

Artiomciob Ciob
Artiomciob Ciob
35
Бывает, что в довольно сложной функции нужно какую-то часть кода повторить несколько раз, но цикл для этого не подходит, слишком много различий между разами. Тогда логично вынести эту часть в отдельную функцию. Но эта часть - "подфункция", которая нужна только в этой функции и нигде больше. Чтобы не размазывать код и не засорять область видимости, можно использовать лямбду.

В котлине ситуация немного другая. Там это еще и краткая запись листенеров для кнопок и др.
Есть метод класса (т. е. функция), в котором ты вешаешь листенеры. И логично, что листенеры будут "подфункциями". (Еще логичнее было бы выносить их в отдельные методы класса, как это делается в C# и WinForms, например, - но на Android так не принято, в отличие от WinForms там придется делать это вручную, трудоемко.)
Grisha Nevyazhsky
Grisha Nevyazhsky
349
Лучший ответ
попросите админов открыть раздел по котлину? котлин понимает джаву (так же как груви понимает джаву), но это не значит что джава обязана отдуваться за всех этих хвостопадов.... сами с нуля нифига не придумали... тупо взяли готовое, переписали интерфейс и сидят "умные"... пальцы веером... сопли пузырями...

лямба -- ой, так кратко и понятно всё написано... иди пройдись по длинному выражению дебаггером... посреди выражения остановку не сделаешь...
Сергей Новиков
Сергей Новиков
65 738
Лямбда выражения чаще всего используются для краткого описания анонимного класса, который имплементируется от интерфейса, в котором есть всего один метод.

interface In {
void some();
}

public void method(In in) {
}

Мы можем сделать так:
method(new In() {
@Override
public void some() {
}
}) ;

Но зачем делать так, если можно так:
da(() -> {
});

Также лямбда в java недавно стали использоваться в конструкции switch-case
Вместо привычного:

switch(a) {
case 1: {
break;
}
}

Теперь:
switch(a) {
case 1 -> {
И без break
}
}
Юрий Назаров
Юрий Назаров
11 272
Двумя словами: сокращают код.