3秒でわかる
値が数値なのか文字列なのかを示す分類。同じ記号でも型によって足し算と連結に分かれるため、バグの原因を追うときの最初の確認点になります。
30秒図解
もう少し詳しく
どういうものか
型は、プログラムが扱う値の種類を表す分類です。整数、小数、文字列、真偽値、配列、オブジェクトといった区分がそれにあたります。値そのものに種類の札が付いていると考えると分かりやすく、その札を見て言語は「この値に何をしてよいか」を決めます。
10 と "10" は画面上は同じに見えますが、前者は数値で計算に使え、後者は文字列で連結や検索に使えます。同じ演算子でも、渡された値の型が違えば結果が変わります。
なぜ必要か
型が無ければ、言語は "りんご" - 3 のような無意味な計算を止められません。型があることで、実行前 (あるいは実行時) に「その操作はできない」と教えてもらえます。
もう1つは読み手にとっての意味です。関数の引数が int だと分かれば、呼び出す側は数を渡せばよいと即座に判断できます。型注釈は、その関数を将来使う人への短い説明書として働きます。
具体例
age = 28 # int
height = 172.5 # float
name = "田中" # str
is_member = True # bool
scores = [80, 95, 60] # list
print(type(age)) # <class 'int'>
print(age + 2) # 30
print(name + "さん") # 田中さん
# 型が合わないと実行時に止まる
# print(name + age) # TypeError
# 型注釈を付けると、意図が読み手にも道具にも伝わる
def total(prices: list[int]) -> int:
return sum(prices)つまずきやすいところ
入力から受け取った値は、見た目が数字でも文字列です。input() や HTML のフォーム、JSON の値をそのまま計算に使うと、意図しない連結やエラーになります。数として扱うなら int() や Number() で明示的に変換する必要があります。
JavaScript の暗黙変換も事故のもとです。"5" + 3 は "53" になり、"5" - 3 は 2 になります。加算だけ文字列連結が優先されるため、片方だけ変換し忘れると数字の並んだ文字列が静かに育ちます。
似た用語との違い
| 分類 | 型を決めるタイミング | 代表例 |
|---|---|---|
| 静的型付け | コンパイル時 | Java, TypeScript, Go |
| 動的型付け | 実行時 | Python, JavaScript, Ruby |
| 強い型付け | 暗黙変換をほぼしない | Python |
| 弱い型付け | 暗黙変換を積極的にする | JavaScript |
静的か動的かは「いつ検査するか」、強いか弱いかは「どこまで勝手に変換するか」の話で、別の軸です。Python は動的だが強い型付け、という組み合わせになります。