@mielony, w Javie to fajnie widać, bo masz klasy anonimowe i Lambdy świetnie sprawdzają się jako zamienniki:
executorService.submit(new Callable<Object>(){
public Object call(){
return new Object();
}
});
można zamienić na
executorService.submit(()-> new Object());
Co wygląda nieźle i ma jedną ciekawą przewagę w stosunku do np. wzkaźnika na funkcję - można wykorzystać zmienne lokalne, pola oraz metody obiektu w ktorym utworzono lambdę. Podobnie w Cpp można się z lambdy odwołać do składowych obiektu gdzie zdefiniowaną mamy lambdę.
Z innych zalet - funkcje jako obiekty pierwszej kategorii - można je przyjmowac jako parametry i zwracać jako wyniki. Pozwala to na np. nieewaluowanie wyrażenie jeżeli nie ma takiej potrzeby:
format("Log z %s, %s", ()->"ewaluacja", ()->"ewaluacja", ()->"a mnie już nie wywołasz" );
Po prostu nie wywołujesz funkcji.
Kolejna sprawa to tworzenie kodu funkcyjnego. Ze wszystkimi jego wadami i zaletami. Do tego dochodzi tworzenie kodu deklaratywnego, a nie imperatywnego, co pozwala na osiągnięcie wysokiej separacji dla poszczególnych elementów.
Podsumowując. Lambdy wprowadzają do kodu elemnty pozwalające na tworzenie zwięzłych, przejrzystych i delkaratywnych konstrukcji. Tym samym kod jest prostszy w testowaniu, utrzymaniu i rozwoju.