型変換
ある型の値を別の型に変えること。プログラマが頼んだ場合もあれば、言語が裏で勝手にやる場合もある。
肝心なのは明示的か暗黙的かの違いだ。明示的な変換はキャストと呼ばれ、int(3.7)、(double)x、Integer.parseInt(s) のように書く。情報が失われても責任はプログラマが負う。暗黙的な変換は型強制(coercion)と呼ばれ、型が食い違った場面で言語が「たぶんこういう意味だろう」と推測して自動的に行う。
この推測は昔からバグの温床だ。JavaScript では "5" + 3 が "53" になるのに、"5" - 3 は 2 になる。+ は文字列を優先し、- にはその選択肢がないからだ。幅の違う整数への変換では上位ビットが黙って捨てられ、浮動小数点から整数への変換は四捨五入ではなく切り捨てになり、大きな整数は double で精度を落とす。厳格な型付けの言語は、こういう場面ではコンパイルを拒否する道を選ぶ。