WerteValues

Werte in F# sind Mengen, die einen bestimmten Typ aufweisen. Werte können Ganzzahlen oder Gleitkommazahlen, Zeichen oder Text, Listen, Sequenzen, Arrays, Tupeln, Unterscheidungs-Unions, Datensätze, Klassentypen oder Funktionswerte sein.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.

Binden eines WertsBinding a Value

Der Begriff Bindung bezeichnet das Zuordnen eines Namens zu einer Definition.The term binding means associating a name with a definition. Das let-Schlüsselwort bindet einen Wert, wie in den folgenden Beispielen: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

Der Typ eines Werts wird aus der Definition abgeleitet.The type of a value is inferred from the definition. Für einen primitiven Datentyp, z.B. eine Ganzzahl oder Gleitkommazahl, wird der Typ vom Typ des Literals bestimmt.For a primitive type, such as an integral or floating point number, the type is determined from the type of the literal. Aus diesem Grund leitet der Compiler im vorherigen Beispiel den Typ b ab, um unsigned int zu sein, hingegen leitet der Compiler den Typ a ab, damit er int wird.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. Der Typ eines Funktionswerts wird anhand des Rückgabewerts im Funktionsrumpf bestimmt.The type of a function value is determined from the return value in the function body. Weitere Informationen über Funktionswerttypen finden Sie unter Funktionen.For more information about function value types, see Functions. Weitere Informationen über Literaltypen finden Sie unter Literale.For more information about literal types, see Literals.

Der Compiler gibt keine Diagnose über nicht verwendeten Bindungen standardmäßig aus.The compiler does not issue diagnostics about unused bindings by default. Um diese Nachrichten zu empfangen, aktivieren Warnung 1182 in der Projektdatei oder beim Aufrufen des Compilers (finden Sie unter --warnon unter Compileroptionen).To receive these messages, enable warning 1182 in your project file or when invoking the compiler (see --warnon under Compiler Options).

Warum unveränderlich?Why Immutable?

Unveränderliche Werte sind Werte, die im Verlauf der Ausführung des Programms nicht geändert werden können.Immutable values are values that cannot be changed throughout the course of a program's execution. Wenn Sie an Sprachen wie C++, Visual Basic oder C# gewöhnt sind, finden Sie es möglicherweise überraschend, dass F# unveränderlichen Werte Vorrang gewährt, anstelle von Variablen, denen während der Ausführung eines Programms neue Werte zugeordnet werden können.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. Unveränderliche Daten sind ein wichtiges Element der funktionalen Programmierung.Immutable data is an important element of functional programming. In einer Multithreadumgebung sind freigegebene änderbare Variablen, die von vielen unterschiedlichen Threads geändert werden können, schwierig zu verwalten.In a multithreaded environment, shared mutable variables that can be changed by many different threads are difficult to manage. Darüber hinaus kann man mit änderbaren Variablen manchmal nur schwer feststellen, ob eine Variable geändert werden kann, wenn sie an eine andere Funktion übergeben wird.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 reinen funktionalen Sprachen gibt es keine Variablen, und Funktionen verhalten sich genau wie mathematische Funktionen.In pure functional languages, there are no variables, and functions behave strictly as mathematical functions. Wo Code in einer prozeduralen Sprache eine Zuweisung einer Variable verwendet, um einen Wert zu ändern, verfügt der entsprechende Code in einer funktionalen Sprache über einen unveränderlichen Wert, der die Eingabe ist, eine unveränderliche Funktion und über verschiedene unveränderliche Werte als Ausgabe.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. Diese mathematische Strenge ermöglicht genauere Schlussfolgerungen über das Verhalten des Programms.This mathematical strictness allows for tighter reasoning about the behavior of the program. Diese Strenge ist der Grund dafür, dass Compiler Code präziser überprüfen und effizienter optimieren können, und es erleichtert Entwicklern das Verstehen und korrekte Schreiben von Code.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. Funktionaler Code ist daher häufig einfacher zu debuggen als gewöhnlicher prozeduraler Code.Functional code is therefore likely to be easier to debug than ordinary procedural code.

F# ist keine rein funktionale Programmiersprache, aber unterstützt funktionale Programmierung umfassend.F# is not a pure functional language, yet it fully supports functional programming. Die Verwendung von unveränderlichen Werten wird empfohlen, da Ihr Code dadurch von einem wichtigen Aspekt der funktionalen Programmierung profitieren kann.Using immutable values is a good practice because doing this allows your code to benefit from an important aspect of functional programming.

Änderbare VariablenMutable Variables

Sie können mithilfe des Schlüsselworts mutable eine Variable angeben, die geändert werden kann.You can use the keyword mutable to specify a variable that can be changed. Änderbare Variablen in F# sollten grundsätzlich einen begrenzten Bereich haben, entweder als Feld eines Typs oder als lokaler Wert.Mutable variables in F# should generally have a limited scope, either as a field of a type or as a local value. Änderbare Variablen mit einem begrenzten Gültigkeitsbereich sind einfacher zu steuern und werden seltener auf falsche Weise geändert.Mutable variables with a limited scope are easier to control and are less likely to be modified in incorrect ways.

Sie können einen Anfangswert für eine änderbare Variable zuweisen, indem Sie das let-Schlüsselwort auf die gleiche Weise verwenden, wie Sie einen Wert definieren würden.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. Der Unterschied ist jedoch, dass Sie anschließend den änderbaren Variablen neue Werte zuweisen können, indem Sie den <--Operator verwenden, wie im folgenden Beispiel.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

Werte, die markiert mutable automatisch auf heraufgestuft werden 'a ref durch einen Abschluss nicht erfasst, darunter Formulare, die Abschlüsse, z. B. erstellen seq Generatoren.Values marked mutable may be automatically promoted to 'a ref if captured by a closure, including forms that create closures, such as seq builders. Wenn Sie in diesem Fall benachrichtigt werden möchten, aktivieren Sie die Warnung 3180 in der Projektdatei oder beim Aufrufen des Compilers.If you wish to be notified when this occurs, enable warning 3180 in your project file or when invoking the compiler.

TitelTitle BeschreibungDescription
let-Bindungenlet Bindings Enthält Informationen zum Verwenden der let Schlüsselwort, um die Bindung von Namen an Werte und Funktionen.Provides information about using the let keyword to bind names to values and functions.
FunktionenFunctions Bietet eine Übersicht über Funktionen in F#.Provides an overview of functions in F#.

Siehe auchSee Also

NULL-WerteNull Values

F#-SprachreferenzF# Language Reference