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!