型付けとは、
本記事では1.について解説する。
大半の高級プログラミング言語では、文字と数を別の型と位置づけており(数はさらに整数型と小数型に分かれる)、さらに変数(オブジェクト)ごとにも型(クラス)が設定されている。
これは偶然ではなく型理論という数学的理論に裏付けられているらしいがここでは深入りしない。
型付けの分類で最もよく用いられるのが静的型付けと動的型付けによる分類である。プログラム実行開始前にすべての変数の型が予め決まっている静的型付け言語であり、決まっていないのが動的型付け言語である。静的型付けはコンパイル言語に多く、動的型付けはスクリプト言語に多いが、傾向に過ぎず絶対的なものではない。また、必要に応じて型を規定したり、しなかったりできる言語もある。
最近では、動的型付け言語の代表格であるPython, Ruby
でも静的型付けの導入が検討されたり、JavaScriptに静的型付け等を導入したTypeScriptが開発されるなど、静的型付けのメリットを認める流れが優勢なようである。[1]
ここでは例として x, y を引数に取り x * y を返す f(x, y) を題材に、静的型付けと動的型付けを比較しながら、それぞれの長所と短所について述べる(整数と小数と文字は別の型であるとする)。
静的型付け | 動的型付け | |
---|---|---|
定義 | 静的型付けプログラミング言語では、実行前(多くはコンパイル時)にはすべての変数の型が決まっている。 | 動的型付けとはプログラム実行中にその変数が呼び出されるときまで、変数の型が変わりうるプログラミング言語に対する表現である。 |
特徴 | 型を定義する手間があるが、IDE(統合開発環境)が型を知ることができるので、型チェックや入力補完などのIDEによる支援を受けやすい。 | 型の制約が少ないので書き始めは書きやすいが、変数の型を自力で管理する負担がプログラムのサイズにあわせて増大する。従って小さな処理を簡便に記述するのに向いているとされる。 |
型安全 | IDEが事前に型をチェックしてくれるので、f(x,y) = x * yのx,yに数字の1や0.5以外に文字の「三」などが入ってしまう可能性は、ほぼ排除されている。 このように、静的型付けプログラミング言語には、型を指定する煩雑さと引き替えにプログラマーの人為的ミスを防ごうという考え方が根底にある(型安全という)。 |
f(x,y)のx,yに数字の1や0.5以外に文字の「三」などが入ってしまう可能性があり、プログラムの作成者と使用者が異なる場合、作成者の手を離れて使用者の手に渡ってしまってから初めて問題が判明することになる危険性が大きい。 |
引数 | 型による縛りによりできないことがあったり、できたとしてもプログラムの記述量が増えてしまったりする。たとえばf(x,y) = x * yの例では、引数の型が異なれば、異なる関数(もしくはメソッド)ということになるので、x,yが整数か小数かで少なくとも2×2=4通りのf(x,y)を別々に定義しなければならない。 | x,yが整数か小数か事前に知ることはできないのでx,yの型で場合分けする必要が無く、f(x,y) = x * yと定義するだけで済む。 |
戻り値の型 | f(x,y)の戻り値の型も実行前に定義されている必要があるので、(x,yが小数の時に)x * yが整数になる時だけf(x,y)が整数型となり、それ以外の場合はf(x,y)が小数型となるような定義は、不可能か、可能であったとしてもかなり複雑 な処理を伴うことが多い。 | 戻り値の型に制約がないので、整数でも小数でも返すことができる。しかし、どちらが返ってくるかわからないということでもあり、ミスなどにより、文字など予想の斜め上のものが返ってくる可能性も否定できない。 |
戻り値 | f(x,y)の結果として x * y(整数), x / y(小数)という異なる型をもつ2つの値を同時に戻したい場合には、手軽に配列で返すことはできず、「型の組み合わせを表す型」をその都度別途定義しなければならない言語が多い。 | f(x,y)の結果として x * y(整数), x / y(小数)という異なる型をもつ2つの値を同時に戻したい場合でも、2つの値の配列(配列の要素の型もまた不定なので、ばらばらの型を要素にする配列が可能な言語が多い)を返せば済む。 |
静的型付けと動的型付け以外の分類としては強い型付けと弱い型付けという分類がある。静的型付けについて言われることが多く、強い静的型付け、弱い静的型付けのようにして使う。
この分類方法についてはあまり詳しく述べられないことが多い。定義が多数あって厳密な議論に向かないという事情があるようだ。
型の宣言が必要かどうかで、明示的な型付けと暗示的な型付けに分類するのだが、型推論の有無という形で論じられることが多く、用語としての出番はさらに少なめである。
掲示板
提供: 蛇の目
提供: 試製ガーリバス
提供: アルメリア
提供: じっちゃん♫•*¨*•.¸¸♪
提供: しつね
急上昇ワード改
最終更新:2025/03/21(金) 15:00
最終更新:2025/03/21(金) 14:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。