Odpovídáte na názor ke článku Lambda výrazy v Javě.
Vždyť to je uzávěr (closure). Lambda výraz je způsob zápisu (syntax, vychází z lambda kalkulu), uzávěr je sémantický pojem. Funkční rozhraní v Javě je jen typ, do nějž se nějaký lambda výraz přiřadí. Je třeba přiznat, že C# se v tomto chová podobně.
"Správné" využití měnitelných proměnných je subjektivní věc, nicméně "stateful" uzávěr může dávat smysl třeba u různých počítadel. Navíc přístup přes referenci je rychlejší (nic se nekopíruje). I když celé to je ještě trochu složitější, protože třeba v ObjC se v obou případech předává reference, jen někdy zvyšuje čítač referencí.
V Javě jde o syntaktický cukr, protože to je funkčně stejné jako anonymní třídy. V C a C++ to syntaktický cukr není právě kvůli možnosti přístupu k vnějším proměnným. Jinak řečeno, Java už uzávěry v podstatě měla (anonymní třídy), kdežto u C/C++ se jedná v novějších verzích o rozšíření funkcionality.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 37 774×
Přečteno 26 420×
Přečteno 24 932×
Přečteno 21 278×
Přečteno 18 932×