値
値 Values
元ネタ http://msdn.microsoft.com/ja-jp/library/dd233185.aspx
値の束縛
束縛とは、名前と定義を関連付けることを意味します。 let キーワードは、次の例のように、値のバインディングを行います。
F#
let a = 1 let b = 100u let str = "text" // A function value binding. let f x = x + 1
正確には const をつけて変更できないようにするのだが、コード的には変更しなければ良い。
C#
const int a = 1; const char b = (char)100; const string str = "text"; // A function value binding. Func<int, int> f = x => x + 1;
変更不可である理由
純粋な関数型言語では、変数は存在せず、関数は数学関数として厳密に機能します。 手順型言語のコードでは変数割り当てを使用して値を変更しますが、関数型言語の等価なコードには、入力される変更不可の値、変更不可の関数、および出力される別の変更不可の値があります。 この数学的な厳密性により、プログラムの動作についての強力な推論が実現します。 この強力な推論により、コンパイラでコードをより厳密にチェックし、より効率的に最適化を行い、開発者が正しいコードを容易に理解および記述できるようになります。 したがって、関数型コードは、通常の手順型コードよりもデバッグが容易になるのが普通です。
要は、変更しないことを優先することによって、変更しているかもしれないリスク(変数の汚染)を減してデバッグを容易にする、ってこと。また、型推論を優先させるためには、変更しないことを優先するほうがよい。
変更可能な理由
変更可能な変数に初期値を割り当てるには、値を定義するときと同じ方法で、let キーワードを使用します。 ただし、次の例に示すように、<- 演算子を使用して、変更可能な変数の後に新しい値を割り当てることができます。
F#
let mutable x = 1 x <- x + 1
C# の場合は、変数>値になるので、数の変更は楽。
C#
int x = 1 ; x = x + 1 ;