プログラミングを学ぶと動的型付けや型推論という言葉が出てくる。何やら難しそうな専門用語に思えるが、これらは何が違うのでしょうか。動的と言うからには静的もありますが、何が動いたり静かなのでしょうか。また、推論というからにはAIでも使うのでしょうか。そんな一見難しそうな動的型付けや静的型付け、型推論について、そもそも変数や型とは何かから多くのプログラミング言語の経験をもつプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。数多くのプログラミング言語を経験。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさん。

タイミングが違う?動的型付けと型推論とは

image by iStockphoto

例えばコンピュータゲームのキャラクターには名前やHPといったパラメーターがありますよね。プログラムでデータをしまっておくための仕組みが変数です。多くの場合、名前は英語や日本語の文字の並びで、HPは数値ですよね。このように変数にも扱うデータの種類があります。それが変数の型です。

動的型付けと型推論の違いをざっくり説明すると、この型がいつ決まるかになります。この違いを説明するためには、まずは変数とは何か型とは何かが重要。動的や静的は何が違うのか、推論はどうするのかを説明します。

動的型付け:決まるのは実行時

まず動的型付けの説明から。変数には種類=型があります。その型を決めることが「型付け」です。その型付け=型が決まるタイミングが動的か静的かの違いで「動的型付け」と「静的型付け」に分かれます。

ではそもそも動的や静的とはなんでしょう。ざっくり言えば事前に決まっているものが「静的(スタティック)」で、動かす時に決まるのが「動的(ダイナミック)」です。例えるならば、外出する際に、どこへどうやって行くかを事前に計画を立てておくのが静的、その時の気分でぶらぶらと回るのが動的と考えてください。

型推論:決まるのはプログラムを書いた時

では静的型付け=型推論なのでしょうか。そういう説明もありますが、実はちょっと違います。旅行でいえばあらかじめ計画を立てるのが静的。例えば、バスツアーでどこかの店や施設に立ち寄る際、いちいちそこで何をしてくださいとは書いていませんよね。土産物屋に行けば土産を買うでしょうし、次の目的地まで時間がかかるようならトイレを済ませます。

プログラミングでも、静的型付けの場合は変数の型を事前に決めておきます。ただ、その変数にしまうデータの種類があらかじめわかる場合、いちいち書いているとめんどうです。ですから、わかりきっている場合には種類を書いておかなくても、コンピューターがおそらくこの型だろうということを決めてくれるのが「型推論」になります。

型って何?変数と型について

image by iStockphoto

データをしまう場所が変数、その種類が型です。しかし、わざわざ種類を気にする必要があるのでしょうか。実は型という考え方がないものもあります。その典型的なものが機械語。コンピューターが理解できるのは機械語だけ。ただ人間にはわかりにくいので、わかりやすい形でプログラムを表すのがプログラミング言語です。そのため、多くのプログラミング言語に型があります。つまり、型はとても重要なものということです。

まずは、変数とそこにしまうデータの種類である型の説明から始めます。

\次のページで「変数は途中経過を書き出すメモ」を解説!/

変数は途中経過を書き出すメモ

例えば何かのテストの3人の平均点を出すことを考えます。まずは3人のテストの点数を合計してから、それを3で割ったものが平均点です。それを電卓で計算する場合、3人の合計点をメモに一旦書き出しませんか。メモリー機能のある電卓ならメモリーを使うこともあります。あるいは頭の中で覚えておくかもしれません。どの方法にしても、一旦3人の合計点をどこかにとっておく必要がありますよね。

コンピューターでも計算の途中結果などをどこかにとっておくことがあります。このとっておくための場所が変数です。変数と言うと数学の方程式のxやyを思い浮かべてしまうかも。でも、実際には付箋やメモに似たものがプログラムの変数です。

変数には種類(型)がある

プログラムで一旦どこかにとっておくメモの内容は人の名前や、何かの数字、次に行く場所などなど様々。メモに「1.1」と書いてあっても、それだけではこれが何を意味するのかわかりません小数点付きの数「1.1」の可能性が高そうです。しかし実は日付の1月1日という可能性も。

書いた本人ならともかく、他人からは見ただけでは区別するのは不可能です。でも、あらかじめこのデータの種類が「数値」とわかっていれば、1.1という小数点付きの数値というのがすぐわかります。プログラムを書いているプログラマはこれは数だと思っていても、そのプログラムが動くコンピューターはそれがわかりません。そのため、これは数だよと教えるものが型なのです。

プログラミング言語によって変数の型は違う

コンピューターが途中経過を書き出すメモが変数で、その内容を表すものが型です。では、型にはどんなものがあるのでしょう。実は、これはプログラミング言語によって違います基本的なのは「123」や「3.1415」といった数値と、「あいうえお」や「ABC」といった文字列です。多くのプログラミング言語にはこれらの型があり、数値型や文字列型と呼ばれています。

しかし、中には日付を表す日付型や、YesかNoかを表す論理型といった型があるプログラミング言語も。また、これらの単純なデータを組み合わせてひとつの型として考える複合型などもあります。世の中にはコンピューターのプログラミング言語が250以上あるとも。それだけ数多いプログラミング言語が進化、競争しています。そのため、どんな型があるかやどう使うかもプログラミング言語の特徴のひとつなのです。

静か?動く?静的と動的ってなに?

image by iStockphoto

変数とは何か、型とは何かに続いて、プログラミングにおける「静的」と「動的」について説明します。静的型付けや動的型付け以外にも似ているのが静的解析と動的解析など。プログラミングに関連して「静的」と「動的」という考え方がよく出てきます

最初にざっくり説明したように静的とは事前、動的とはその場、実際に動かしてという意味合いで考えてください。この静的と動的という考え方や、型推論とは何かを説明していきます。

違いはタイミング?事前に決まるのが静的、動く時が動的

変数は一時的にとっておくメモのようなもの。その内容が何かを示すのが型です。その型がいつ決まるのかのタイミングはプログラミング言語で違います。プログラマの頭の中ではこれは数、これは日付と決まっていても、コンピューターには伝わりませんどうにかして伝える必要があるわけです。

一番簡単なのは、変数をつくるときにこの変数の型はこれと書いてしまうこと。例えば「int a;」などと書きます。この場合中身が数である変数aです。このように事前に書いておくのが静的型付けになります。一方、「a=0」と書けば変数aの中身は数字の0で、「a="abc"」と書けば文字のabcということが決まるのが動的型付け。プログラムを書いた時点でわかっているじゃないかと思うかもしれませんが、コンピューターにとっては動かす時までわからないのです。

\次のページで「手間を省きたい!静的型付けと型推論」を解説!/

手間を省きたい!静的型付けと型推論

静的型付けでは「int a;」と書けば型が数値であることが分かります。ただ変数を作った時点であらかじめ中身を入れておくことも多いです。それを初期値と言います。例えば「int a = 0;」などです。この時、0という数を入れるのは分かりますよね。だから、このような場合にはいちいち数値であると断る必要がありません。そのように型が書いてなくても、ルールに従って型を決める仕組みが型推論です。

推論というとすごいことをしているようですが、あらかじめルールで決めているだけ。これは一見すると動的型付け言語と同じことをしているように見えます。ただ、型推論も事前に型を決めていることは変わりません。あくまで静的型付けで分かりきったことを改めて書く手間を省く仕組みです。

静的型付けだけではない?動的型付けと型推論

静的型付けで分かりきった場合手間を省くのが型推論。では、動的型付けでは型推論は使わないのでしょうか。ここを誤解しないようにしてください。動的型付けの場合も型推論が使われることがあります。

動的型付けの場合も型がないわけではありません。動的型付けのプログラミング言語の代表としてPythonやJavaScriptがあります。これらについて型がないという説明を見かけますが、それは間違い。型を意識しないように隠しているだけであって、コンピューターの中では型を意識しています。そのため型がわかっていれば本来は不要な作業を含むことも。あらかじめ型がわかっていればそれを避けることも可能です。そのため、動的型付けの場合でも、実は型推論を使っていることもあります。

\次のページで「動的型付けと型推論は反対語ではない、違いを正しく理解しよう」を解説!/

動的型付けと型推論は反対語ではない、違いを正しく理解しよう

動的型付けと対になる言葉は静的型付けです。型推論は流れから変数の型を推測すること。静的、動的どちらでも使われることがあります。言ってみれば、変数を使うたびに型推論しているのが動的型付けなのです。

また動的型付けや型推論があればそもそも静的型付けは不要という考え方もあります。ただ、推論は推論であって、常に正しいとは限りません。コンピューターも間違えることがありますよね。それをバグと呼びます。また型推論はコンピューターにとっては必要だけど余計なこと。あらかじめ型がはっきりしていた方がコンピューターは集中できます。ですから、静的型付けと動的型付けの使い分けが必要なのです。

" /> 簡単でわかりやすい!動的型付けと型推論の違いとは?タイミング?どちらが便利?プログラマーがわかりやすく解説 – Study-Z
IT・プログラミング雑学

簡単でわかりやすい!動的型付けと型推論の違いとは?タイミング?どちらが便利?プログラマーがわかりやすく解説

プログラミングを学ぶと動的型付けや型推論という言葉が出てくる。何やら難しそうな専門用語に思えるが、これらは何が違うのでしょうか。動的と言うからには静的もありますが、何が動いたり静かなのでしょうか。また、推論というからにはAIでも使うのでしょうか。そんな一見難しそうな動的型付けや静的型付け、型推論について、そもそも変数や型とは何かから多くのプログラミング言語の経験をもつプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。数多くのプログラミング言語を経験。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさん。

タイミングが違う?動的型付けと型推論とは

image by iStockphoto

例えばコンピュータゲームのキャラクターには名前やHPといったパラメーターがありますよね。プログラムでデータをしまっておくための仕組みが変数です。多くの場合、名前は英語や日本語の文字の並びで、HPは数値ですよね。このように変数にも扱うデータの種類があります。それが変数の型です。

動的型付けと型推論の違いをざっくり説明すると、この型がいつ決まるかになります。この違いを説明するためには、まずは変数とは何か型とは何かが重要。動的や静的は何が違うのか、推論はどうするのかを説明します。

動的型付け:決まるのは実行時

まず動的型付けの説明から。変数には種類=型があります。その型を決めることが「型付け」です。その型付け=型が決まるタイミングが動的か静的かの違いで「動的型付け」と「静的型付け」に分かれます。

ではそもそも動的や静的とはなんでしょう。ざっくり言えば事前に決まっているものが「静的(スタティック)」で、動かす時に決まるのが「動的(ダイナミック)」です。例えるならば、外出する際に、どこへどうやって行くかを事前に計画を立てておくのが静的、その時の気分でぶらぶらと回るのが動的と考えてください。

型推論:決まるのはプログラムを書いた時

では静的型付け=型推論なのでしょうか。そういう説明もありますが、実はちょっと違います。旅行でいえばあらかじめ計画を立てるのが静的。例えば、バスツアーでどこかの店や施設に立ち寄る際、いちいちそこで何をしてくださいとは書いていませんよね。土産物屋に行けば土産を買うでしょうし、次の目的地まで時間がかかるようならトイレを済ませます。

プログラミングでも、静的型付けの場合は変数の型を事前に決めておきます。ただ、その変数にしまうデータの種類があらかじめわかる場合、いちいち書いているとめんどうです。ですから、わかりきっている場合には種類を書いておかなくても、コンピューターがおそらくこの型だろうということを決めてくれるのが「型推論」になります。

型って何?変数と型について

image by iStockphoto

データをしまう場所が変数、その種類が型です。しかし、わざわざ種類を気にする必要があるのでしょうか。実は型という考え方がないものもあります。その典型的なものが機械語。コンピューターが理解できるのは機械語だけ。ただ人間にはわかりにくいので、わかりやすい形でプログラムを表すのがプログラミング言語です。そのため、多くのプログラミング言語に型があります。つまり、型はとても重要なものということです。

まずは、変数とそこにしまうデータの種類である型の説明から始めます。

\次のページで「変数は途中経過を書き出すメモ」を解説!/

次のページを読む
1 2 3 4
Share: