Unit-Typ

Der unit-Typ gibt die Abwesenheit eines spezifischen Werts an. Der unit-Typ hat nur einen einzelnen Wert, der als Platzhalter fungiert, wenn kein anderer Wert vorhanden oder erforderlich ist.

Syntax

// The value of the unit type.
()

Bemerkungen

Die Auswertung jedes F#-Ausdrucks muss einen Wert ergeben. Für Ausdrücke, die keinen relevanten Wert generieren, wird der Wert vom Typ unit verwendet. Der unit-Typ ähnelt dem void-Typ aus Programmiersprachen wie C# und C++.

Der unit-Typ hat einen einzelnen Wert, und dieser Wert wird durch das Token () angegeben.

Der Wert des unit-Typs wird in der F#-Programmierung häufig als Platzhalter an einer Stelle verwendet, an der aufgrund der Sprachsyntax ein Wert erforderlich ist, aber kein Wert benötigt oder gewünscht wird. Ein Beispiel ist etwa der Rückgabewert einer printf-Funktion. Da die wichtigen Aktionen des printf-Vorgangs in der Funktion ausgeführt werden, muss die Funktion keinen tatsächlichen Wert zurückgeben. Daher hat der Rückgabewert den Typ unit.

Einige Konstrukte erwarten einen unit-Wert. So wird beispielsweise von einer do-Bindung oder von beliebigem Code auf der obersten Ebene eines Moduls erwartet, dass die Auswertung einen unit-Wert ergibt. Der Compiler meldet eine Warnung, wenn eine do-Bindung oder Code auf der obersten Ebene eines Moduls ein anderes Ergebnis als den nicht verwendeten unit-Wert generiert, wie im folgenden Beispiel gezeigt.

let function1 x y = x + y
// The next line results in a compiler warning.
function1 10 20
// Changing the code to one of the following eliminates the warning.
// Use this when you do want the return value.
let result = function1 10 20
// Use this if you are only calling the function for its side effects,
// and do not want the return value.
function1 10 20 |> ignore

Diese Warnung ist ein Merkmal der funktionalen Programmierung. In anderen .NET-Programmiersprachen tritt sie nicht auf. In einem rein funktionalen Programm, in dem Funktionen keinerlei Nebenwirkungen haben, ist der endgültige Rückgabewert das einzige Ergebnis eines Funktionsaufrufs. Wenn das Ergebnis also ignoriert wird, handelt es sich um einen potenziellen Programmierfehler. F# ist zwar keine rein funktionale Programmiersprache, es empfiehlt sich allerdings, nach Möglichkeit einen funktionalen Programmierstil anzustreben.

Siehe auch