À retenir
- Le comportement (les méthodes) prime sur l'identité (la classe).
- Apporte une grande souplesse et réduit la quantité de code nécessaire.
- Principalement présent dans les langages à typage dynamique.
Le duck typing est une manière de programmer où l'on s'intéresse à ce qu'un objet sait faire plutôt qu'à sa nature réelle. L'idée est simple : si un animal marche comme un canard et cancane comme un canard, alors on le considère comme un canard, peu importe son espèce officielle. En informatique, cela signifie qu'une fonction acceptera n'importe quel objet du moment qu'il possède les méthodes (les actions) nécessaires.
Étymologie
Le terme vient de l'anglais duck test (le test du canard), une forme de raisonnement inductif. En programmation, ce concept s'est popularisé avec l'essor des langages dynamiques comme Python ou Ruby au début des années 2000, pour offrir une alternative plus souple au typage rigide des langages traditionnels.
Exemples d'usage
- En Python, vous pouvez passer n'importe quel objet à une fonction de lecture, tant que cet objet possède une méthode
read(), qu'il s'agisse d'un fichier réel, d'une chaîne de caractères ou d'une réponse réseau. - En JavaScript, manipuler un objet qui possède une propriété
lengthcomme s'il s'agissait d'un tableau, même si c'est un objet personnalisé.
Cas d'usage
On utilise le duck typing pour créer du code flexible et générique. Il intervient souvent dans le développement d'interfaces de programmation (API) ou de bibliothèques logicielles où l'on veut permettre aux utilisateurs de passer leurs propres types d'objets sans les forcer à hériter d'une classe spécifique.
Bonnes pratiques
Puisque le programme ne vérifie pas le type à l'avance, il est conseillé de bien documenter les méthodes attendues par vos fonctions. Il est aussi prudent d'utiliser des blocs de capture d'erreurs (try...except) pour gérer les cas où un objet ne possèderait finalement pas la fonctionnalité attendue au moment de l'exécution.
Synonymes
Antonymes
Conseil
Si vous débutez, voyez le duck typing comme une invitation à la liberté : ne vous demandez pas 'Qu'est-ce que cet objet ?' mais 'Que peut-il faire pour moi ?'. C'est le secret pour écrire du code vraiment réutilisable.
Questions fréquentes
Est-ce que le duck typing rend le code moins sûr ?
Il peut augmenter le risque d'erreurs à l'exécution (runtime) car les oublis ne sont pas détectés à la compilation.
Quelle est la différence avec le polymorphisme classique ?
Dans le polymorphisme classique, les objets doivent souvent appartenir à la même famille (héritage). Avec le duck typing, aucune parenté n'est requise.
Peut-on faire du duck typing en Java ou C# ?
Nativement non, car ils utilisent le typage nominal (basé sur le nom des classes), bien que des mécanismes comme 'dynamic' en C# s'en rapprochent.