Ich mag die Verwendung von require
, assert
, assume
und das Dokumentieren von Vorbedingungen und Nachbedingungen einer bestimmten Funktion, aber ich habe auch angefangen, hauptsächlich scalaz.Validation
zu verwenden, um Prüfungen durchzuführen, die früher require
gemacht hat. Aber in letzter Zeit interessiere ich mich am meisten für die Verwendung von PartialFunction
, möglicherweise mit Validation
, um eine Vorbedingung zu dokumentieren. Etwas wie:
case class Summary(user: String, at: DateTime, ....)
val restricted_add: PartialFunction[(Summary, Summary), Summary] = {
case (s1: Summary, s2: Summary) if s1.user != s2.user && s1.at == s2.at =>
}
mit einer Hilfsfunktion zum Erfassen und Umwandeln eines Matchfehlers in ein Validierungsfehler (z.B. restricted_add.lift(_).toSucess("Kann nicht hinzugefügt werden.")
). Irgendwie scheint die obige Fallklausel weniger laut als ein For
mit scalaz.Validation
. Aber ich habe das Gefühl, gegen die Sprache zu handeln. Ich verwende nicht die natürliche Syntax von def
zum Definieren von Parametern, jeder Client einer solchen Funktion müsste eine Hilfsfunktion beim Aufruf verwenden, ich würde Ausnahmen erfassen und in Validierungen umwandeln, anstatt nur mit Validierungen oder nur mit Ausnahmen zu arbeiten.
Was scheint der am wenigsten laute, funktionalste Weg zu sein, diese Vorbedingungen durch Code zu dokumentieren? Validation
zurückgebende Funktionen, require
-Anweisungen, PartialFunction
, andere...?