Ich wollte glauben, ich hätte Elms benutzerdefinierte Typen in Java verstanden

Dies ist ein Memo, über das Onkel Java in Java nachgedacht hat, um die benutzerdefinierten Typen von Elm zu verstehen. Ich kenne Chokwagata nicht.

Nehmen Sie Ergebnis als Beispiel für einen benutzerdefinierten Typ:

Elm Ergebnis Definition


type Result error value
    = Ok value
    | Err error

Ein Beispiel für eine Java-Darstellung des obigen "Ergebnisses":

Result.java


interface Result {
    class Ok<V> implements Result {
        final V value;
        Ok(V value) { this.value = value; }
    }

    class Err<E> implements Result {
        final E error;
        Err(E error) { this.error = error; }
    }
}

Beispiel für die tatsächliche Verwendung des Java-Versionstyps "Ergebnis":

Main.java


class Main {
    public static void main(String[] args) {
        show(validate("100"));     // -> Ok: 100
        show(validate("200hoge")); // -> Err:Bitte gebe eine Nummer ein
    }

    /**
     *Stellen Sie sicher, dass Text eine Zeichenfolge ist, die nur aus Zahlen besteht.
     * @param text Die zu überprüfende Zeichenfolge.
     * @Ganzzahl, wenn der Rückgabetext nur aus Zahlen besteht.parseInt(text)Das Ergebnis von
     *Ergebnis im Wertefeld gesetzt.Ok 。<br>
     *Wenn der Text etwas anderes als Zahlen enthält"Bitte gebe eine Nummer ein"Zu
     *Ergebnis im Fehlerfeld eingestellt.Err 。
     */
    static Result validate(String text) { //"Ulme verstanden von den Grundlagen" P..91 Validierungsfunktionen sind das Ausgangsmaterial
        try {
            var n = Integer.parseInt(text);
            return new Result.Ok<>(n);
        } catch (NumberFormatException e) {
            return new Result.Err<>("Bitte gebe eine Nummer ein");
        }
    }

    /**
     *Geben Sie den Inhalt des Ergebnisses in die Standardausgabe aus.
     * @param result Der auszugebende Wert.
     */
    static void show(Result result) {
        if (result instanceof Result.Ok) {
            var ok = (Result.Ok<Integer>) result;
            System.out.println("Ok: " + ok.value);
        } else if (result instanceof Result.Err) {
            var err = (Result.Err<String>) result;
            System.out.println("Err: " + err.error);
        } else {
            throw new RuntimeException("Der Mysterientyp ist angegeben");
        }
    }
}

Es ist ein Code, der nicht cool aussieht, weil er stark von der im Typparameter angegebenen "Ganzzahl" und "Zeichenfolge" abhängt und an der "Insutanceof" verzweigt. Ich glaube, ich habe nicht mein Bestes gegeben. ~~ In einer solchen Atmosphäre. ~~

Die aktuelle Wahrnehmung ist, dass die benutzerdefinierten Typen von Elm in Java so aussehen. Ursprünglich sollten Sie algebraische Datentypen richtig lernen, aber vorerst hat sich mein Verständnis verbessert (ich fühle), also Yoshi! Ich bin.

Recommended Posts

Ich wollte glauben, ich hätte Elms benutzerdefinierte Typen in Java verstanden
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Ich möchte eine E-Mail in Java senden.
rsync4j - Ich möchte rsync in Java berühren.
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich möchte so etwas wie "cls" in Java machen
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Ich habe ein Roulette in Java gemacht.
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
Ich habe Java-Primitivtypen untersucht
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, Dapr in Java zu verwenden, um die Entwicklung von Mikroservices zu erleichtern
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, Metaprogrammierung mit Java
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich habe eine E-Mail in Java gesendet
Multithreaded passend zur [Java] Vorlage
Ich habe ein PDF mit Java erstellt.
Ich habe versucht, mit Java zu interagieren
Protokollausgabe in Datei in Java
Ich habe Gordobachs Theorem in Java geschrieben
Ich habe eine Anmerkung in Java gemacht.
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
So benennen Sie Variablen in Java
Versuchen Sie, Yuma in Java zu implementieren
Liste der in Java 9 hinzugefügten Typen
Ich habe jetzt versucht, Java 8 zusammenzufassen
So verketten Sie Zeichenfolgen mit Java
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
[Einführung in Java] Ich habe versucht, das Wissen zusammenzufassen, das ich für wesentlich halte
Ich wollte eine Diashow mit Slick modisch umsetzen.
Ich habe die COTOHA-API-Syntaxanalyse 100 Mal in Java aufgerufen, um die Leistung zu messen.
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
[Java Spring MVC] Ich möchte DI in meiner eigenen Klasse verwenden
Als ich eine Methode für Premium Friday erstellen wollte, war sie bereits in der Java 8-Standard-API enthalten
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Java-Referenz zum Verständnis in der Abbildung
Versuchen Sie, n-ary Addition in Java zu implementieren
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe das neue Yuan-Problem in Java ausprobiert