Je voulais penser avoir compris les types personnalisés d'Elm en Java

C'est un mémo auquel Oncle Java a pensé en Java pour comprendre les types personnalisés d'Elm. Je ne connais pas le chokwagata.

Prenez Result comme exemple d'un type personnalisé:

Définition du résultat Elm


type Result error value
    = Ok value
    | Err error

Un exemple de représentation Java du Résultat ci-dessus:

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; }
    }
}

Exemple d'utilisation réelle du type Result de la version Java:

Main.java


class Main {
    public static void main(String[] args) {
        show(validate("100"));     // -> Ok: 100
        show(validate("200hoge")); // -> Err:Veuillez saisir un nombre
    }

    /**
     *Vérifiez que le texte est une chaîne composée uniquement de chiffres.
     * @param text La chaîne de caractères à vérifier.
     * @Entier si le texte renvoyé est composé uniquement de nombres.parseInt(text)Le résultat de
     *Ensemble de résultats dans le champ de valeur.Ok 。<br>
     *Si le texte contient autre chose que des chiffres"Veuillez saisir un nombre"À
     *Ensemble de résultats dans le champ d'erreur.Err 。
     */
    static Result validate(String text) { //"Elm compris des bases" P.91 fonctions de validation sont le matériau source
        try {
            var n = Integer.parseInt(text);
            return new Result.Ok<>(n);
        } catch (NumberFormatException e) {
            return new Result.Err<>("Veuillez saisir un nombre");
        }
    }

    /**
     *Sortir le contenu du résultat vers la sortie standard.
     * @param result La valeur à afficher.
     */
    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("Le type de mystère est spécifié");
        }
    }
}

C'est un code qui n'a pas l'air cool car il dépend fortement de ʻIntegeret deString spécifiés dans le paramètre type, et il se branche sur ʻinsutanceof. Je suppose que je n'ai pas fait de mon mieux. ~~ Dans une telle atmosphère. ~~

La perception actuelle est que les types personnalisés d'Elm ressemblent à ceci en Java. À l'origine, vous devriez apprendre correctement les types de données algébriques, mais pour le moment, ma compréhension a avancé (je pense), alors Yoshi! Je suis.

Recommended Posts

Je voulais penser avoir compris les types personnalisés d'Elm en Java
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je voulais juste créer une propriété réactive en Java
Je souhaite envoyer un e-mail en Java.
rsync4j --Je veux toucher rsync en Java.
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé de créer une compétence Alexa avec Java
Je veux faire quelque chose comme "cls" en Java
J'ai essayé d'implémenter la notification push Firebase en Java
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
J'ai essayé de découvrir ce qui avait changé dans Java 9
J'ai fait une roulette à Java.
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
J'ai étudié les types primitifs Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé d'utiliser Dapr en Java pour faciliter le développement de microservices
J'ai créé un client RESAS-API en Java
J'ai essayé la métaprogrammation avec Java
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
[Java] Je veux effectuer distinctement avec la clé dans l'objet
J'ai envoyé un e-mail en Java
Multithread pour s'adapter au modèle [Java]
J'ai créé un PDF avec Java.
J'ai essayé d'interagir avec Java
Enregistrer la sortie dans un fichier en Java
J'ai écrit le théorème de Gordobach en java
L'histoire que je voulais développer Zip
J'ai fait une annotation en Java.
J'ai essayé de résumer l'apprentissage Java (1)
Comment nommer des variables en Java
Essayez d'implémenter Yuma en Java
Liste des types ajoutés dans Java 9
J'ai essayé de résumer Java 8 maintenant
Comment concaténer des chaînes avec Java
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
(Limité à Java 7 ou version ultérieure) Je souhaite que vous compariez des objets dans Objects.equals
[Introduction à Java] J'ai essayé de résumer les connaissances que j'estime essentielles
Je voulais mettre en place un diaporama de manière à la mode avec slick.
J'ai appelé l'analyse de la syntaxe de l'API COTOHA 100 fois en Java pour mesurer les performances.
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
Je veux ForEach un tableau avec une expression Lambda en Java
[Java Spring MVC] Je souhaite utiliser DI dans ma propre classe
Quand j'ai voulu créer une méthode pour Premium Friday, c'était déjà dans l'API standard Java 8
J'ai essayé d'utiliser l'API Elasticsearch en Java
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Référence Java à comprendre dans la figure
Essayez d'implémenter l'ajout n-aire en Java
J'ai essayé de résumer les expressions Java lambda
J'ai essayé le nouveau yuan à Java