F # - Grundlegende Syntax

Sie haben die Grundstruktur eines F # -Programms gesehen, sodass andere Grundbausteine ​​der F # -Programmiersprache leicht zu verstehen sind.

Token in F #

Ein F # -Programm besteht aus verschiedenen Token. Ein Token kann ein Schlüsselwort, ein Bezeichner, eine Konstante, ein Zeichenfolgenliteral oder ein Symbol sein. Wir können F # -Token in zwei Typen einteilen -

  • Keywords
  • Symbol und Operatoren

F # Schlüsselwörter

Die folgende Tabelle zeigt die Schlüsselwörter und kurze Beschreibungen der Schlüsselwörter. Wir werden die Verwendung dieser Schlüsselwörter in den folgenden Kapiteln diskutieren.

Stichwort Beschreibung
abstract Gibt eine Methode an, die entweder keine Implementierung in dem Typ hat, in dem sie deklariert ist, oder die virtuell ist und eine Standardimplementierung hat.
and Wird in gegenseitig rekursiven Bindungen, in Eigenschaftsdeklarationen und mit mehreren Einschränkungen für generische Parameter verwendet.
as Wird verwendet, um dem aktuellen Klassenobjekt einen Objektnamen zu geben. Wird auch verwendet, um einem ganzen Muster innerhalb einer Musterübereinstimmung einen Namen zu geben.
assert Wird verwendet, um den Code während des Debuggens zu überprüfen.
base Wird als Name des Basisklassenobjekts verwendet.
begin Gibt in ausführlicher Syntax den Beginn eines Codeblocks an.
class Gibt in der ausführlichen Syntax den Beginn einer Klassendefinition an.
default Gibt eine Implementierung einer abstrakten Methode an. Wird zusammen mit einer abstrakten Methodendeklaration verwendet, um eine virtuelle Methode zu erstellen.
delegate Wird verwendet, um einen Delegaten zu deklarieren.
do Wird in Schleifenkonstrukten oder zum Ausführen von imperativem Code verwendet.
done Gibt in der ausführlichen Syntax das Ende eines Codeblocks in einem Schleifenausdruck an.
downcast Wird verwendet, um in einen Typ zu konvertieren, der in der Vererbungskette niedriger ist.
downto In einem for Ausdruck, der beim umgekehrten Zählen verwendet wird.
elif Wird bei der bedingten Verzweigung verwendet. Eine Kurzform von sonst wenn.
else Wird bei der bedingten Verzweigung verwendet.
end

Gibt in Typdefinitionen und Typerweiterungen das Ende eines Abschnitts von Elementdefinitionen an.

In der ausführlichen Syntax wird das Ende eines Codeblocks angegeben, der mit dem Schlüsselwort begin beginnt.

exception Wird verwendet, um einen Ausnahmetyp zu deklarieren.
extern Gibt an, dass ein deklariertes Programmelement in einer anderen Binärdatei oder Assembly definiert ist.
false Wird als Boolesches Literal verwendet.
finally Wird zusammen mit dem Versuch verwendet, einen Codeblock einzuführen, der unabhängig davon ausgeführt wird, ob eine Ausnahme auftritt.
for Wird in Schleifenkonstrukten verwendet.
fun Wird in Lambda-Ausdrücken verwendet, die auch als anonyme Funktionen bezeichnet werden.
function Wird als kürzere Alternative zum Schlüsselwort fun und als Übereinstimmungsausdruck in einem Lambda-Ausdruck verwendet, dessen Muster für ein einzelnes Argument übereinstimmt.
global Wird verwendet, um auf den .NET-Namespace der obersten Ebene zu verweisen.
if Wird in bedingten Verzweigungskonstrukten verwendet.
in Wird für Sequenzausdrücke und in ausführlicher Syntax zum Trennen von Ausdrücken von Bindungen verwendet.
inherit Wird verwendet, um eine Basisklasse oder eine Basisschnittstelle anzugeben.
inline Wird verwendet, um eine Funktion anzugeben, die direkt in den Code des Anrufers integriert werden soll.
interface Wird zum Deklarieren und Implementieren von Schnittstellen verwendet.
internal Wird verwendet, um anzugeben, dass ein Element innerhalb einer Baugruppe sichtbar ist, jedoch nicht außerhalb.
lazy Wird verwendet, um eine Berechnung anzugeben, die nur ausgeführt werden soll, wenn ein Ergebnis benötigt wird.
let Wird verwendet, um einen Namen einem Wert oder einer Funktion zuzuordnen oder zu binden.
let! Wird in asynchronen Workflows verwendet, um einen Namen an das Ergebnis einer asynchronen Berechnung zu binden, oder in anderen Berechnungsausdrücken, um einen Namen an ein Ergebnis zu binden, das vom Berechnungstyp ist.
match Wird zum Verzweigen verwendet, indem ein Wert mit einem Muster verglichen wird.
member Wird verwendet, um eine Eigenschaft oder Methode in einem Objekttyp zu deklarieren.
module Wird verwendet, um einen Namen einer Gruppe verwandter Typen, Werte und Funktionen zuzuordnen und ihn logisch von anderem Code zu trennen.
mutable Wird verwendet, um eine Variable zu deklarieren, dh einen Wert, der geändert werden kann.
namespace Wird verwendet, um einen Namen einer Gruppe verwandter Typen und Module zuzuordnen und ihn logisch von anderem Code zu trennen.
new

Wird verwendet, um einen Konstruktor zu deklarieren, zu definieren oder aufzurufen, der ein Objekt erstellt oder erstellen kann.

Wird auch in allgemeinen Parametereinschränkungen verwendet, um anzugeben, dass ein Typ einen bestimmten Konstruktor haben muss.

not Eigentlich kein Schlüsselwort. Nicht Struktur in Kombination wird jedoch als generische Parametereinschränkung verwendet.
null

Zeigt das Fehlen eines Objekts an.

Wird auch in allgemeinen Parametereinschränkungen verwendet.

of Wird in diskriminierten Gewerkschaften verwendet, um die Art der Wertekategorien anzugeben, sowie in Delegierten- und Ausnahmeerklärungen.
open Wird verwendet, um den Inhalt eines Namespace oder Moduls ohne Einschränkung verfügbar zu machen.
or

Wird mit Booleschen Bedingungen als Boolescher Wert oder Operator verwendet. Entspricht ||.

Wird auch in Elementeinschränkungen verwendet.

override Wird verwendet, um eine Version einer abstrakten oder virtuellen Methode zu implementieren, die sich von der Basisversion unterscheidet.
private Beschränkt den Zugriff auf ein Mitglied auf Code im selben Typ oder Modul.
public Ermöglicht den Zugriff auf ein Mitglied von außerhalb des Typs.
rec Wird verwendet, um anzuzeigen, dass eine Funktion rekursiv ist.
return Wird verwendet, um einen Wert anzugeben, der als Ergebnis eines Berechnungsausdrucks bereitgestellt werden soll.
return! Wird verwendet, um einen Berechnungsausdruck anzugeben, der bei Auswertung das Ergebnis des enthaltenen Berechnungsausdrucks liefert.
select Wird in Abfrageausdrücken verwendet, um anzugeben, welche Felder oder Spalten extrahiert werden sollen. Beachten Sie, dass dies ein kontextbezogenes Schlüsselwort ist. Dies bedeutet, dass es sich nicht um ein reserviertes Wort handelt und sich nur in einem geeigneten Kontext wie ein Schlüsselwort verhält.
static Wird verwendet, um eine Methode oder Eigenschaft anzugeben, die ohne eine Instanz eines Typs oder ein Wertelement aufgerufen werden kann, das von allen Instanzen eines Typs gemeinsam genutzt wird.
struct

Wird verwendet, um einen Strukturtyp zu deklarieren.

Wird auch in allgemeinen Parametereinschränkungen verwendet.

Wird aus Gründen der OCaml-Kompatibilität in Moduldefinitionen verwendet.

then

Wird in bedingten Ausdrücken verwendet.

Wird auch verwendet, um Nebenwirkungen nach der Objektkonstruktion auszuführen.

to Wird in for-Schleifen verwendet, um einen Bereich anzugeben.
true Wird als Boolesches Literal verwendet.
try Wird verwendet, um einen Codeblock einzuführen, der möglicherweise eine Ausnahme generiert. Wird zusammen mit oder schließlich verwendet.
type Wird verwendet, um eine Klasse, einen Datensatz, eine Struktur, eine diskriminierte Vereinigung, einen Aufzählungstyp, eine Maßeinheit oder eine Typabkürzung zu deklarieren.
upcast Wird verwendet, um in einen Typ zu konvertieren, der in der Vererbungskette höher ist.
use Wird anstelle von let für Werte verwendet, für die Dispose aufgerufen werden muss, um Ressourcen freizugeben.
use! Gebraucht statt vermieten! in asynchronen Workflows und anderen Berechnungsausdrücken für Werte, für die Dispose aufgerufen werden muss, um Ressourcen freizugeben.
val Wird in einer Signatur verwendet, um einen Wert anzugeben, oder in einem Typ, um ein Mitglied in bestimmten Situationen zu deklarieren.
void Gibt den .NET-Leertyp an. Wird bei der Interaktion mit anderen .NET-Sprachen verwendet.
when Wird für boolesche Bedingungen (wenn Wachen verwendet) bei Musterübereinstimmungen und zum Einführen einer Einschränkungsklausel für einen generischen Typparameter verwendet.
while Führt ein Schleifenkonstrukt ein.
with Wird zusammen mit dem Schlüsselwort match in Mustervergleichsausdrücken verwendet. Wird auch in Objektausdrücken, Datensatzkopierausdrücken und Typerweiterungen verwendet, um Elementdefinitionen und Ausnahmebehandlungsroutinen einzuführen.
yield Wird in einem Sequenzausdruck verwendet, um einen Wert für eine Sequenz zu erzeugen.
yield! Wird in einem Berechnungsausdruck verwendet, um das Ergebnis eines bestimmten Berechnungsausdrucks an eine Sammlung von Ergebnissen für den enthaltenen Berechnungsausdruck anzuhängen.

Einige reservierte Schlüsselwörter stammen aus der OCaml-Sprache -

asr Land lor lsl lsr lxor mod sig

Einige andere reservierte Schlüsselwörter werden für die zukünftige Erweiterung von F # beibehalten.

atomar Unterbrechung überprüft Komponente const Zwang constructor
continue eager event external fixed functor include
method mixin object parallel process protected pure
sealed tailcall trait virtual volatile

Comments in F#

F# provides two types of comments −

  • One line comment starts with // symbol.
  • Multi line comment starts with (* and ends with *).

A Basic Program and Application Entry Point in F#

Generally, you don’t have any explicit entry point for F# programs. When you compile an F# application, the last file provided to the compiler becomes the entry point and all top level statements in that file are executed from top to bottom.

A well-written program should have a single top-level statement that would call the main loop of the program.

A very minimalistic F# program that would display ‘Hello World’ on the screen −

(* This is a comment *)
(* Sample Hello World program using F# *)
printfn "Hello World!"

When you compile and execute the program, it yields the following output −

Hello World!