前回は、Pythonを使って「型」について説明しました。
文字列、整数、小数、真偽値など、値には種類があります。
今回は、その型をプログラミング言語がどのタイミングで判断するのかを見ていきます。
ここで出てくるのが、静的型付けと動的型付けです。
何だか難しく感じるかもしれませんが、考え方はシンプルです。
- 静的型付け:実行する前に型を確認する
- 動的型付け:実行しながら型を判断する
今回は、JavaScript、Python、Java、TypeScriptを比較しながら説明します。
静的型付け
静的型付けは、プログラムを実行する前に型を確認する考え方です。
変数にどの種類の値を入れるのかを、あらかじめ決めておく言語が多いです。
例えば、Javaでは次のように書きます。
String name = "sample";
int age = 20;
Stringは文字列を表します。
intは整数を表します。
nameには文字列を入れる。
ageには整数を入れる。
このように、変数ごとに入れる値の種類をはっきりさせます。
静的型付けのエラー
静的型付けでは、決めた型と違う値を入れようとするとエラーになります。
int age = "20";
このコードは、Javaではエラーになります。
ageはintなので、整数を入れる必要があります。
"20"は文字として扱われます。
見た目は数字に見えても、クォーテーションで囲まれているため文字列です。
型が合わないので、実行前の段階で問題に気づきやすくなります。
動的型付け
動的型付けは、プログラムを実行しながら型を判断する考え方です。
変数を作るときに、型を細かく書かない言語が多いです。
Pythonでは、次のように書きます。
name = "sample"
age = 20
nameには文字列が入っています。
ageには整数が入っています。
JavaのようにStringやintを書いていません。
Python側が、値を見て型を判断します。
Pythonの型確認
Pythonでは、typeを使うと型を確認できます。
name = "sample"
age = 20
print(type(name))
print(type(age))
実行すると、nameはstr、ageはintとして確認できます。
<class 'str'>
<class 'int'>
コードを書くときに型を書かなくても、Pythonの中では型が存在しています。
ここを混同しないことが大切です。
- 型はある
- 書かないだけで存在する
- 確認方法
- Pythonではtypeを使う
- 注意点
- 実行してから気づくエラーもある
JavaScriptの場合
JavaScriptも、動的型付けの言語です。
変数を作るときに、文字列用、整数用のように型を書きません。
let value = "hello";
value = 100;
最初にvalueへ"hello"を入れています。
そのあと、valueへ100を入れています。
JavaScriptでは、このような書き方ができます。
便利に見える反面、意図しない値が入っても気づきにくいことがあります。
JavaScriptの注意点
JavaScriptでは、型の違いによって結果が分かりにくくなることがあります。
const result = "10" + 5;
この場合、"10"は文字列です。
5は数値です。
+を使っていますが、計算ではなく文字列の連結として扱われます。
結果は"105"になります。
このように、動的型付けの言語では、値の型を意識しておくことが大切です。
TypeScriptの場合
TypeScriptは、JavaScriptに型の考え方を加えたような言語です。
JavaScriptに近い書き方をしながら、型を指定できます。
let message: string = "hello";
let count: number = 10;
messageはstringです。
countはnumberです。
このように書くことで、変数に入れる値の種類を分かりやすくできます。
違う型の値を入れようとすると、事前にエラーとして気づきやすくなります。
let count: number = 10;
count = "hello";
countはnumberとして決めています。
そこへ"hello"という文字列を入れようとしているため、エラーになります。
大きなコードを書くときは、こうした型の確認が助けになることがあります。
言語ごとの比較
ここまで見てきた内容を、簡単に比較します。
| 言語 | 型付け | 特徴 |
|---|---|---|
| Python | 動的型付け | 型を書かずに変数を作れる |
| JavaScript | 動的型付け | 実行しながら型が判断される |
| Java | 静的型付け | 変数ごとに型を決めて書く |
| TypeScript | 静的型付けに近い使い方 | JavaScriptに型の仕組みを加えられる |
静的型付けと動的型付けは、どちらが上という話ではありません。
書きやすさ、エラーの見つけやすさ、開発するものの規模によって向き不向きがあります。
静的型付けの良さ
静的型付けの良さは、早い段階で型の間違いに気づきやすいところです。
大きなプログラムになると、変数の数も増えます。
どこに何の値が入るのか分かりにくくなることがあります。
型が決まっていると、コードを読むときの手がかりになります。
- 入る値の種類が分かりやすい
- 型の間違いに気づきやすい
- 大きなコードで管理しやすい
動的型付けの良さ
動的型付けの良さは、書き始めやすいところです。
変数を作るたびに型を細かく書かなくても、コードを書き進められます。
PythonやJavaScriptを最初に学びやすいと感じる人が多い理由のひとつだと思います。
- 書く量が少ない
- 小さなコードを試しやすい
- 学習の入口にしやすい
最初に覚えること
静的型付けと動的型付けについて覚えることは多くありません。
- 静的型付けは、実行前に型を確認する
- 動的型付けは、実行しながら型を判断する
- PythonとJavaScriptは動的型付け
- Javaは静的型付け
- TypeScriptはJavaScriptに型の仕組みを加えられる
- 動的型付けでも型は存在する
この考え方が分かると、プログラミング言語ごとの違いが少し見えやすくなります。
参考書を読むときも、「この言語は型を先に書くのか」「あとから判断されるのか」と考えられるようになります。
型は難しく見えますが、変数に入る値の種類を意識するところから始めれば大丈夫です。