Duck typing

Définition, exemples et bonnes pratiques

À 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é length comme 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

typage comportemental typage structurel (approchant)

Antonymes

typage nominal typage statique

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.