【かたへんかん】

型変換(キャスト) とは?

💡 データの「着ぐるみ」を着替えさせる操作
📌 このページのポイント
型変換(Type Casting)― データ型を変える 暗黙的変換(自動) int 42 float 42.0 小さい型 → 大きい型(安全) 明示的変換(手動) float 3.14 int 3 大きい型 → 小さい型(情報欠落の可能性) 文字列との変換例 "123" 123 文字列 → 数値 true "true" 真偽値 → 文字列
型変換のイメージ
ひよこ ひよこ

型変換ってどんなときに必要なの?

ペンギン先生 ペンギン先生

たとえばHTMLのフォームから受け取った値は全部「文字列」なんだ。「3」という入力を計算に使いたいときは数値に変換しないといけない。「'3' + '5'」だと文字列結合で「'35'」になっちゃうけど、型変換して「3 + 5」にすれば「8」になる。こういう場面で必要になるよ。

ひよこ ひよこ

暗黙的変換って何?

ペンギン先生 ペンギン先生

プログラマーが明示的に書かなくても言語が勝手に型を変換することだよ。JavaScriptは特にこれが激しくて、「'5' - 3」が2になったり(文字列が数値に暗黙変換)、「'5' + 3」が'53'になったり(数値が文字列に暗黙変換)する。同じ演算子なのに動作が違うから混乱するんだ。

ひよこ ひよこ

型変換で気をつけることってある?

ペンギン先生 ペンギン先生

まず暗黙的変換に頼らず、常に明示的に変換する癖をつけること。Number()やString()を使って意図を明確にしよう。あとparseInt('10px')が10を返すように、変換できる部分だけ変換する関数もあるから挙動をよく確認すること。TypeScriptのような型付き言語を使えば、型の不一致をコンパイル時に検出できるから、そもそもの事故を減らせるよ。

ひよこ ひよこ

TypeScriptの型アサーション(as)も型変換なの?

ペンギン先生 ペンギン先生

実は違うんだ。TypeScriptの「value as string」は型アサーション(型の主張)で、実行時にはデータを変換しない。コンパイラに「これは文字列だと信じて」と伝えるだけ。実際のデータが数値のままでもエラーにならないから、嘘のアサーションをするとランタイムエラーの原因になる。実行時の型変換はNumber()やString()を使う必要があるよ。

ひよこ ひよこ

型変換に関するバグで有名なものってある?

ペンギン先生 ペンギン先生

JavaScriptの「==」による暗黙的型変換は有名なバグの温床だよ。「[] == false」がtrueになったり、「'' == 0」がtrueになったりする。だから===(厳密等価演算子)を使うのが常識。他にもC言語の暗黙的な整数拡張で、unsigned intとintの比較でバグが起きるケースは有名で、「-1 > 1u」がtrueになる(-1がunsignedに変換されて巨大な数になる)。型変換は「何が起きているか」を常に意識することが大事だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「型変換」って出てきたら「データの型を別の型に変えることで、明示的と暗黙的の2種類があるんだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「type casting / type conversion」 = 型の変換・型の鋳造
💬 castは「鋳型に流し込む」という意味。別の型の鋳型にデータを流し込んで形を変えるイメージだよ
← 用語集にもどる