• [^] # Re: We need more

    Posté par . En réponse au journal opensara: un nouveau jeu libre. Évalué à 2. Dernière modification le 15 octobre 2021 à 16:22.

    Les types somme sont représentables en Kotlin via les sealed classes :

    // Dans le même fichier
    sealed class Player()
    class Warrior(var strength: Int): Player()
    class Wizard(var mana: Int): Player()
    // Pattern matching exhaustif
    when (player) {
     is Warrior -> player.strength
     is Wizard -> player.mana
    }

    Après, j'en conviens, c'est peut-être un chouïa moins élégant qu'en TypeScript :

    type Warrior = { strength: number };
    type Wizard = { mana: number };
    type Player = Warrior | Wizard;

    De façon plus générale, et bien qu'étant plus habitué au typage nominal, je trouve incroyablement expressif le typage structurel de TypeScript (je pense entre autres à toi, keyof) ; on a pu faire des choses vraiment sympas avec. Du genre :

    type MyProtocol = {
     someMessage: {
     payload: string,
     response: boolean,
     }
    }
    const receiver: Receiver<MyProtocol> = {
     onSomeMessage: (payload) => {
     console.log(payload);
     return true;
     }
    }

    Cela peut paraître tout bête, mais je trouve chouette de pouvoir exprimer le fait qu'une structure prenant en charge MyProtocol doive implémenter des handlers de la forme onLeNomDuMessage. Avec bien sûr la vérification des types d'entrée et de sortie.