Values

F# の値は、特定の型を持つ数量です。値は、整数または浮動小数点数、文字またはテキスト、リスト、シーケンス、配列、タプル、判別共用体、レコード、クラス型、関数値のいずれかです。Values in F# are quantities that have a specific type; values can be integral or floating point numbers, characters or text, lists, sequences, arrays, tuples, discriminated unions, records, class types, or function values.

値のバインドBinding a Value

バインドとは、名前と定義を関連付けることを意味します。The term binding means associating a name with a definition. let キーワードは、次の例のように、値のバインディングを行います。The let keyword binds a value, as in the following examples:

let a = 1
let b = 100u
let str = "text"

// A function value binding.

let f x = x + 1

値の型は、定義から推論されます。The type of a value is inferred from the definition. 整数や浮動小数点数などのプリミティブ型では、型がリテラルの型から判断されます。For a primitive type, such as an integral or floating point number, the type is determined from the type of the literal. したがって、前の例では、コンパイラによって b の型が unsigned int と推論されるのに対し、a の型は int と推論されます。Therefore, in the previous example, the compiler infers the type of b to be unsigned int, whereas the compiler infers the type of a to be int. 関数値の型は、関数本体の戻り値から判断されます。The type of a function value is determined from the return value in the function body. 関数値の型の詳細については、「関数」を参照してください。For more information about function value types, see Functions. リテラルの型の詳細については、「Literals」を参照してください。For more information about literal types, see Literals.

コンパイラは、既定で使用されていないバインドに関する診断を発行しません。The compiler does not issue diagnostics about unused bindings by default. これらのメッセージの受信を有効にコンパイラを呼び出す場合、プロジェクト ファイルまたは 1182 の警告 (を参照してください--warnonコンパイラ オプション)。To receive these messages, enable warning 1182 in your project file or when invoking the compiler (see --warnon under Compiler Options).

変更不可である理由Why Immutable?

変更不可の値とは、プログラムの実行過程全体を通じて変更できない値です。Immutable values are values that cannot be changed throughout the course of a program's execution. C++、Visual Basic、C# などの言語に慣れている場合は、F# のプログラムの実行中に、新しい値の割り当てが可能な変数よりも、変更不可な値が優先されることが意外に思われる可能性があります。If you are used to languages such as C++, Visual Basic, or C#, you might find it surprising that F# puts primacy over immutable values rather than variables that can be assigned new values during the execution of a program. 変更不可のデータは、関数型プログラミングの重要な要素です。Immutable data is an important element of functional programming. マルチスレッド環境では、多数の異なるスレッドによる変更が可能な共有の変数を管理することは困難です。In a multithreaded environment, shared mutable variables that can be changed by many different threads are difficult to manage. また、変更可能な変数では、変数が別の関数に渡されたときに変更される可能性があるかどうかを見分けるのが難しい場合があります。Also, with mutable variables, it can sometimes be hard to tell if a variable might be changed when it is passed to another function.

純粋な関数型言語では、変数は存在せず、関数は数学関数として厳密に機能します。In pure functional languages, there are no variables, and functions behave strictly as mathematical functions. 手続き型言語のコードでは変数割り当てを使用して値を変更しますが、関数型言語の同等のコードには、入力である変更不可の値、変更不可の関数、および出力としての別の変更不可の値があります。Where code in a procedural language uses a variable assignment to alter a value, the equivalent code in a functional language has an immutable value that is the input, an immutable function, and different immutable values as the output. この数学的な厳密性により、プログラムの動作についての強力な推論が実現します。This mathematical strictness allows for tighter reasoning about the behavior of the program. この強力な推論により、コンパイラでコードをより厳密にチェックし、より効率的に最適化を行い、開発者が正しいコードを容易に理解および記述できるようになります。This tighter reasoning is what enables compilers to check code more stringently and to optimize more effectively, and helps make it easier for developers to understand and write correct code. したがって、関数型コードは、通常の手続き型コードよりもデバッグが容易になるのが普通です。Functional code is therefore likely to be easier to debug than ordinary procedural code.

F# は、純粋な関数型言語ではありませんが、関数型プログラミングを完全にサポートします。F# is not a pure functional language, yet it fully supports functional programming. 変更不可の値の使用は、コードで関数型プログラミングの重要な特長を利用できる、優れたプログラミング方法です。Using immutable values is a good practice because doing this allows your code to benefit from an important aspect of functional programming.

変更可能な変数Mutable Variables

キーワード mutable を使用して、変更可能な変数を指定できます。You can use the keyword mutable to specify a variable that can be changed. F# での変更可能な変数の範囲は、通常、型のフィールドまたはローカル値として限定されています。Mutable variables in F# should generally have a limited scope, either as a field of a type or as a local value. 範囲が限定された変更可能な変数は、制御が容易であり、誤った方法で変更される可能性が低くなります。Mutable variables with a limited scope are easier to control and are less likely to be modified in incorrect ways.

変更可能な変数に初期値を割り当てるには、値を定義するときと同じ方法で、let キーワードを使用します。You can assign an initial value to a mutable variable by using the let keyword in the same way as you would define a value. ただし、次の例に示すように、<- 演算子を使用して、変更可能な変数に後で新しい値を割り当てることができる点が異なります。However, the difference is that you can subsequently assign new values to mutable variables by using the <- operator, as in the following example.

let mutable x = 1
x <- x + 1

マークされている値mutableに自動的に昇格できる可能性があります'a refなど、クロージャを作成するフォームを含む場合は、クロージャによってキャプチャされた、seqビルダー。Values marked mutable may be automatically promoted to 'a ref if captured by a closure, including forms that create closures, such as seq builders. これが発生したときに通知する場合は、警告を有効にする 3180 プロジェクト ファイル内、またはコンパイラを起動します。If you wish to be notified when this occurs, enable warning 3180 in your project file or when invoking the compiler.

タイトルTitle 説明Description
let バインドlet Bindings 使用に関する情報、letキーワード値および関数に名前をバインドします。Provides information about using the let keyword to bind names to values and functions.
関数Functions F# の関数の概要を説明します。Provides an overview of functions in F#.

関連項目See also