Változók kezelése Scalában

Kategória: Scala.

A változók minden nyelv alapelemei, kezdjük ezekkel!

Típusok

A szokásos alaptípusok itt is megtalálhatóak, viszont fontos tudnunk, hogy nincsenek primitív típusok, mindegyik típus objektum. Így a névkonvenció alapján nagy kezdőbetűvel kell írnunk. A szám típusok mindegyik előjeles. Típusok:

  • Byte: 1 bájtos egész
  • Short: 2 bájtos egész
  • Int: 4 bájtos egész
  • Long: 8 bájtos egész
  • Float: 4 bájots lebegőpontos
  • Double: 8 bájtos lebegőpontos
  • Char: 2 bájtos előjel nélküli Unicode karakter
  • Boolean: logikai

Mivel minden objektum, azon metódusok hívhatóak, pl. 5.toShort.

Változók deklarálása

Kétféleképpen deklarálhatunk változót:

  • var kulcsszóval: ezzel valóban változót deklarálunk, amit meg lehet változtatni, pl. var a = 2.
  • val kulcsszóval: ezzel igazából nem változót, hanem konstanst deklarálunk, tehát mintha a Java-ban a final kulcsszót használnánk, pl. val b = 3. Ezt megváltoztatni nem lehet. A funkcionális programozásban javasolt a val használata ott, ahol csak lehet, ugyanis ez esetben a fordító tud optimalizálni, míg a var esetén kevésbé.

A példákban láthattuk, hogy nem kellett megadni a típust, azt a fordító kitalálja. A fenti példákban Int típusúként deklarálta. Ha ettől el szeretnénk térni, akkor a változónév után kettősponttal elválasztva tudjuk megadni a típust (tehát nem elébe tesszük, mint a Java-ban), pl. val b: Byte = 3.

Értékadásnál a szokásos prefixeket és postfixeket használhatjuk, pl. 0XA1 (hexadecimális), 035 (oktális), 12345678L (Long), 3.14f (Float), ill. logikai típusnál true és false.

Operátorok

A megszokott operátorok megtalálhatóak a Scala-ban is, ugyancsak megszokott precedenciával:

  • Aritmetikai: +, -, *, /, %
  • Relációs: ==, !=, <, >, <=, >= (az összehasonlítás mindig érték szerint történik, így itt nincs jelen a Java-ban megtalálható anomália, hogy két azonos értékű String összehasonlítása hol igaz, hol hamis; itt mindig igaz)
  • Logikai: &&, ||, !
  • Bitműveletek: &, |, ^, ~, <<, >>, >>> (a mozgatáskor balról mindig nullával tölti föl, előjeltől függetlenül)
  • Értékadó: =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=

Megjegyzés: a Spark környezetben előfordul a === és a =!= operátor is; ezek DataFrame-ben oszlop szerinti szűrést hajtanak végre.

String

A String Char-ok sorozata. A Java-ban megszokott módon tudunk értéket adni, pl. val s = "hello". A típust itt sem kötelező megadni, de megadhatjuk, ha szeretnénk, pl. val s: String = "hello". A Java-ban megszokott módon tudunk String-eket egymás után fűzni, pl. "hello" + " world". Használhatjuk a szokásos formázó escape karaktereket, pl. \t a tabulátort, \n az új sort jelenti. Pl. println("apple\tpeach\nbanana"). Néhány, ugyancsak megszokott függvény, amelyet String-en tudunk végrehajtani:

  • Int length()
  • Char charAt(i)
  • String trim()
  • String toUpperCase()
  • String toLowerCase()
  • Boolean startsWith(s)
  • String replaceAll(s1, s2)
  • String[] split(regex)

Azonban a Java-hoz képest történt pár előrelépés is. Pl. megjelent a több soros String, melyet 3 idézőjellel lehet megadni, pl.

val ls = """This is
a multi line
String"""

Bevezették az interpolátorokat:

  • s (string) interpolátor: automatikusan behelyettesíti egy változó értékét, pl. val name = "Csaba"; println(s"Szia, $name") azt írja ki, hogy "Szia, Csaba" (ez egyúttal példa arra is, hogy a pontosvessző itt is használható). Ill. kiszámolja a műveletek értékét, pl. println(s"2 + 3 = ${2+3}") eredménye ez: 2 + 3 = 5.
  • f (format) interpolátor: a jó öreg printf függvény szokásos formázásait tudjuk használni, pl. println(f"${Math.PI}%.2f") a pi értékét írja ki 2 tizedes pontossággal.
  • raw (nyers) interpolátor: minden formázást figyelme kívül hagy, pl. a println(raw"apple\tpeach\nbanana") ezt írja ki: apple\tpeach\nbanana.

Egyéb típusok

A Scala típus struktúrája igen gazdag más programozási nyelvekhez képest, ebben a fejezetben épp hogy csak a felszínt karcoltuk. A további részletek megismeréséhez a Scala objektumorientált részeit is ismernünk kell, így a későbbiekben újabb típusok bemutatására kerül majd sor.

Egy példa

A következő (és valójában a többi) példát vagy beletesszük egy main függvénybe, vagy parancssorból is futtathatjuk egyesével.

val i = 2
var s: Short = 3
println(s"Sum = ${i+s}")
s = 4
println(s > 3)
println("Hello, World!".toLowerCase)

Parancssorból futtatva a println sem kell, anélkül is kiírja az eredményt. Az egyszerűség érdekében a println-t sok esetben elhagyjuk.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License