So behandeln Sie Null-Eingabeparameter in Scala

8

Ich weiß in Scala, dass eine Methode niemals null zurückgeben soll ... aber was sind Eingabeparameter? Angesichts der folgenden Code-Schnipsel ...

%Vor%

... ist die Art, wie ich p richtig überprüfe? Gibt es eine Empfehlung?

    
j3d 29.11.2012, 22:00
quelle

4 Antworten

19

Die Konvention ist, dass Scala-Code keine Nullen verwendet (mit einer kleinen Anzahl von Ausnahmen, die sofort behoben werden sollten, wenn diese Bibliotheksfunktionen verwendet werden).

Somit ist eine Null von Scala ein Zeichen dafür, dass etwas schiefgelaufen ist (zumindest ein PBCAK ) ), so können Sie auch eine Ausnahme auslösen. Dies ist keine Routineoperation; das ist etwas ernsthaft vermasselt. Fangen Sie die Ausnahme, wo immer Sie schwerwiegende Fehler machen. Ein IllegalArgumentException statt eines NullPointerException einzufangen fügt keine zusätzlichen Informationen hinzu. Lass das Original einfach alleine.

Wenn der Code aus Java stammt, können Sie ihn in Option umbrechen, wodurch null in None konvertiert wird. Dann müssen Sie wahrscheinlich nicht einmal eine Ausnahme auslösen; gib einfach None zurück.

%Vor%

Wenn Sie nicht fortfahren können, wenn es null ist, dann müssen Sie überlegen, ob eine informative Ausnahme helfen würde. Option(p).orElse(throw new IllegalArgumentException("Null!")) ist eine kompakte Art, die ausnahmesetzte Stimmung auszudrücken.

In Scala 2.10 können Sie auch Dinge in scala.util.Try(...) einbinden, die automatisch die Ausnahme für Sie fangen und verpacken. Wenn Sie eine verpackte Ausnahme anstelle einer geworfenen wollen, ist dies der richtige Weg. (Und Try anstelle von Option verwenden.)

%Vor%

Verwenden Sie für eine allgemeinere Behandlung alternativer Ergebnisse Either . Die Konvention für die Fehlerbehandlung ist, dass die erwartete Ausgabe ein Right(whatever) ist, während Left(whatever) anzeigt, dass etwas schief gegangen ist.

    
Rex Kerr 29.11.2012, 22:49
quelle
6

Es gibt mehrere Möglichkeiten und Ihr Weg ist einer.

Sie können auch verwenden:

%Vor%

oder der "funktionalere" Weg wäre Option :

zu verwenden %Vor%

bearbeiten:

oder wenn Sie den Fehler ohne Ausnahme wollen, können Sie Either :

verwenden %Vor%     
drexin 29.11.2012 22:07
quelle
0

Das Scala-Idiom ist im Wesentlichen "benutze niemals Nullwerte". Wenn Sie also keine API schreiben, die schmutzige Java-Benutzer aufnehmen soll, würde ich mir darüber keine Sorgen machen. Andernfalls werden Sie am Ende diesen Textbaustein-Check für jeden Parameter bei jeder Methode, die Sie schreiben, einfügen.

Ihre schönen One-Line-Methoden

%Vor%

wird etwas Unangenehmes wie

%Vor%

oder

%Vor%

Wie schrecklich.

    
Chris Martin 29.11.2012 22:29
quelle
0

Mein Lieblingsansatz ist etwas wie:

%Vor%

In diesem Fall ist null None und Leerzeichen werden abgeschnitten.

    
Stas 12.12.2017 15:54
quelle

Tags und Links