Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aber da hast du mich in der Vorlesung heute falsch verstanden und daher auch im falschen Kontext zitiert:
Die obigen Beispiele gehören noch zur „schönen (weil funktionalen) Seite von Scala“…
=> Methode [m]protected final def Value: Value = Value(nextId)[/m] (Z.135) vs. Klasse [m]abstract class Value extends Ordered[Value][/m] (Z.191)
[Edith²: das erste [m]def Value[/m] ist ein Methodenname, das zweite [m]: Value =[/m] ist eine abstrakte Klasse als Rückgabetyp und das dritte [m]Value(nextId)[/m] ist eigentlich der Aufruf der Methode [m]apply[/m] des Companion-Objects der Klasse Value…]
…
und last but not least: Scala 3
[m]final case class ::[B](hd: B, tl: List[B]) extends List[B] with Product with Serializable[/m]
vs.
Methode [m]def ::(x: B): List[B][/m]
Hier wie versprochen meine Lieblingszeile aus der [m]Pascal.scala[/m] (Wie war das mit diesen Tupeln eigentlich gedacht? Ich schlepp die ja nur mit, weil es die Aufgabestellung so fordert):
case l => for { p <- pairs(List((0,0,0)) ::: l ::: List((0,0,0))) } yield (p._1._2, p._1._2 + p._2._2, p._2._2)
Und jetzt beteiligt sicht hier doch auch mal jemand außer JohnDoe mit schönen Codebeispielen.
Wenn ich doch nur so schönen Code hätte 0_o
Wobei ja Schönheit im Auge des Betrachters liegt. Ich hab mich mit pattern-matching und einer extra Funktion zum berechnen der nächsten Zeile zufrieden gegeben
Ja es gibt einen kleinen Unterschied:
Die Variante mit der runden Klammer erwartet Semikolons zwischen mehreren Generatoren, wohingegen die Variante mit der geschweiften Klammer keine Semikolons braucht.
Letztere Variante scheint sich wie ein Code-Block zu verhalten und das letzte Ergebnis des Code-Blocks wird als sog. Sequence für das for verwendet. Durch die fehlenden Semikolons wird es aber schwer einzusehen, wo die letzte Sequence in dem Block beginnt, da sie aus einem Generator, einer evtl. vorhandenen Anweisung und evtl. einem Guard besteht.
a ist ein Tupel. f(a) hätts also auch jeweils getan statt f(a._1, a._2), sowie f(a._1, a._2)._1 statt (f(a._1, a._2)). Viel leserlicher wirds dadurch nicht aber immerhin. War schon ein ziemliches gefummel die Adder.scala.