Odpověď na názor

Odpovídáte na názor ke článku Lambda výrazy v Javě.

  • 10. 3. 2014 12:22

    zboj (neregistrovaný)

    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.