Unterbrechen und fortfahren:
In einem Vortrag über Scala gab Martin Odersky 3 Gründe an, keine Pause einzuschließen oder auf Folie 22 fortzufahren:
- Sie sind ein bisschen zwingend; Verwenden Sie besser viele kleinere Funktionen.
- Fragen zur Interaktion mit Abschlüssen.
- Sie werden nicht benötigt!
Und dann sagt er: "Wir können sie rein in den Bibliotheken unterstützen." Auf Folie 23 gibt er Code an, der implementiert wird break
. Obwohl ich Scala nicht genau genug kenne, um sicherzugehen, scheint es, dass das kurze Snippet auf dieser Folie alles ist, was zur Implementierung benötigt wird break
, und das continue
könnte in Code implementiert werden, der ähnlich kurz ist.
Solche Dinge in Bibliotheken implementieren zu können, vereinfacht die Kernsprache.
In "Programming in Scala, Second Edition" von Martin Odersky, Lex Spoon und Bill Venners wird Folgendes erklärt:
Möglicherweise haben Sie bemerkt, dass break
oder nicht erwähnt wurde continue
. Scala lässt diese Befehle aus, weil sie nicht gut mit Funktionsliteralen zusammenpassen. Es ist klar, was continue
in einer while
Schleife bedeutet, aber was würde es in einem Funktionsliteral bedeuten? ... Es gibt viele Möglichkeiten, ohne break
und zu programmieren. continue
Wenn Sie Funktionsliterale nutzen, können diese Alternativen häufig kürzer als der ursprüngliche Code sein.
Rückkehr:
Rückgaben können als ein bisschen zwingend angesehen werden, da Rückgabe ein Verb ist, ein Befehl, etwas zu tun. Sie können aber auch rein funktional / deklarativ gesehen werden: Sie definieren den Rückgabewert der Funktion (auch wenn in einer Funktion mit mehreren Rückgaben nur jeweils eine Teildefinition angegeben wird).
Im selben Buch heißt es return
:
Wenn keine explizite return
Anweisung vorliegt, gibt eine Scala-Methode den letzten von der Methode berechneten Wert zurück. Der empfohlene Stil für Methoden besteht darin, explizite und insbesondere mehrfache return
Anweisungen zu vermeiden . Stellen Sie sich stattdessen jede Methode als Ausdruck vor, der einen Wert ergibt, der zurückgegeben wird.
Methoden beenden und geben einen Wert zurück, auch wenn keine return
Anweisung verwendet wird. Daher kann es keine Probleme mit Closures geben, da Closures andernfalls nicht funktionieren würden.
Es kann auch kein Problem geben, gut mit Funktionsliteralen zu verzahnen, da die Funktion ohnehin einen Wert zurückgeben muss.
break
undcontinue
brauche zusätzliche Aufräummaschinen. OTOHreturn
ist eine Möglichkeit, eine Funktion ordnungsgemäß zu beenden, und Reinigungsmaschinen sind ohnehin bereits vorhanden.