基本的な型の紹介
dotnet fsiコマンドでインタプリタfsiを起動して、1;;と入力しEnterを押してみてください。
次のような結果が表示されます。
(F#では、#lightモードでない場合、文の終わりは;;で表しますが
インタプリタを使う場合は#lightモードであっても;;が必要です。)
これは、itという名前にint型の値の1が割り当てられていることを表しています。
このようにして、値にどのような型がついているのかを確認できます。
itはfsiインタプリタ用の特殊な名前で
「最後に入力した値」が自動的に割り当てられます。
(itは英語で「それ」を表す単語)
ここから先は、F#で定義されている基本的な型を紹介します。
F#の基本的な型は.Net Frameworkで定義されている型と
対応しているので、それについてもあわせて記述します。
このページに記述していないものも含む全てのプリミティブ型と
.Net Frameworkのクラスの別名を持つ型は
付録1にまとめてありますので参考にしてください。
int型またはint32型
MSDN:(
System.Int32)
int型(System.Int32)は
-2,147,483,648 から +2,147,483,647 までの値の
符号付き整数を表します
おそらく最もよく使う型の一つで
F#では普通の整数値はint型になります。
便利な記法として、数値の先頭に
0bを付けると2進数
0oを付けると8進数
0xを付けると16進数
として数値を入力することが出来ます。
16進数の場合、0-9の数値の後はaが10、bが11、cが12、dが13、eが14、fが15に対応します。
16進数、8進数、2進数での記法
> 0b1010;;
val it : int = 10
> 0o12;;
val it : int = 10
> 0x0a;;
val it : int = 10
char型
MSDN:(
System.Char)
char型はUnicode文字を表す型です。
char型
> 'a';;
val it : char = 'a'
> 'あ';;
val it : char = 'あ'
> '¥u3042';; //「¥u数値」で、unicodeの文字コード指定も可能
val it : char = 'あ'
string型
MSDN:(
System.String)
string型(System.String)は文字列を表す型で
Unicode文字列のシーケンスを表します
文字列は一度定義した後は変更することは出来ません(読み取り専用)
もし変更可能な文字列が使いたい場合は
System.Text.StringBuilderクラスを使います。
string型
> "Hello world";;
val it : string = "Hello world"
また、先頭に@をつけた逐語的文字列(verbatim string)という形式も使えます。
こうすると、¥をエスケープシーケンスではなく文字として解釈してくれます(3.5)
ファイルのパスを表す文字列などでよく利用します。
verbatim string
> @"C:¥WINDOWS¥system32";;
val it : string = "C:¥WINDOWS¥system32"
> "C:¥¥WINDOWS¥¥system32";;
val it : string = "C:¥WINDOWS¥system32"
byte型
MSDN:(
System.Byte)
byte型は8ビットの0 から 255 までの範囲の符号なし整数を表します。
byte型の値は、数値の後ろにuyを付けて表現します。
byte型
> 10uy;;
val it : byte = 10uy
文字列のうしろに大文字のB(小文字では×)を付けることで
byte型の値の配列を表す略記法があります(配列については後で説明します)
byte配列の略記法
> "hello"B;;
val it : byte [] = [|104uy; 101uy; 108uy; 108uy; 111uy|]
逐語的文字列(verbatim string)の形式も使えます。
byte配列の逐語的文字列
> @"c:¥temp"B;;
val it : byte [] = [|99uy; 58uy; 92uy; 116uy; 101uy; 109uy; 112uy|]
sbyte型
MSDN:(
System.SByte)
sbyte型は8ビットの-128 から +127 までの範囲の整数を表します。
sbyte型の値を表すには、数値の後ろにyを付けます
sbyte型
> 10y;;
val it : sbyte = 10y
float型またはdouble型
MSDN:(
System.Double)
float型またはdouble型(どちらもSystem.Double型)は
-1.79769313486232e308 から +1.79769313486232e308までの
倍精度 64 ビット数値、正の 0 または負の 0、
PositiveInfinity、NegativeInfinity、および非数 (NaN) を表します。
これはIEEE 754規格に準拠した倍精度の浮動小数点になります。
float型
> 10.0;;
val it : float = 10.0
> 10.;;
val it : float = 10.0
> 1000000000000000.0;;
val it : float = 1e+15
> 1./0.;;
val it : float = infinity
> -1./0.;;
val it : float = -infinity
小数点以下は省略することが出来ます。
その場合、少数部は0になります。
single型またはfloat32型
MSDN:(
System.Single)
single型またはfloat32型(どちらもSystem.Single)は
、-3.402823e38 から +3.402823e38 までの単精度 32 ビット数と、
正の 0 または負の 0、PositiveInfinity、
NegativeInfinity、および非数 (NaN) を表します。
これはIEEE754規格準拠の単精度の浮動小数点になります。
single型の値を表すには、数値の後にfを付けます。
single型
> 1.0f;;
val it : float32 = 1.0f
> 10.;;
val it : float = 10.0
> 1.f/0.f;;
val it : float32 = infinityf
> -1.f/0.f;;
val it : float32 = -infinityf
> 100000000000.f;;
val it : float32 = 9.9999998e+10f
bool型
MSDN:(
System.Boolean)
bool型(System.Boolean)はtrue(真)とfalse(偽)の2つの値だけを持つ
真偽値を表す型です。
bool型
> true;;
val it : bool = true
> false;;
val it : bool = false
> 1+1=2;;
val it : bool = true
参考:プリミティブ型
-ここは最初はとばしてしまって問題無いです-
次の型はプリミティブ型(primitive types)と呼ばれています
基本型より
- プリミティブ型
- bool, byte, sbyte, int16, uint16, int, uint, int64, uint64,
nativeint, unativeint, decimal, float, double, float32, single, char, string, unit
これらは全て値型(Value Type)です。
値型というのは、値がスタックに格納されるか
オブジェクトまたは配列にインラインで含まれる型のことです
A type that is allocated on the stack or inline in an object or array.(f#4.1 spec glossary v)
値型はこれで全てではなく、構造体(struct)なども値型になります。