Friday, February 14, 2020

00 - Hello Scala

Ezekben a postokban megpróbálom összefoglalni a "Funkcionális programozás a gyakorlatban", üzemmérnök informatikus kötelező tárgyon heti egy-egy-két-három-öt-nyolc egységre lebontva, hogy mi történt előadáson/gyakorlaton, lehet, hogy kicsit másképp szervezve, mint ahogy valójában történt.

Menet közben igyekszem feltételezni, hogy a célközönség mintatanterves üzemmérnök informatikus, és most ismerkedik párhuzamosan a Java nyelvvel is és az OOP paradigmával is, de ha van magyarázatra szoruló szakszó, és jön rá request, akkor beleszerkesztem :)

A kódokat ilyen fonttal fogom szedni, próbálom syntax highlightolni is:


object Main extends App {
  println( "Hello Scala" )
}

Hogy kipróbáljuk őket, arra több módszer is van, a legegyszerűbb talán egy online fordító, a scastie használata, kép:

Tehát: először is kapcsoljuk ki a Worksheet módot (dark/light téma választó gomb bal alul btw), az olív színű boxba tudunk eztán gépelni kódot, ami mentés után lefordul, lefut és ha van valami kimenet, az az alsó sötétkék boxba kerül ki.

Egyébként a Scala nyelvhez ún. "worksheet" használata, amit REPL-nek is neveznek (ez a read-eval-print loop rövidítése), egy bevett módszer: ekkor interpreter módban használjuk a felületet, és amint beírunk egy kifejezést, a REPL kiértékeli és kiírja az értékét / típusát, a következő után megint és megint. Most nem így fogjuk használni, hanem "teljes értékű" fejlesztőkörnyezetként, ezért kapcsoltuk ki a Worksheet lámpát, de aki próbálgatni akar szintaktikus elemeket, egy worksheettel talán kényelmesebben fog tudni dolgozni.

A másik kényelmes opció keríteni egy IDÉt, felrakni a gépre és abban dolgozni. A kabinetben is, nálam is az IntelliJ IDEA-t használjuk, rátelepítve a Scala plugint. Nagyobb programoknál, amikor majd package-ekbe is fogjuk szervezni a forráskódot, vagy amikor teszteket fogunk futtatni, mindenképp az ideában lesz érdemes dolgozni. Talán hogy működésre bírjuk / kipróbáljuk a rendszert, miután felraktuk az idét (jvm is ofc legyen a gépen), a legegyszerűbb egy új projektet kreálni:
válasszuk a Scalat és benne az sbt-t:

a következő képernyőn mindenből a legfrissebbet fogja (vélhetően) felajánlani, ez így jó is, válasszunk neki egy modul nevet, ez most a példámban Hello lesz:
Note: a kabinetben az sbt az 1.3.7-es van feltelepítve az image-ekre, így ott nem a legfrissebbet (ami per pillanat az 1.3.8), hanem az 1.3.7-et fogjuk használni. (Ha már létező projectben akarjuk ezt átállítani, akkor a project/build.properties file-ban kell átírjuk a megfelelő sort arra, hogy sbt.version = 1.3.7.) A build.sbt file-ban pedig érdemes lehet a scalaVersion := "2.13.1" sorral egy (currently) friss scala változat használatára késztetni a fordítót. Ezután a sbt (ScalaBuild Tool) kijelölt változata (egyszer) letöltődik a gépünkre, majd ő is letölti minden szükséges libből a megfelelő verziójút és jó esetben max pár perc után (a jobb alsó textareaban a konzol írja is, hogy "this may take some time", hát, frankly, nem hazudik), kapunk egy ilyesmit (a fastruktúrát bal oldalon lehet le kell nyitogatni hozzá, hogy ilyen legyen):
Ha a fenti hello scala "appot" akarjuk elkészíteni, akkor most a bal oldali fastruktúrában a scr/main/scala (kék) mappára jobb klikk, a felugró context menüből New/Scala class:

itt a "mi legyen a gyerek neve" kérdésre válaszoljuk azt, hogy Main és válasszuk, hogy Object legyen:
létrejött egy bogyó a Mainnek a fában és meg is nyitja szerkesztésre a hozzá tartozó forrásfilet (ha nem, akkor kattints rá kettőt), itt az előre elkészített object Main { } helyére beírhatjuk a komplett hello scala példakódunkat (ami most egy kicsit más, mint amit a scastie-ba írtunk):


 Amit futtatni tudunk, az (egyelőre) egy olyan kód, aminek a belépési pontja egy objecten belül defelt main metódus. Lehet, hogy több ilyenünk is lesz; most még meg kell mondjuk az ideának, hogy konkrétan ezt kellene futtassa. Készítünk egy run configurationt:
a felugró dialógban a "plusz"ra bökünk bal fent, kiválasztjuk, hogy Application-t fogunk futtatni:

 A jelölt részeken változtattam: a module classpathot kiválasztottam a legördülőből, a Main class-ba az object nevét kell írjuk, ami most Main, a run config nevének meg kreatívan azt adtam, hogy "Hello":

 A warninggal (ha van) nem kell foglalkoznunk, ezt most én azért kaptam, mert még nem fordítottam le a projektet. Az okéra kattintás után jobb fent lesz egy play háromszögünk, nyomjuk meg (vagy shift-F10):

Ha minden jól ment, akkor alul, a konzol kimeneten látnunk kéne a "Hello Scala" felirat és a sikeres lefutást jelző exit code nullát:

Run configot persze Main objektumonként egyet elég létrehozni, onnantól kezdve elég lesz kattogni a háromszögre (ha variálni akarjuk, hogy melyik run configurationt akarjuk indítani, akkor azt a kalapács és a háromszög közti comboboxban tudjuk kiválasztani), vagy shift-F10.

Az élesebb szeműek talán megfigyelték, hogy van egy kis különbség: a scastie-ban nincs main metódus, van viszont egy extends App rész. Működik így is, úgy is (ha átírjuk a Maint arra, ami a scastie példa előtt van, az is köszönni fog nekünk).
Hamarosan mindent meg fogunk érteni abból, amiket most beállítgattunk.

folytköv

No comments:

Post a Comment