scala – Schulung Tag 2

So, die Schulung ist vorbei. Und hier mla wieder kurz zusammen gefasst, was so behandelt wurde.

Loops in scala

  • Werden über sog. for Expressions gelöst
  • Der Rückgabe-Typ entspricht dem Typ des ersten Generators
  • Jeder Generator wirkt wie eine verschachtelte Schleife
  • for (i <- List(1, 2, 3)) yield i + 1 erzeugt List[Int] = List(2, 3, 4)
  • hinter Generatoren lassen sich Filter schreiben: i <- 1 to 3 if i % 2 == 1 selektiert nur ungerade Werte einer Liste
  • werden vom Compiler im map, flatMap, … übersetzt
  • lassen sich auch ohne Rückgaben (bzw. mit Unit als Rückgabe) ausführen, dann ohne yield Teil
  • innerhalb einer for Expression können lokale Variablen definiert werden

Vererbung in scala

  • Funktioniert via Keyword „extends“
  • Kindklassen müssen umgehend den Kontruktor der Elternklasse rufen

  • final funktioniert analog Java
  • per Keyword sealed kann man die Vererbung einer Klasse auf die aktuelle Datei beschränken
  • Es gibt Enumerations, ähnlich wie die In Java. Aber man soll die nicht benutzen.
  • Beim Überschreiben eines Properties oder einer Methode muss das Keyword override benutzt werden: override val name = „Bird“
  • def (Methoden) können durch val (Konstanten) in Kindklassen überschrieben werden. Andersherum allerdings nicht.
  • Es gibt auch abstrakte Klassen, die durch abstract gekennzeichnet werden.
  • Analog z.B. zu PHP gibt es Traits, welche eine Art horizontale Mehrfachvererbung (Mixins) ermöglichen. Dies wird durch das Keyword with gekennzeichnet. Der letztgenannte Trait sticht, d.h. implementiert im Konfliktfall seine Funktionalität. Auch hierbei müssen z.B. Methoden durch override gekennzeichnet sein.

Pattern Matching in scala

  • Sehr starke und einfache Möglichkeit zur Prüfung von Bedingungen

  • der _ Kennzeichnet den default Fall
  • Es kann gegen einen konstanten Wert gemachtcht werden: case „12:00“ => „High noon“
  • Gegen eine Variable (die auf alles matcht): case x => „Something: “ + x
  • Gegen eine Typ: case x: String => „A String: “ + x
  • Dies kann auch auf den default Fall angewendet werden: case _: Int => „An Int value“
  • Gegen ein Tuple: case („12:00“, „12:01“) => „12:00..12:01“
  • Gegen die Konstruktor-Properties eines Objektes: case Time(12, 00) => „High noon“
  • Das lässt sich auch mit dem Variablen-Matching kombinieren: case Time(12, minutes) => „12:%02d“ format minutes
  • Gegen Sequenzen: case Seq(1, 2, _*) => „1, 2, …“ wobei der _ der Wildcard entspricht und und _* beliebig vielen Elementen am Ende
  • Das Ganze lässt sich dann noch mit if (sog. Pattern Guards kombinieren): case s: String if s startsWith „x“ => „x…“
  • Lässt sich auch ausserhalb von case Anweisungen benutzen, z.B. um Variablenzugriffe zu erleichtern: val (morning, highNoon) = Time(6) -> Time(12)

Exceptionhandling in scala

  • Benutzt pattern matching

XML in scala

  • Ist ein eingebauter Datentyp: <time hours=“12″ minutes=“00″/> ist valider scala Source-Code und kann daher z.B.. auch direkt von einer Methoder zurüc gegeben werden
  • Per geschweiften Klammern, lassen sich Variablen in XML einbinden: <random>{ Random.nextInt }</random> oder <time hours={ time.hours.toString }/>
  • <a/> ++ <b/> fügt die Knoten hintereinander
  • die Methode child liefer die Kindknoten eines XML-Knotens als Collection
  • Eine XPath ähnliche DSL, mit nahezu dessen gesamten Funktionsumfang, ist bereits in scala integriert um XML zu durchsuchen: xml \ „b“ findet alle b Knoten unterhalb des aktuellen.

Der option Type

  • Macht null checks obsolet
  • Es kommt None oder Some zurück
  • Alle Methoden lassen sich auch auch auf None eines Objektes aufrufen: Option(1) = Some(1) bzw. Option(Null) = None

 

Mein Fazit: Also Tag 1 war super, der 2. Tag war sehr anstrengend und ich wurde ein paar mal abgehängt. Aber trotzdem ne super Schulung!

Scala ist auf jeden Fall ne sehr interessante Programmiersprache, wobei ich sagen muss, dass es wohl noch ne Weile dauert, bis sich der funktionale Ansatz in mein Gehirn gefressen hat. Man kann manche Sache, echt super elegant und schön machen, wobei ich denke, dass es sich um ein sehr wissenschaftliche Programmiersprache handelt und ich weiss nicht, ob man das wirklich überall einsetzen muss. Momentan ist sie halt sehr hipp. 😉

Nichts desto trotz werde ich diese Woche, das Gelernte direkt umsetzen. Mal sehen, wie es klappt.

GD Star Rating
loading...

Kommentar verfassen