本文へスキップ
BecomeCoder
ブログ一覧コース一覧

静的型付けと動的型付けの違い|型あり・型なし言語をやさしく解説

#型システム#静的型付け#動的型付け#初心者

結論:静的型付けは「書いた時点で型の間違いを機械が捕まえてくれる」仕組み(Java・C#・TypeScript・C++)、動的型付けは「実行してみて初めて型の食い違いがわかる」仕組み(Python・JavaScript・Ruby)です。安全性を先に払うか、手軽さを先に取るかというトレードオフで、優劣ではありません。 どちらの世界も、このサイトなら環境構築なしにブラウザで書き比べられます。

「型付け」とは何か

プログラムが扱う値には「これは数値」「これは文字列」といった**型(type)**があります。3 は整数、"3" は文字列で、見た目は似ていても中身は別物です。「型付け」とは、この型の食い違いをいつ・どうやってチェックするかという言語の設計方針のことです。

チェックのタイミングで大きく2つに分かれます。

「型あり言語/型なし言語」という言い方も、ほぼこの静的/動的の違いを指しています。

静的型付け:書いた時点で間違いを捕まえる

静的型付けの言語では、変数を作るときに型を宣言します。たとえば C# では「この箱には文字列を入れる」と先に決めます。詳しくは C#文法コースの「変数と代入」ブラウザでそのまま実行して確かめてください(無料・登録不要)。

TypeScript はもっと分かりやすく、JavaScript に「型注釈」を足した言語です。名前: 型 と書くだけで型付けが始まります。TypeScriptコースの「型注釈 ― 変数に型をつける」「関数の型 ― 引数と戻り値」 は、どちらもブラウザで TS→JS に変換してその場で動きます。関数に「文字列を渡すはずが数値を渡してしまった」ような間違いを、実行する前に赤線で教えてくれるのが静的型付けの持ち味です。

静的型付けの代表格:

メリット:型の間違いを早く発見できる/エディタの補完が賢くなる/大人数・大規模でも壊れにくい。 デメリット:型を書く手間がある/短いスクリプトだと少し大げさに感じる。

動的型付け:まず動かして、実行時に判明する

動的型付けの言語では、型を宣言せずにいきなり値を入れます。Python なら x = 3 と書けば整数、x = "hello" と書き直せば文字列に変わります。手早く書けるので、最初の一歩や試行錯誤が軽いのが魅力です。

まずは動かしてみるのがいちばんです。

メリット:型宣言がいらず短く書ける/小さなスクリプトやプロトタイプが速い/柔軟。 デメリット:型の食い違いが実行するまで隠れている/大規模になると「どこで何型が来るか」を追いにくい。

同じトレードオフ、逆から見ているだけ

静的と動的は「安全性 vs 手軽さ」をどちらから先に払うかの違いです。静的型付けは、書くときに少し型の手間を払っておいて、実行時のバグを減らします。動的型付けは、書くときは軽くして、その分チェックを実行時(ときにはユーザーが使う場面)まで先送りします。どちらが正しいという話ではなく、作るものやチームの規模で選ぶものです。

なお「静的/動的」はコンパイルするか・インタプリタで実行するかとは別の軸です。混同しやすいので、興味があれば コンパイラとインタプリタの違い もあわせてどうぞ。

つまずきやすいところ

動的型付けで多くの初心者が最初に踏むのが、文字列と数値をうっかり混ぜるミスです。たとえば Python で数値と文字列を + でつなごうとすると、実行して初めてエラーになります。文字列の連結そのものは Pythonコースの「文字列の基本」 で試せますが、型が合わないと何が起きるかは Pythonのエラー「TypeError ― 型が合わない操作をした」 を見ると腑に落ちます。

静的型付けの側では、同じ間違いが実行前にエラーとして出ます。TypeScript なら 「TS2322: Type is not assignable ― 違う型を代入した」 がその代表です。「実行時に判明するエラー」と「書いた瞬間に出るエラー」を並べて見ると、静的/動的の違いが体で分かります。エラーで詰まったら Pythonのエラー逆引きTypeScriptのエラー逆引き を辞書のように引いてください。

どちらから学べばいい?

「型を意識せずまず動かす楽しさを味わいたい」なら動的型付けの Python や JavaScript から。「最初から型の安全網に守られて学びたい」なら TypeScript や C# から。両方を少しずつ書き比べるのがいちばん理解が早いので、このサイトのように環境構築なしで並べて試せる場を使うのがおすすめです。

TypeScript と JavaScript は「同じ言語に型があるか・ないか」を比べる最短の教材です。具体的な違いは TypeScriptとJavaScriptの違い で、Python と JavaScript の性格の違いは PythonとJavaScriptの違い で解説しています。

次に読む・試す

← ブログ一覧に戻る