昨日は時間がなくて早々に連続記録が途絶えてしまいましたが、今日は書きました!
一昨日の記事で言及したメモリの話…ではなくデータ型についてもう少し掘り下げる話。
型変換
C#は静的言語のためデータ型の宣言が必要になりますが、例えば文字列を数値に変換したり、整数値を小数値に変換したい時があるかなと思います。
その時に使うのが型変換。
宣言していたデータ型とは異なる型にデータを収納することになります。
こちらには「暗黙の変換」と「明示的な変換(キャスト)」という2種類が主にあるみたいです。
暗黙の変換
例えばこちら。
int num = 2147483647; long bigNum = num;
こちらはint型の変数numを、long型へと変換しています。
格納できる値の範囲がint < longとlongの方が広いので、そのまま突っ込んでも問題ないよってことですね。
大は小を兼ねるのめちゃくちゃわかりやすい例です。
明示的な変換(キャスト)
では例えば整数値を小数値に変換する場合はどうなるか?
となると以下のようになります。
int num = 5; float numDecimal = (float)num;
変換したい値の前に括弧でデータ型を指定します。(キャスト演算子というらしいです)
また文字列を数値、あるいは数値を文字列に変換する場合は以下のようになります。
○文字列を数値➡︎Parseメソッドを使用
string text = "1"; int num = int.Parse(text);
○数値を文字列➡︎ToStringメソッドを使用
int num = 1; string text = num.ToString();
このようにできるようです。
ちなみに先ほど挙げた整数から小数への変換も、これらのメソッドを用いて
int num = 1; float numDecimal = float.Parse(num.ToString());
と、一度文字列に変換したnumをParseの引数に設定して行うというやり方もあるらしいです。
型推論
やっぱり静的言語の型宣言めんどくさいなあと思う今日この頃ですが、自動でデータ型が何か判断してくれるという機能があります。
それが型推論です。
例えば以下のようなコードになります。
//値が1だからintだ! var num = 1; //値が0.5fだからfloatだ! var numDecimal = 0.5f;
こんな感じ。
みてわかるように、intやfloatを明示せず共通してvarという型を使用しています。
varは"variable"のことで、つまりまんま「変数」ってことです。
JavaScriptの変数定義などでもこのvarが使われていました。(今はconstとletを使い分けるのが主流ですが)
そんなvarによる型推論ですが万能というわけではなく、例えば値の範囲によって使い分ける必要があるデータ型を厳密に判断できないのでメモリが無駄遣いになったり、時には推論できない場合もあるみたいです。
楽ではありますが、ちゃんと使い分けできるならそれぞれ適切なデータ型を指定する方がよさそうですね。
それでは今日はこの辺で。
本日の参考ページ
↓