キャスト(Cast)とは、プログラムの中で、あるデータ型の値を別のデータ型に変換することのことです。整数を小数として扱いたい場合や、文字列を数値として計算したい場合など、型の違いを埋めるために使われます。
現実世界に例えると、キャストは外国のお金を日本円に両替する作業のようなものです。値そのものの意味は保たれたまま、扱いやすい別の形に変換されます。
データ型とは何か
キャストを理解する前提はデータ型です。プログラミング言語では、整数(int)、小数(double)、文字列(string)のように、値の種類ごとに型が決められています。型が違うと、扱えるサイズや計算の仕方、メモリ上の保存の仕方も変わってきます。
型変換が必要になる場面
異なる型の値を一緒に扱いたい場面は頻繁に起こります。整数と小数を混ぜて計算したいときや、画面に入力された文字列を数値として計算に使いたいときなど、そのままでは型が合わず処理できないことがあります。このときに型を揃える手段がキャストです。
暗黙的な型変換
変換には二つの種類があります。まずは自動で行われるものです。整数と小数を一緒に計算するときなど、情報が失われにくい変換は、プログラマが指示しなくても言語側が自動的に行ってくれます。これを暗黙的な型変換と呼び、多くの場面でプログラマは意識せずに恩恵を受けています。
明示的な型変換(キャスト)
もう一つは、プログラマが自分で指示する変換です。「(int)3.14」のように、変換したい型をかっこで指定するなど、情報が失われる可能性のある変換は、明示的にキャストを書かないと実行できない言語が多くあります。この明示的な変換こそが、狭い意味での「キャスト」という言葉が指すものです。
| 種類 | 実行のされ方 | 例 |
|---|---|---|
| 暗黙的な変換 | 自動で行われる | int から double へ |
| 明示的な変換 | プログラマが指定する | double から int へ |
情報が失われる変換
キャストには注意点もあります。小数を整数にキャストすると小数点以下が切り捨てられ、大きな型を小さな型にキャストすると値の一部が収まりきらず、意図しない結果になることがあります。変換前後で値の意味が変わってしまう危険性を理解した上で使う必要があります。
オブジェクト指向言語での使われ方
数値だけでなく、オブジェクトの世界でもキャストは登場します。あるクラスの元になった親クラスや、実装しているインターフェースの型として扱いたいとき、その関係を利用してオブジェクトの型を変換します。関連のないクラス同士は変換できず、無理にキャストしようとするとエラーになります。
実行時と静的な型のチェック
言語によってチェックのタイミングが異なります。Javaのような静的型付け言語ではコンパイル時に型の整合性が確認され、実行時にも不正なキャストがあれば例外が発生します。一方でPythonのような動的型付け言語は、実行してみるまで型の不整合が分からないことも多く、扱い方の違いに注意が必要です。
安全に扱うための工夫
不用意なキャストは不具合の原因になりやすいため、対策も発達しています。変換前に型を確認する仕組みや、失敗しても例外を出さずに変換の可否だけを返す関数が、多くの言語で用意されています。値の意味を保ったまま安全に型を変換することが、キャストを扱う上での基本方針です。


コメント