Idiomatic Scala

 ( pgee | 2015. május 12., kedd - 15:02 )

Sziasztok,

Egy ideje ugykodom egy non-blocking scala kliensen a brickset.com SOAP APIjahoz.
A kod itt talalhato: https://github.com/voidcontext/scala-brickset-client .

Az a helyzet, hogy a Scala-t meg csak tanulgatom, ezert valoszinuleg vannak a kodban olyan megoldasok, amiket Scalaban lehetne szebben/jobban irni.
Szoval a kerdesem az lenne, hogy tudnam meg "Scalasabba" tenni a kodot?

Elore is koszi,
Gabor

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Koszonom, javitottam.

Futolagos rapillantas utan:
- van valami specialis oka, hogy actorokat hasznalsz?
- van valami specialis oka, hogy Either-t hasznalsz Try helyett?
Egyebkent pont most megy a https://class.coursera.org/reactive-002/ tanfolyam, szerintem erdemes belenezned.
Udv,
Gabor :)

- Ha jol ertettem a dolgokat, akkor az akka actorok szepen le managelik maguknak a thread kezelest, es cel volt, hogy a kliens ne blokkolo legyen. Az apache camelnek meg van akka-s integracioja, ezert valasztottam ezt a megoldast. Mashogy is meglehetett volna csinalni ilyen egyszeruen?
- Either vs Try: valoban a Try jobban illene oda, koszi.
- Coursera: igen, kovetem a dolgokat az elejetol, ezen a heten jonnek az actorok :)

Koszi a segitseget :)

Future {}, masneven a Future object apply metodusa. Ez az implicit ExecutionContext alapjan indit egy konkurrens folyamatot (alapesetben egy automatikusan konfiguralt threadpool-bol valaszt maganak egy thread-et), es a vezerles rogton visszakerul a foszalhoz. Kb. mintha a Thread.start()-ot hivnad.
Actoroknak a fo elonye az, hogy elvileg transzparens, hogy melyik actor hol van - ugyanabban a JVM-ben vagy egy masikban, vagy akar egy masik szerveren a vilag tuloldalan. Termeszetesen hasznalhatsz actorokat egyszeru multithreaded programhoz is, de az elegge agyuval verebre tipusu akcio.

ui: ezt a konyvet nagyon, nagyon, NAGYON tudom ajanlani, meg talan jobb is, mint a courseras tanfolyami anyag:
www.amazon.com/Learning-Concurrent-Programming-Aleksandar-Prokopec-ebook/dp/B00QFBNXHK
Fent van safari-n is, ha van esetleg elofizetesed :)

Koszi, a reszletes indoklast :)

Sejtettem, hogy az akka kicsit heavyweight lesz ehhez a projecthez, de egeszen egyszeru volt az apache camel integracioja.

Kozben elkezdtem atirni a kodot, akka + apache camel helyett scalaxb-t hasznalva, ami azzal az elonnyel is jart, hogy a java classokat, managed scala classokra sikerult cserelni.

Milyen IDE-t hasznalsz scalahoz, milyen erzes fejleszteni benne pl. Javahoz kepest? (feltetelezve, hogy van Java tapasztalatod)

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
--> YouTube csatornám

Alapvetoen elegedett (g)vim felhasznalo vagyok, azonban a meg kisse hianyos scala tudasom, es a gyakorlat hianya miatt egy kicsit gyorsabb fejlettebb (es csigalassu) IDE-t hasznalni. Probaltam a Scala IDE-t (eclipse) es az IntelliJ Idea-t (Community Edition), vegul az utobbinal maradtam.

Javahoz nem tudom hasonlitani, mivel sose javaztam... A Haskellnel sokkal hasznalhatobbnak tunik, felreertes ne essek, a Haskell a funkcionalis nyelvek mintapeldaja, csak a Scala sokkal rugalmasabb, eppen ezert nehol nehezebb is olvasni... Neha a regi Perl-es idok jutnak eszembe rola :)

Épp javasolni szerettem volna az actorokat. Pont a coursera miatt, Erikék megint nagyot alkotnak, egészen más szemléletem lesz utána :-).

(Meglepő, mennyire hasonlít ez az egész rx és akka dolog a HDL alapú hardvertervezéshez. Vagy legalábbis az alapján az egész signal, actor, observer koncepció eléggé jól fogható volt. Csak a Scala nyelvismeretem hiányzik mellőle, azt menet közben szedem fel)

Bár a teljes kódbázis elég nagy ahogy néztem, de egyes részeit a http://codereview.stackexchange.com-on is megfuttathatod, biztos akad jelentkező egy kis ekézésre :)

-
JVM futásidejű monitorozása

Nem olyan nagy a kod, a java-s classok generalva lettek a wsdl-bol, csak mivel eleg maceras volt, ezert lett becommitolva. A refactoralt verzioban, mar egy sbt plugin vegzi ezt is, es scala classokat general.

Koszi a linket, meg nem talalkoztam vele :)