HTML

asdf

33rd degree, Scala

2011.04.11. 15:24 tvk

Több előadáson is voltam ami Scala-ról vagy legalábbis a funkcionális programozási paradigmáról szólt. Az elsőt Ted Neward tartotta, akit a kinézete vagy provokatív stílusa miatt inkább hinnék valami rockzenekar gitárosának mint tech expertnek. (Lengyelország akkor az most milyen Európa? Kelet? Ó! Azt mondod közép? Mióta? Mindegy, akkor maradjunk az amerikai nézőpontnál: Célpont.) Ő arról beszélt, hogy a klasszikus GOF tervezési mintákat hogyan lehet Scala-ban alkalmazni. Egyes patternek eleve a nyelv elemei, más patternek értelmüket veszítik funkcionális programozásnál és végül bejönnek teljesen új megoldási lehetőségek.

Na nézzük mi is volt:

  • Singleton: ez Scala-ban nyelvi elem. object
  • Command: ez az apply() amivel látszólag magát az objektumot hívhatjuk meg mint függvényt.
  • Strategy: ezek maguk a függvények, amik Scala-ban ugyanúgy átadhatóak paraméterként mint bármi más érték.
  • Composite: case classes. Ezek olyasmik mint a POJO-k csak sokkal jobbak.
  • Visitor: ez a szteroidokon nevelt case elágazás, amibe a java-val ellentétben nem csak int konstansok írhatóak be, hanem nagyon változatos kifejezések is.


Több létező mintát nem sorolt fel, inkább más egyéb dolgokat említett: Például a decompositional recursion-t, ami egy fontos darab a funkcionális programozó eszköztárában. Másik dolog a for ciklusok hátránya. Ha írsz egy for ciklust amiben index alapján elmész egy tömb elejétől a végéig, azt nem lehet több proceszorra optimalizálni. A jobb megoldás egy magasabb rendű "for" függvény használata ami majd valami irreleváns módon végigiterál a tömbön. Alkalmasint párhuzamosítva, egyszerre több CPU-t használva. A kedvencem a farokrekurzió is előkerült. Bizonyos rekurzív algoritmusok kioptimalizálhatók úgy, hogy ne zabálja fel a program a stack-et.

Volt szó a pipelines-ről, ami olyasmi mint a fluent interface, csak Scala-ban nem kell kiírni bizonyos esetekben a pontot a fv hívásnál így még jobban olvasható lesz a kód. Végül az ExpandoMetaObject-ről, ami nekem már magas volt, de valami reflection-szerű dolog.

Venkat Subramaniam a 2.8-as Scala verzióban bevezetett újításokról beszélt. Roppantul tetszett, ahogy realtime mutatta be egy sima szövegszerkesztővel a példákat, ott helyben begépelve, mezítláb, illetve pontosabban zokniban. Szimpatikus volt az a szövegszerkesztő is, vagyis a plugin amit használt hozzá. A begépelt apró programokat rögtön kiértékelte és az eredményt popup-ban megjelenítette közérthető módon.

Tehát a Scala 2.8 új elemei:

  • Fontos új elem a Vector Collection, aminek nem csak az elejére lehet "beszúrni" elemet mint a List-nek hanem bárhova. Azért írtam idézőjelet, mert egy immutable objektumról beszélünk. Valójában egy új objektum képződik egy ilyen beszúrásnál nem a meglévő változik meg.
  • Vannak lazy collection-ök, amik csak akkor számolják ki a next-et amikor valóban szükség van rá. Pl. a Stream, bár én úgy emlékszem hogy megvolt ez már 2.7.9-ben is.
  • Named parameters: el lehet nevezni paramétereket, ami gondolom annotációként lemegy a fordítot class fájlba és lehet ezekre név szerint hivatkozni a függvény meghívásánál. Akár meg is lehet cserélni a paraméterek sorrendjét így.
  • tailrec annotáció, ami egyrészt segítség a compiler-nek a farokrekurzió kioptimalizálásához, másrészt fordítási hibát okoz ha valaki elrontja ennek a mágiának az előfeltételeit, pl. az utolsó művelet nem a függvény saját magának a meghívása lesz. Itt a realtime demónál elgépelt valamit, de majd utánanézek hogy mennyire volt ez véletlen.
  • Chained packages: package-ben lehet package-t definiálni. Nem értettem pontosan, de itt valami olyan változtatásról volt szó, ami visszafelé nem kompatibilis a 2.8 előtti verziókkal. Nem okoz gyakran fejfájást, speciális eset.


Egyébként a konferencián gyakran visszatérő téma volt a funkcionális paradigma használata, a Scala és Clojure nyelvek bemutatásától és boncolgatásától kezdve egészen Neal Ford Functional Thinking című előadásáig, ami arról szólt hogy java-ban hogyan lehet funkcionálisan programozni és ez miért jó. Az utolsó napon én már minden előadásba ezt a paradigmát magyaráztam bele tudat alatt. Akár Ted Neward Rethinking Enterprise című standup comedy-jén vagy amikor az Neal Ford Abstraction Distractions-ről beszélt. Az OO biztos az ultimate módszer? Az EJB minden problémánkat megoldott? Akkor csak fel kellene tekerni 11-es állásra a potit a szerveren és bármennyi kérést ki tudunk szolgálni, nem? Ne fogadjunk el semmit feltétel nélkül, mindig keressük a jobb megoldásokat. Btw, a "best practice" valójában a kib. átlagos gyakorlatot jelenti, egyáltalán nem a "legjobbat", hiszen mindenki azt használja. De a Clojure nekem még továbbra is UFÓ programozási nyelvnek tűnt, dehát azt is megtanultuk a Paul Graham Blub paradoxonjával, hogy ez egy megszokott dolog.

Tehát legyetek nyitottak az újra, szeressétek az elsőrendű függvényeket és sosem fogadjátok el azt a választ, hogy "Jézus". Én meg jövök még egy poszttal nemsokára, ha minden jól megy. Abban írok még majd pár érdekes előadásról és magáról a konferencia többi részéről úgymint helyszín, utazás, emberek, ingyen sör.

Szólj hozzá!

Címkék: konf scala

A bejegyzés trackback címe:

https://kodzaj.blog.hu/api/trackback/id/tr252817546

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.