Pour le typage structurel, on peut tout à fait faire cela statiquement et sans écrire d'annotation.
C'est ce que fait go. Typescript a un typage structurel vérifié à la compilation, mais il est optionnel.
Enfin, pour ce qui est des objets et du typage structurel, la façon dont ils sont globalement utilisés en pratique cela en fait surtout des modules du pauvre. En OCaml on utilisera plutôt des modules, en Haskell des type classes, en Rust des traits et en C++ des template.
L'intérêt c'est de pouvoir avoir un polymorphisme qui ne soit pas nommé. Quand on veut créer une méthode qui va manipuler des données qui ont un id qui est un UUID par exemple. Le typage structurel peut permettre d'avoir des données qui ne sont pas liées entre elles, mais qui possèdent toutes un id de la bonne forme.
Je ne connais pas les autres, mais je ne suis pas certains que C++ permettent d'être aussi souple que go. En go (et c'est pour moi le gros intérêt), ta structure n'a pas a connaître la structure nécessaire à ta méthode pour être utilisable.
Le type Plouf n'a aucun rapport avec l'interface User. Ça permet d'écrire après coup des fonctions qui définissent des interfaces décrivant le contrat que doivent remplir leur arguments sans impact sur les types créé ailleurs. Dans l'usage on peut généraliser une fonction à un ensemble de type qui sont dans différentes bibliothèques. Je sais pas si c'est très clair...
[^] # Re: Performance
Posté par barmic . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 3.
C'est ce que fait go. Typescript a un typage structurel vérifié à la compilation, mais il est optionnel.
L'intérêt c'est de pouvoir avoir un polymorphisme qui ne soit pas nommé. Quand on veut créer une méthode qui va manipuler des données qui ont un
idqui est un UUID par exemple. Le typage structurel peut permettre d'avoir des données qui ne sont pas liées entre elles, mais qui possèdent toutes unidde la bonne forme.Je ne connais pas les autres, mais je ne suis pas certains que C++ permettent d'être aussi souple que go. En go (et c'est pour moi le gros intérêt), ta structure n'a pas a connaître la structure nécessaire à ta méthode pour être utilisable.
Le type
Ploufn'a aucun rapport avec l'interfaceUser. Ça permet d'écrire après coup des fonctions qui définissent des interfaces décrivant le contrat que doivent remplir leur arguments sans impact sur les types créé ailleurs. Dans l'usage on peut généraliser une fonction à un ensemble de type qui sont dans différentes bibliothèques. Je sais pas si c'est très clair...En java je fais un hack a coup de lambda pour ça.