F # - podstawowa składnia

Widziałeś już podstawową strukturę programu F #, więc łatwo będzie zrozumieć inne podstawowe elementy składowe języka programowania F #.

Tokeny w F #

Program F # składa się z różnych tokenów. Token może być słowem kluczowym, identyfikatorem, stałą, literałem ciągu lub symbolem. Możemy podzielić tokeny F # na dwa typy -

  • Keywords
  • Symbol i operatory

Słowa kluczowe F #

W poniższej tabeli przedstawiono słowa kluczowe i krótkie opisy słów kluczowych. Użycie tych słów kluczowych omówimy w kolejnych rozdziałach.

Słowo kluczowe Opis
abstract Wskazuje metodę, która nie ma implementacji w typie, w którym jest zadeklarowana, lub jest wirtualna i ma domyślną implementację.
and Używany we wzajemnie cyklicznych powiązaniach, w deklaracjach właściwości i z wieloma ograniczeniami dotyczącymi parametrów ogólnych.
as Służy do nadania aktualnemu obiektowi klasy nazwy obiektu. Używane także do nadawania nazwy całemu wzorowi w dopasowaniu do wzorca.
assert Służy do weryfikacji kodu podczas debugowania.
base Używany jako nazwa obiektu klasy bazowej.
begin W pełnej składni wskazuje początek bloku kodu.
class W pełnej składni wskazuje początek definicji klasy.
default Wskazuje implementację metody abstrakcyjnej; używane razem z deklaracją metody abstrakcyjnej do tworzenia metody wirtualnej.
delegate Służy do deklarowania delegata.
do Używany w konstrukcjach zapętlonych lub do wykonywania bezwzględnego kodu.
done W pełnej składni wskazuje koniec bloku kodu w wyrażeniu zapętlonym.
downcast Służy do konwersji na typ, który jest niższy w łańcuchu dziedziczenia.
downto W for wyrażenie używane podczas liczenia w odwrotnej kolejności.
elif Używany w rozgałęzieniach warunkowych. Krótka forma else if.
else Używany w rozgałęzieniach warunkowych.
end

W definicjach typów i rozszerzeniach typów wskazuje koniec sekcji definicji elementów członkowskich.

W pełnej składni służy do określenia końca bloku kodu, który zaczyna się od słowa kluczowego begin.

exception Służy do deklarowania typu wyjątku.
extern Wskazuje, że zadeklarowany element programu jest zdefiniowany w innym pliku binarnym lub zestawie.
false Używany jako literał logiczny.
finally Używane razem z próbą wprowadzenia bloku kodu, który jest wykonywany niezależnie od tego, czy wystąpi wyjątek.
for Używany w konstrukcjach zapętlonych.
fun Używane w wyrażeniach lambda, zwanych również funkcjami anonimowymi.
function Używany jako krótsza alternatywa dla słowa kluczowego fun i wyrażenia dopasowującego w wyrażeniu lambda, które ma dopasowanie do wzorca dla pojedynczego argumentu.
global Służy do odwoływania się do obszaru nazw platformy .NET najwyższego poziomu.
if Używany w warunkowych konstrukcjach rozgałęziających.
in Używany do wyrażeń sekwencji oraz, w pełnej składni, do oddzielania wyrażeń od powiązań.
inherit Służy do określania klasy bazowej lub interfejsu podstawowego.
inline Służy do wskazania funkcji, która powinna zostać zintegrowana bezpośrednio z kodem dzwoniącego.
interface Służy do deklarowania i implementowania interfejsów.
internal Służy do określania, że ​​element jest widoczny wewnątrz zespołu, ale nie na zewnątrz.
lazy Służy do określania obliczenia, które ma być wykonane tylko wtedy, gdy potrzebny jest wynik.
let Służy do kojarzenia lub wiązania nazwy z wartością lub funkcją.
let! Używany w asynchronicznych przepływach pracy do wiązania nazwy z wynikiem obliczenia asynchronicznego lub, w innych wyrażeniach obliczeniowych, do wiązania nazwy z wynikiem, który jest typu obliczeniowego.
match Służy do rozgałęziania przez porównanie wartości ze wzorcem.
member Służy do deklarowania właściwości lub metody w typie obiektu.
module Służy do kojarzenia nazwy z grupą powiązanych typów, wartości i funkcji, aby logicznie oddzielić ją od innego kodu.
mutable Służy do deklarowania zmiennej, czyli wartości, którą można zmienić.
namespace Służy do kojarzenia nazwy z grupą powiązanych typów i modułów, aby logicznie oddzielić ją od innego kodu.
new

Służy do deklarowania, definiowania lub wywoływania konstruktora, który tworzy lub może utworzyć obiekt.

Używany również w ogólnych ograniczeniach parametrów, aby wskazać, że typ musi mieć określony konstruktor.

not Właściwie to nie słowo kluczowe. Jednak nie struct w połączeniu jest używany jako ogólne ograniczenie parametru.
null

Wskazuje na brak obiektu.

Używany również w ogólnych ograniczeniach parametrów.

of Używany w unii rozłącznych do wskazywania typu kategorii wartości oraz w deklaracjach delegatów i wyjątków.
open Służy do udostępniania zawartości przestrzeni nazw lub modułu bez kwalifikacji.
or

Używany z warunkami boolowskimi jako Boolean lub operator. Odpowiednik ||.

Używany również w ograniczeniach elementów.

override Służy do implementowania wersji metody abstrakcyjnej lub wirtualnej, która różni się od wersji podstawowej.
private Ogranicza dostęp do członka do kodu tego samego typu lub modułu.
public Umożliwia dostęp do członka spoza typu.
rec Służy do wskazania, że ​​funkcja jest rekurencyjna.
return Służy do wskazania wartości, która ma być podana jako wynik wyrażenia obliczenia.
return! Służy do wskazania wyrażenia obliczeniowego, które po oszacowaniu dostarcza wynik zawierającego wyrażenie obliczeniowe.
select Używane w wyrażeniach zapytań do określenia pól lub kolumn do wyodrębnienia. Zwróć uwagę, że jest to kontekstowe słowo kluczowe, co oznacza, że ​​w rzeczywistości nie jest to słowo zastrzeżone i działa tylko jak słowo kluczowe w odpowiednim kontekście.
static Służy do wskazania metody lub właściwości, które można wywołać bez wystąpienia typu lub elementu członkowskiego wartości, który jest współużytkowany przez wszystkie wystąpienia typu.
struct

Służy do deklarowania typu struktury.

Używany również w ogólnych ograniczeniach parametrów.

Używany do zgodności z OCaml w definicjach modułów.

then

Używane w wyrażeniach warunkowych.

Służy również do wywoływania efektów ubocznych po zbudowaniu obiektu.

to Używane w pętlach for do wskazania zakresu.
true Używany jako literał logiczny.
try Służy do wprowadzania bloku kodu, który może generować wyjątek. Używany razem z lub ostatecznie.
type Służy do deklarowania klasy, rekordu, struktury, unii dyskryminowanej, typu wyliczenia, jednostki miary lub skrótu typu.
upcast Służy do konwersji na typ znajdujący się wyżej w łańcuchu dziedziczenia.
use Używane zamiast let dla wartości, które wymagają wywołania metody Dispose w celu zwolnienia zasobów.
use! Używane zamiast let! w asynchronicznych przepływach pracy i innych wyrażeniach obliczeniowych dla wartości, które wymagają wywołania metody Dispose w celu zwolnienia zasobów.
val Używany w podpisie do wskazania wartości lub w typie do zadeklarowania elementu członkowskiego, w ograniczonych sytuacjach.
void Wskazuje typ unieważnienia platformy .NET. Używany podczas współpracy z innymi językami .NET.
when Służy do warunków logicznych (gdy guards) na dopasowaniach wzorców i do wprowadzenia klauzuli ograniczenia dla parametru typu ogólnego.
while Wprowadza konstrukcję zapętloną.
with Używane razem ze słowem kluczowym match w wyrażeniach dopasowywania wzorców. Używany również w wyrażeniach obiektów, wyrażeniach kopiowania rekordów i rozszerzeniach typów w celu wprowadzenia definicji elementów członkowskich i wprowadzenia programów obsługi wyjątków.
yield Używany w wyrażeniu sekwencji do tworzenia wartości dla sekwencji.
yield! Używany w wyrażeniu obliczeniowym w celu dołączenia wyniku danego wyrażenia obliczeniowego do kolekcji wyników dla zawierającego wyrażenie obliczeniowe.

Niektóre zastrzeżone słowa kluczowe pochodzą z języka OCaml -

asr wylądować lor lsl lsr lxor mod sig

Niektóre inne zastrzeżone słowa kluczowe są zachowywane na potrzeby przyszłego rozszerzenia języka F #.

atomowy przerwa sprawdzone składnik konst przymus 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!