プリミティブ型
Midoliy |> F#プログラミング


プリミティブ型とは
bool型
整数型
浮動小数点数型

プリミティブ型とは


 プリミティブ型とは、F#言語で元から定義されている型のことを言います(≒ 組み込み型)。プリミティブ型は、F#の中でも最も基本的なもので、ほぼすべてのF#プログラムの基礎を形成します。  また、F#のプリミティブ型は .NETプリミティブ型 のスーパーセットです。


bool型


 bool型は、true / false の2種類の値のみをもつことができる型です。主に if式 などと一緒に使われます。
 以下は簡単なサンプルとなります。


 また、整数や浮動小数点数の数値から、bool値に変換するためのメソッドが .NET の Convertクラスに用意されています。
 "0" のときに "false" となり、それ以外の数値の場合に "true" となります。


 System.Boolean構造体(= bool) には、文字列を解析して bool値 に変換する [Parse] と [TryParse] という2つのstaticメソッドが用意されています。
 正常に解析される文字列は "True" / "False" / "true" / "false" または、これらの大・小文字の組み合わせだけです。"0" や "1" などは正常に解析されません。

 Parseメソッドは、解析できない文字列を引数に渡すと例外が発生します。


 TryParseメソッドは、解析できない文字列を引数に渡すと、返り値としてfalseが返されます。反対に、正常に解析できた場合は返り値としてtrueが返されます。



整数型


 整数型はその名もズバリ "整数値" を扱うための型です。整数型には扱える値の範囲によって、8種類の型が存在します。
 扱える範囲は
   sbyte < int16 < int < int64
の順に大きくなります。また正の数のみを扱える型も存在し、扱える範囲は
 byte < uint16 < uint < uint64
の順に大きくなります。
 今回は整数型の中でも特によく利用する int型 を中心に解説をしていきたいと思います。

 以下は簡単なサンプルとなります。


 値の後ろに、'u' や 's', 'L' などの文字が書かれているのがわかるかと思います。これはリテラル というもので、数値にこのリテラルを付与することで、その数字がなんの型かわかるようにしています。
 整数型の場合、数値にリテラルもつけないと自動的に int型 と判別されるため、int型 で表現できる範囲を超える数値を let束縛 しようとするとエラーとなります。例えば下記はエラーとなります。
let err = 4_294_967_294  // これはエラー

// これを解決するには、サフィックスを付ける必要があります
let ok = 4_294_967_294u
 また、数値は好きな場所に _(アンダースコア) を入れて区切ることが可能です。主に3桁区切りにすることが多いと思います。もちろん2桁や5桁など、任意の位置で区切ることも可能です。 一切区切らずに(= アンダースコアを使わずに)数値を書いても何の問題もありません。

 整数型は現実世界同様、算術演算(加減乗除)などの基本計算を行うことができます。また、ビット演算なども可能です。


 整数型にもbool型と同様に、文字列から数値を解析するstaticメソッドが用意されています。使い方もbool型とほとんど変わりません。整数型に解析できる文字列は数値のみの場合で、リテラル文字や、アンダースコアを含む文字列の場合、うまく解析できないことに注意する必要があります。
 以下に簡単な使用例を示します。


 TryParseメソッドもbool型同様に、解析成功時に true, 失敗時に false が返ってきます。



浮動小数点数型


 浮動小数点数型はいわゆる "実数値" を扱うための型です。ただし、現実世界の実数値とは違い、桁落ちや情報落ちなどの "誤差" が発生しうるので注意が必要です。
扱える範囲によって、単精度浮動小数点型の single , 倍精度浮動小数点型の double という2種類の型が用意されています。
 整数型と説明する内容があまり変わらないため、異なる機能を中心に紹介したいと思います。

 浮動小数点数型は整数型とは違い、0除算やオーバーフローなどの無効な操作を行ったときに例外が発生しないようになっています。 浮動小数点数型には、"NaN", "PositiveInfinity", "NegativeInfinity" という3つの特殊な値が定義されており、例外が発生しない代わりにこれらの値が返されます。

 NaN とは, Not a Number(= 非数)の略で、浮動小数点演算が有効でなかった場合などに操作結果として返されます。たとえば、以下のようなときに NaN が返されます。

0 を 0 で除算した場合
負の値の平方根を計算しようとした場合
Single.NaN(または、Double.NaN)を使って計算をしようとした場合


 PositiveInfinityNegativeInfinity は正の無限大と負の無限大を表す値です。これらの値は浮動小数点演算の結果の大きさが、変換先の型の表現範囲を超えている場合に発生します。
また、0以外の数値を 0除算 した場合も発生します。
 以下は、NaN / PositiveInfinity / NegativeInfinity が発生する場合のサンプルとなります。