Duck typing

Ne doit pas être confondu avec Méthode du canard en plastique.

Duck typing

En programmation informatique, le duck typing (prononcé en français [dœk taj.piŋ] Écouter, traduction : typage canard) est un style de typage dynamique de certains langages de programmation orientés objet, par exemple Python ou Ruby. En duck typing, la sémantique d'un objet, c'est-à-dire son type dans le contexte où il est utilisé, est déterminée par l'ensemble de ses méthodes et de ses attributs, et non, comme il l'est habituellement, par un type défini et nommé explicitement par le programmeur dans les systèmes à typage nominatif. C'est l'équivalent du typage structurel pour les langages à typage statique, comme OCaml[1].

Le nom du système est une référence au test du canard (attribué à James Whitcomb Riley) : « Si je vois un oiseau qui vole comme un canard, cancane comme un canard, et nage comme un canard, alors j'appelle cet oiseau un canard »[2].

Ainsi, un objet d'une classe A donnée peut être considéré pour certaines opérations comme un objet d'une autre classe B, totalement différente (il n'est justement pas nécessaire qu'il y ait héritage entre les deux classes), à condition que les méthodes et les attributs de B qui sont utilisés dans les opérations soient aussi présents dans A.

En typage canard, le programmeur se concentre sur les caractéristiques des objets qui sont réellement utilisées plutôt que sur le type de l'objet lui-même. Par exemple, dans un langage typé nominativement, il peut créer une fonction qui prend en paramètre un objet de type Canard et utiliser ses méthodes marcher et cancaner. Dans un langage canard-typé, la fonction équivalente accepterait en paramètre un objet de n'importe quel type et appellerait ses méthodes marcher et cancaner. S'il s'avère à l'exécution que l'objet ne possède pas les méthodes qui sont appelées, la fonction lève une erreur d'exécution.

Exemple

calcule = lambda a, b, c: (a+b)*c

a = calcule(1, 2, 3)
b = calcule('pommes ', 'et oranges, ', 3)

print(a)
print(b)

Dans cet exemple, des objets sans relation d'héritage peuvent être utilisés (nombres, listes et chaines de caractères). Tant qu'ils gèrent les méthodes « + » et « * », l'opération fonctionne. Traduit dans des langages comme Ruby ou Python, la sortie serait :

 9
 "pommes et oranges, pommes et oranges, pommes et oranges, "

Références

  1. . (en) (en) « Duck typing vs Structural Subtyping », sur https://lambda-the-ultimate.org.
  2. (en) Exploring Indiana Highways : Trip Trivia, Exploring America's Highway, , 317 p. (ISBN 978-0-9744358-3-1, lire en ligne).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.