型変換の概要
プログラミングをしていると型を変換したくなる場面がよくでてきます。そんな場面を想定して、F# (または .NET)では、型を変換するための便利な機能や関数をあらかじめ用意してくれています。特にF#は他の.NET言語とは違い型に強い制約があるため、他の言語から移行して来た方は変換したいと思う機会が元の言語に比べて増えるかもしれません。
プリミティブ型同士で互換性のある型の場合は、キャスト演算子を利用することで簡単に型変換をすることが可能です。次の表は、F#で定義されているキャスト演算子の一覧となります。
演算子 | 概要 |
---|---|
byte | 符号なし8bit整数に変換 |
sbyte | 符号あり8bit整数に変換 |
uint16 | 符号なし16bit整数に変換 |
int16 | 符号あり16bit整数に変換 |
uint32 | 符号なし32bit整数に変換 |
int / int32 | 符号あり32bit整数に変換 |
uint64 | 符号なし64bit整数に変換 |
int64 | 符号あり64bit整数に変換 |
single / float32 | 32bit単精度IEEE浮動小数点数に変換 |
double / float | 64bit倍精度IEEE浮動小数点数に変換 |
decimal | System.Decimalに変換 |
char | System.Char(Unicode= UTF16)に変換 |
enum | 列挙型に変換 |
unativeint | 符号なし整数値としてのネイティブポインタに変換 |
nativeint | 符号あり整数値としてのネイティブポインタに変換 |
次のサンプルは基本的なキャスト演算子の使い方を示しています。
Convertモジュール
F#にはキャスト演算子の他に、Convertモジュールによる変換も用意されています。キャスト演算子との大きな違いは、Convertモジュールの変換関数は変換ができない場合に例外が発生する点です。次のサンプルはその違いと簡単な利用方法を表したものです。
TryParseメソッド
開発をしていると文字列から数値へ変換したくなる瞬間が多々あります。そういった場合に使える関数として、Parseメソッド と TryParseメソッド という2種類の変換方法が存在しています。その中でも今回は "TryParseメソッド" のみを紹介いたします。
これは変換ができない場合にParseメソッドは例外を発生してしまうためです。開発をする際は基本的に例外が発生しうる処理を避けるべきです。特に、今回のように類似処理で失敗をbool値で受け取れるような選択肢が存在している場合は、迷わずそちらを選択すべきです。これは例外の処理コスト的な問題はもちろん、例外発生による "突然死" を回避するために有効な手法です。
次のサンプルは TryParseメソッド を利用した文字列から数値への変換方法を示したものです。