動的型付けとは? わかりやすく解説

動的型付け

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/11 03:39 UTC 版)

ナビゲーションに移動 検索に移動

動的型付け(どうてきかたづけ、: Dynamic typing)とは、オブジェクト型安全性を、実行時に検証するというコンピュータプログラミング型システムの方法である。型の検査は実行時のプロセス上で行われて、ランタイムシステムの実行時型情報(RTTI)が照会されるなどして解析される。

動的な型チェックは、代入、束縛、関数適用、ダウンキャスト、ディスパッチ、バインディングといった所で行われる。なお、コンパイル時やインタプリタ開始時の最適化によってすでに型安全性が保証されている所は省略される。動的型付けの言語では、引数や返り値や変数宣言への型注釈が省略されやすくなる。

対義語は静的型付けであり、こちらでは値やオブジェクトの型安全性コンパイル時に検証する。型の検査はソースコードの解析によって行われる。

概要

動的型付けのルーツはLISPにさかのぼる。LISPは、同時期のFORTRANCOBOLとは一線を画した、計算モデルラムダ計算)を裏付けに持つ言語であった。しかし型付きラムダ計算ではなく実行前に型チェックが行われることもなく、型エラーはその式が評価(実行)されるまでわからないという欠点、すなわち動的型付け言語特有の欠点を持つ初期の言語である。その後、LOGOを経て、動的な型という概念を明確にしたのがSmalltalkである(関数型言語から、もう一方の側である静的型付き言語には、MLHaskellへという発展があった)。

オブジェクト指向に基づくSmalltalkでは、全ての処理対象は何らかのクラスに属すため、型という概念そのものは存在する。しかしSmalltalkでは、

  1. 全てのクラスはルートクラスである Object に由来するので、最低限 Object としての振る舞いが保証される
  2. たとえ同一の機能名を持っていても、実際に起こる結果はクラスによって異なるかもしれない
  3. クラス(型)自体も一種のオブジェクトであり、必要なら型に関するメタプログラミングが行える

などの特徴を持ち、型よりもむしろ「特定の名称のメソッドを受け付けるべき」「メソッドはその名前に見合った動作を行うべき」というプロトコル的な立場による疎結合の信頼性を重視している。このプロトコル的な信頼性こそが動的型付けの要である。これを積極的に行うのがダック・タイピングである。

両者の違いは、静的は予防的な立場であり、動的は自浄的な立場といえるだろう。

通常、静的型付けはオペレーティングシステムやシステムプログラムのような大規模で厳密性が要求される領域に適合するといわれている。反面最初の型定義を誤ると一部分の影響が全体に波及すること、また柔軟性に乏しくわずかな変換に手間のかかる経路を用意したり同じような機能を型別に実装しなければならないことなど、いわばお役所仕事的な煩雑さを伴うという弱点を持つ。なお近年[いつ?]の研究により、静的型付き言語も文脈から型を推論する型推論能力を持つなど、簡略化の方向へ向かってはいる。

一方、動的型付き言語ではそもそも対象に特定の構造を期待しないため、変更への対応は柔軟である。特に配列、辞書、集合といったコレクションの利便性が顕著で、そのため近年[いつ?]いわゆるスクリプト言語動的プログラミング言語は多くが動的型付けを採用している。動的型付けの難点である最適化の弱さは、コンピューターの能力が増すことで相対的に小さな問題になっており、スクリプト言語を中心に今後も動的型付けは発展するものと思われる。

静的型付けとの比較

静的型付けは、

  • 機能(関数)が形式に合った正しい型のデータのみを処理することを事前の検査により保証する
  • この保証があるため、高度な最適化が可能である

と主張される。この方向性に基づき、全ての機能と変数において処理する対象の型をプログラムの定義時点で決定し、型が異なるデータを受け付けない(あるいは上位互換の型に限定する)。MLなどでは型に従わない式は許されない。Javaなどでは明示的にキャストする必要があり、キャストは実行時に検査される。Cなどではキャストを正しく使うのはプログラマの責任であり、通常のコンパイラは特にチェックなどを入れず書かれた通りのコードを吐く。

これに対し、動的型付けでは、定義では型の限定を行わず、実行時に合致するデータが渡されると期待する、または合致するデータであるかを判定する。期待する型とは異なるデータが渡された場合、単にエラーとするものもあれば、型変換ないし強制(coerce、数値を文字列にしたりするような変換)したり、場合によっては委譲といったプロトコルに従うものもある。

例えば、Perl, Pythonで共に実行可能(文法エラーとはならない)な下記のコードにおいて、Perlでは20と表示される一方、Pythonでは実行時にTypeError例外が発生する。なおこの2種類を「強い動的型付け」「弱い動的型付け」と区別するのは間違いである(どちらも、プログラムが異常なまま走り続けることは無いので、強い型付けである)。

print('10'+10);

プログラムの最適化手法のうち、静的型付けでは容易だが動的型付けでは難しいものがあり、動的型付けが不利とされる理由のひとつになっている。

関連項目


動的型付け

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/12 02:49 UTC 版)

Prolog」の記事における「動的型付け」の解説

型付けは動的型付けに分類できるが、言語仕様中に概念登場しない上記単一化バックトラッキング、と論理変数束縛においては独特のものがあり、その実行は型推論実行過程酷似している。既に Prolog はその引数引渡し時に単一化という厳密なパターンマッチングを施すことに多大なコスト掛けた単一化だけでプログラムコントロールできる言語Prolog であるといって過言ではない。この単一化のみによる簡素強力なプログラムコントロールの足を引っ張ることに成り兼ねない型付け強化は、Prolog 言語とその支持者によって受け入れられることはないだろう

※この「動的型付け」の解説は、「Prolog」の解説の一部です。
「動的型付け」を含む「Prolog」の記事については、「Prolog」の概要を参照ください。

ウィキペディア小見出し辞書の「動的型付け」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

','','','','','','','','','','','','','','','','','',''];function getDictCodeItems(a){return dictCodeList[a]};

すべての辞書の索引

「動的型付け」の関連用語











動的型付けのお隣キーワード
検索ランキング
';function getSideRankTable(){return sideRankTable};

   

英語⇒日本語
日本語⇒英語
   



動的型付けのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの動的型付け (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのProlog (改訂履歴)、VBScript (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS