Werte (F#)

Werte sind in F# Größen, die einen bestimmten Typ aufweisen. Werte können ganze Zahlen oder Gleitkommazahlen, Zeichen oder Text, Listen, Sequenzen, Arrays, Tupel, Unterscheidungs-Unions, Datensätze, Klassentypen oder Funktionswerte sein.

Binden eines Werts

Als Binden wird das Zuordnen eines Namens zu einer Definition bezeichnet. Mit dem let-Schlüsselwort wird ein Wert gebunden, wie in den folgenden Beispielen gezeigt:

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

// A function value binding.

let f x = x + 1

Der Typ des Werts wird aus der Definition abgeleitet. Für einen primitiven Typ, z. B. eine ganze Zahl oder eine Gleitkommazahl, wird der Typ anhand des Typs des Literals bestimmt. Daher leitet im vorherigen Beispiel der Compiler den Typ von b als unsigned int und den Typ von a als int ab. Der Typ eines Funktionswerts wird anhand des Rückgabewerts im Funktionsrumpf bestimmt. Weitere Informationen über Funktionswerttypen finden Sie unter Funktionen (F#). Weitere Informationen über Literaltypen finden Sie unter Literale (F#).

Warum unveränderlich?

Unveränderliche Werte sind Werte, die während der gesamten Ausführung eines Programms nicht geändert werden können. Wenn Sie bisher mit C++, Visual Basic oder C# gearbeitet haben, überrascht es Sie eventuell, dass in F# unveränderliche Werte Vorrang vor Variablen haben, denen während der Programmausführung neue Werte zugewiesen werden können. Unveränderliche Daten sind ein wichtiges Element der funktionalen Programmierung. In einer Multithreadumgebung sind freigegebene änderbare Variablen, die von vielen unterschiedlichen Threads geändert werden können, schwierig zu verwalten. Außerdem lässt sich bei änderbaren Variablen manchmal schwierig bestimmen, ob eine Variable geändert werden kann, wenn sie an eine andere Funktion übergeben wird.

In rein funktionalen Programmiersprachen gibt es keine Variablen, und das Verhalten von Funktionen entspricht genau dem Verhalten von mathematischen Funktionen. Während in Code einer prozeduralen Sprache ein Wert mithilfe einer Variablenzuweisung geändert wird, verfügt der entsprechende Code in einer funktionalen Sprache über einen unveränderlichen Wert als Eingabe, eine unveränderliche Funktion und unterschiedliche unveränderliche Werte als Ausgabe. Diese mathematische Strenge ermöglicht genauere Schlussfolgerungen über das Verhalten des Programms. Aufgrund der genaueren Schlussfolgerungen können Compiler Code präziser überprüfen und effizienter optimieren, und für Entwickler wird das Begreifen von Code sowie das Schreiben von ordnungsgemäßem Code erleichtert. Funktionaler Code ist daher häufig einfacher zu debuggen als gewöhnlicher prozeduraler Code.

F# ist keine rein funktionale Programmiersprache, jedoch wird die funktionale Programmierung umfassend unterstützt. Die Verwendung unveränderlicher Werte empfiehlt sich, weil hierdurch ein wichtiger Aspekt der funktionalen Programmierung im Code genutzt werden kann.

Änderbare Variablen

Sie können mithilfe des Schlüsselworts mutable eine Variable angeben, die geändert werden kann. In F# sollten änderbare Variablen i. d. R. einen begrenzten Gültigkeitsbereich aufweisen, entweder als Feld eines Typs oder als lokaler Wert. Änderbare Variablen mit einem begrenzten Gültigkeitsbereich sind einfacher zu steuern, und die Wahrscheinlichkeit ist geringer, dass sie auf falsche Weise geändert werden.

Sie können einer änderbaren Variablen mit dem let-Schlüsselwort auf die gleiche Weise einen Anfangswert zuweisen, wie Sie einen Wert definieren. Der Unterschied ist jedoch, dass Sie änderbaren Variablen anschließend mit dem Operator <- neue Werte zuweisen können, wie im folgenden Beispiel veranschaulicht.

let mutable x = 1
x <- x + 1

Verwandte Themen

Titel

Beschreibung

let-Bindungen (F#)

Enthält Informationen über die Verwendung des let -Schlüsselworts zum Binden von Namen an Werte und Funktionen.

Funktionen (F#)

Bietet eine Übersicht über Funktionen in F#.

Siehe auch

Konzepte

NULL-Werte (F#)

Weitere Ressourcen

F#-Sprachreferenz