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!