Niby lambda jest po to, żeby od razu ją zdefiniować w miejscu wywołania, ale ja zawsze wolę poświęcić jedną linię, żeby taką lambdę przypisywać do zmiennej (która może mieć nazwę wyjaśniającą co ta lambda robi) i stosować trochę przystępniejsze wcięcia
Osobiście nie cierpię takiego podejścia. Dla mnie lambda jest adaptorem do argumentu funckji/algorytmu.
Jak ja używam lambdy to ma 1 - 3 linijki (ma być krótsza od moich krótkich funkcji).
Jeśli lambda potrzebuje nazwy, bo jest długa, to znaczy że tak naprawdę jest to funkcja/klasa, którą normalnie definiuję, bez kombinowania z lambdą.
Jeśli kod wymusza użycia lambdy to i tak definiuję funkcję, którą potem opakowuję lambdą która ma jedną linijkę.
Rozumiem że podobnie nie cierpisz definiowania stałych ani zmiennych, bo lepiej używać wyłącznie magicznych wartości i wyrażeń w miejscu użycia? ;-)
Bo problem sprowadza się do sytuacji
foo(123);
vs
int someValue = 123;
foo(someValue);
Uważam że kod jest czystszy jeśli lambda ma własną nazwę, niż jeśli jest wklejona w dziwaczny sposób wewnątrz wywołania funkcji, z kumulacją nawiasów i nieczytelnych wcięć.
foo(1, 2, true, [this](int x, int y) {
blah;
blah;
blah;
}, 4, 5);
vs
auto fooProc = [this](int x, int y) {
blah;
blah;
blah;
};
...
foo(1, 2, true, fooProc, 4, 5);
A czasami używam takiej lambdy po prostu jako funkcji lokalnej, żeby nie powiększać jej sztucznie zasięgu:
auto bar = [](int x, int y) {
blah;
blah;
blah;
};
...
bar(1, 2);