本文へスキップ

ダックタイピングとは?

だっくたいぴんぐ

ダックタイピングとは、オブジェクトの型ではなく「持っているメソッドや属性」で動作を判断するプログラミングスタイルのことです。

ダックタイピン(Duck Typing)とは、「アヒルのように歩き、アヒルのように鳴くなら、それはアヒルだ(If it walks like a duck and quacks like a duck, it's a duck)」という格言に由来するプログラミングの考え方です。オブジェクトクラスや継承関係を問わず、必要なメソッドや属性を持っていれば同じように扱えるという思想です。

静的型付け言語では、型の互換性はクラス階層(継承や実装)によって決まります。一方、ダックタイピングを採用する動的型付け言語では、オブジェクトが「その場で必要とされるインターフェース」を持っているかどうかだけが問われます。Pythonでイテレータを扱う際、__iter____next__メソッドさえ実装されていれば、どんなクラスのオブジェクトでもforループで使えるのが典型例です。

ダックタイピングの主なメリットは、

  • コードの柔軟性と再利用性が高まる
  • クラス階層の設計に縛られず疎結合なコードが書ける
  • プロトタイピングや小規模なスクリプトで素早く実装できる
一方のデメリットとして、
  • 実行時まで型エラーが発覚しない
  • IDEの補完や静的解析が効きにくい
  • 大規模開発では意図せぬ誤用が起きやすい

RubyやPython、PHPなどの動的型付け言語で広く採用されています。TypeScriptの構造的部分型も静的型付けにおけるダックタイピングの概念に近い設計です。

使い方・例文

Pythonで、len()を呼べる(__len__を持つ)オブジェクトはリストでも文字列でも辞書でも同じように扱えます。クラスが何であるかより「何ができるか」で動作が決まるのがダックタイピングの特徴です。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語