Lambda kifejezések java 8

Lambda kifejezések java 8

Röviden - igen, természetesen.

Annak érdekében, hogy részletesebb választ, hadd mindig meg fogja érteni, hogy miért nem dolgozunk velük?

Lényegében lambda kifejezések van szükség, mert azt írják le, milyen számításokat kell végezni, nem, hogyan kell elvégezni őket. Hagyományosan, már dolgozik egy külső iterációs, melyen egyértelműen jelezte a teljes műveletsor, valamint hogyan készülnek.

A külső iteráció végre hurok. és ezt a ciklust pontosan jelzi, hogyan kell csinálni. Ez a kód redundáns és többször megismételt a programokat. Azonban a ciklus foreach megrendeljük a program hívás beszél (itt - hivatkozással az eljárás, amely tömörebb, mint a lambda) minden elemet, de nem kell leírni, hogy a ciklus működik. Iteration dolgozzák-rendszer szintjén foreach ciklus.

Az ilyen motiváció, hogy „hanem” abban az esetben, egy lambda kifejezés alapvető fontosságú. De ahhoz, hogy megértsük az áramkör, akkor meg kell vizsgálni, továbbá a motiváció a funkcionális programozás, mint olyat.

Lambda vyrrazheniya / áramkörök vannak kialakítva, hogy egyszerűsítse a funkcionális programozás. Java 8 - persze, nem egy funkcionális nyelv, de (mint a Python) most adott némi támogatást a funkcionális programozás ezek a képességek épülnek az alapvető objektum-orientált paradigma.
A fő gondolata a funkcionális programozás, hogy hozhat létre funkciókat és manipulálja őket, különösen, hogy hozzon létre funkciók a futás során. Ennek megfelelően a programot képes kezelni nemcsak adatokat, hanem funkciója. Képzeld el, milyen lehetőségek állnak nyitva a programozó.

A tisztán funkcionális programozási nyelv, vannak más korlátozások, különösen - az adatok változatlansága. Vagyis azt, hogy nem kell változókat, csak megváltoztathatatlan értékeket. Első pillantásra ez a korlátozás túlzottnak tűnik (mint általában a munka nélkül változók?), De kiderül, hogy valójában az elért értékek minden ugyanaz, mint a változó (szeretnénk, hogy - próbálja Scala, hogy a nyelv nem pusztán funkcionális de ez biztosítja a lehetőséget, hogy élvezze az összes értéket). Változtatható funkciók veszi az érveket, és az eredményt, anélkül, hogy megváltoztatná a környezetre; így sokkal könnyebb használni őket párhuzamos programozás, mert az invariáns függvény nem blokkolja a megosztott erőforrások.
lehetséges volt létrehozni funkciók futásidőben csak egy egészen Java 8 release: generál, és betölti a byte-kódot (ez elég bonyolult és nehéz munka).

Lambda kifejezések jellemzi a következő két tulajdonsággal:

  1. Tömörebb szintaxis amikor létrehoz funkciók
  2. Az a képesség, hogy hozzon létre funkciók futásidőben; akkor ezeket a funkciókat átadható egy másik kódot, vagy egyéb kódját működnek.

Lezárások aggodalomra ad okot a lehetőségét, hogy egy második

Mi az áramkör?

Lezárásával használt változók találhatók hatályán kívül a funkciót. A hagyományos procedurális, ez nem probléma - akkor egyszerűen használja a változó - de a probléma akkor keletkezik, amikor elkezdjük létrehozni funkciók a futás során. Ennek illusztrálására a problémát, először egy példát a Python. Itt make_fun () létrehoz és visszatér egy nevezett funkció func_to_return. amellyel azután a többi program:

Így állunk szemben, mint egy probléma: ha csak vissza func_to_return. hogy az, hogy az n. területen kívül func_to_return láthatóságát. Általában azt várnánk, hogy n nem megy ki a hatálya alól, és el kell távolítani, de ha ez megtörténik, akkor nem fog működni func_to_return. Hogy támogassa a dinamikus létrehozása func_to_return kell „vissza” funkció köré n és biztosítsák, hogy „túlélte”, hogy visszatérjen funkciókat. Ezért a „lezárás”.

Annak tesztelésére, make_fun (). hívjuk kétszer, és mentse az eredményt függvény x és y. Az a tény, hogy az x és y ad egészen más eredményeket, azt mutatja, hogy, hogy minden hívás make_fun () van egy teljesen független, saját funkciója func_to_return zárt tároló n.

Lambdas Java 8

Tekintsük ugyanaz a példa segítségével Java lambda kifejezéseket:

Kiderült, hogy lambdas Java zárva csak mintegy értékeket, de nem az egész változókat. Java megköveteli, hogy ezek az értékek nem változtak, mintha már bejelentette, hogy végleges. Tehát, ahogy kellene végső függetlenül attól, hogy kijelentették nekik, vagy sem. Azaz, egy „virtuális végleges.” Ezért Java egy „áramkör korlátozások” és nem „teljes” áramkör, amely azonban nagyon hasznos.

Minden gond nélkül össze, hogy ellenőrizze ezt csak fel a végső kulcsszót a meghatározása n. Természetesen, ha mi vonatkozik egy ilyen lépés minden verseny, van egy probléma közös változékony állapot.

Lambda kifejezések - legalábbis részben - lehet elérni a kívánt célt: most már lehet létrehozni funkciók dinamikusan. Ha megy külföldre, akkor hibaüzenetet kap, de általában ezek a problémák megoldódnak. A kimenet nem lesz olyan egyszerű, mint a Python, de ez még mindig a Java. És a végeredmény, nem mentes bizonyos korlátozások (lássuk be, minden eredmény Java nélkül nem bizonyos korlátai) nem olyan rossz.

Csodálkoztam, hogy miért ezeket a struktúrákat az úgynevezett „lambdas”, nem csak „bezárása” - mert minden jel tiszta áramkört. Azt mondták, hogy „bezárása” - rossz és egy túlterhelt távon. Ha valaki azt mondja: „real-áramkör”, amely gyakran gondol az ilyen „bezárása”, hogy elkapták először megtanulni programozási nyelv, ahol lényegében a továbbiakban: „bezárása”.

Nem látok itt a vita „PFSZ ellen FP”, azonban, és nem fog tartani. Sőt, még azt is „ellen” nem látja. OOP kiválóan alkalmas adatok kinyerésére (és még Java erőket, hogy működjenek együtt tárgyak, ez nem jelenti azt, hogy minden probléma megoldódik segítségével objektumok), és a fázisátalakulás - elvont viselkedést. Mindkét paradigmák hasznos, és véleményem, annál hasznosabb, ha azok zavaros - és Python és Java 8. Nemrég volt alkalmam együtt dolgozni pandoc - átalakító, írt egy tisztán funkcionális nyelv Haskell, és én még mindig a legtöbb belőle pozitív élmény. Tehát tisztán funkcionális nyelv is érdemelnek helyet a nap.

Kapcsolódó cikkek