Ich habe eine Methode, die String
als Eingabe verwendet und auch String
zurückgibt.
Die folgende ASCII-Grafik zeigt den logischen Ablauf:
%Vor% Im Grunde für gegebene input
suche ich nach A
Objekt, das in einem Option
verpackt zurückgegeben wird. Dann ist A
vorhanden Ich suche nach B
- auch in Option
eingepackt, sonst gib ERR_1
zurück. Wenn B
vorhanden ist, gebe es id zurück, andernfalls gib ERR_2
zurück.
Ich frage mich, wie es mit Optionals (oder Pattern-Matching vielleicht?) in einer schönen und prägnanten Art und Weise (ohne ifology ) implementiert werden könnte - möglicherweise in One-Liner.
Könnte jemand bitte etwas vorschlagen?
Quellcode zum Ausprobieren finden Sie hier .
Es sieht so aus, als hätten Sie 3 mögliche Ausgangspunkte:
Sie erreichen dies, indem Sie dies mit Javaslang tun:
%Vor% Wenn optA
leer ist, springen wir direkt zu orElse("ERR_1")
Wenn optA
nicht leer ist, verwenden wir den Wert, der darin gespeichert ist, um den Wert b.bid
oder "ERR_2"
im Fall von optB
Leerheit zu erhalten.
Auch in reinem Java 8 würde es so aussehen:
%Vor% Da Sie javaslang verwenden, scheint Try
eine bessere Wahl zu sein, da es den Fehler in der Kette weitergibt, während Option nur seine "Leere" propagiert.
Wenn Sie findA
und findB
ändern können, um Try
zurückzugeben, erhalten Sie:
Wenn nicht, dann:
%Vor% Das wird vorläufig B
, ich bin mir nicht sicher, ob Sie den gültigen Wert und den Fehler auf den gleichen Wert reduzieren möchten, wenn das der Fall ist:
Wenn Sie ein Problem beim Erstellen von sinnlosen Ausnahmen haben, können Sie Either
in jeder der Suchoperationen verwenden, wobei der linke Wert Ihr Fehlertyp ist. Das scheint das Problem besser zu modellieren, kann aber den Nachteil längerer Signaturen haben, je nachdem, wie Sie die Ausdrücke aufteilen.
Sie möchten dies an Ihren Code anpassen, aber dies ist ein Ansatz, den ich verwenden würde.
Isolieren Sie zuerst die Fehler, die Sie für jeden Fehlerpunkt einkapseln möchten.
%Vor%Dadurch können Sie später ein Lambda schreiben, um bei Bedarf eine spezifische Fehlermeldung anzuzeigen.
Jetzt schreiben wir die Optionals.
%Vor% Um optB
zu extrahieren, verwenden Sie dasselbe Muster wie für optA
.
Tags und Links java java-8 functional-programming optional vavr