値 (F#)
F# の値は、特定の型を持つ数量です。値は、整数または浮動小数点数、文字またはテキスト、リスト、シーケンス、配列、タプル、判別共用体、レコード、クラス型、関数値のいずれかです。
値の束縛
束縛とは、名前と定義を関連付けることを意味します。let キーワードは、次の例のように、値のバインディングを行います。
let a = 1
let b = 100u
let str = "text"
// A function value binding.
let f x = x + 1
値の型は、定義から推論されます。整数や浮動小数点数などのプリミティブ型では、型がリテラルの型から判断されます。したがって、前の例では、コンパイラによって b の型が unsigned int と推論されるのに対し、a の型は int と推論されます。関数値の型は、関数本体の戻り値から判断されます。関数値の型の詳細については、「関数 (F#)」を参照してください。リテラルの型の詳細については、「リテラル (F#)」を参照してください。
変更不可である理由
変更不可の値とは、プログラムの実行過程の全体を通じて変更できない値です。開発者が、C++、Visual Basic、C# などの言語に慣れている場合は、F# のプログラムの実行中に、新しい値の割り当てが可能な変数よりも変更不可な値が優先されることが意外に思われる可能性があります。変更不可のデータは、関数型プログラミングの重要な要素です。マルチスレッド環境では、多数の異なるスレッドによる変更が可能な共有の変数を管理することは困難です。また、変更可能な変数では、変数が別の関数に渡されたときに変更される可能性があるかどうかを見分けるのが難しい場合があります。
純粋な関数型言語では、変数は存在せず、関数は数学関数として厳密に機能します。手順型言語のコードでは変数割り当てを使用して値を変更しますが、関数型言語の等価なコードには、入力される変更不可の値、変更不可の関数、および出力される別の変更不可の値があります。この数学的な厳密性により、プログラムの動作についての強力な推論が実現します。この強力な推論により、コンパイラでコードをより厳密にチェックし、より効率的に最適化を行い、開発者が正しいコードを容易に理解および記述できるようになります。したがって、関数型コードは、通常の手順型コードよりもデバッグが容易になるのが普通です。
F# は、純粋な関数型言語ではありませんが、関数型プログラミングを完全にサポートします。変更不可の値の使用は、コードで関数型プログラミングの重要な特長を利用できる、優れたプログラミング方法です。
変更可能な変数
mutable キーワードを使用して、変更可能な変数を指定できます。F# の変更可能な変数の範囲は、通常、型のフィールドまたはローカル値として限定されています。範囲が限定された変更可能な変数は、制御が容易であり、誤った方法で変更される可能性が低くなります。
変更可能な変数に初期値を割り当てるには、値を定義するときと同じ方法で、let キーワードを使用します。ただし、次の例に示すように、<- 演算子を使用して、変更可能な変数の後に新しい値を割り当てることができます。
let mutable x = 1
x <- x + 1
関連トピック
Title |
Description |
---|---|
let キーワードを使用した値および関数への名前のバインディングに関する情報を提供します。 |
|
F# の関数の概要について説明します。 |