Uitgebreide syntaxis

Er zijn twee soorten syntaxis beschikbaar voor veel constructies in F#: uitgebreide syntaxis en lichtgewicht syntaxis. De uitgebreide syntaxis is niet zo vaak gebruikt, maar heeft het voordeel dat u minder gevoelig bent voor inspringing. De lichtgewicht syntaxis is korter en maakt gebruik van inspringing om het begin en einde van constructies aan te geven, in plaats van extra trefwoorden zoals begin, endin, enzovoort. De standaardsyntaxis is de lichtgewicht syntaxis. In dit onderwerp worden de syntaxis voor F#-constructies beschreven wanneer lichtgewicht syntaxis niet is ingeschakeld. Uitgebreide syntaxis is altijd ingeschakeld, dus zelfs als u lichtgewicht syntaxis inschakelt, kunt u nog steeds uitgebreide syntaxis voor sommige constructies gebruiken.

Tabel met constructies

In de volgende tabel ziet u de lichtgewicht en uitgebreide syntaxis voor F#-taalconstructies in contexten waarin er een verschil is tussen de twee formulieren. In deze tabel plaatst u punthaken (<>) tussen door de gebruiker opgegeven syntaxiselementen. Raadpleeg de documentatie voor elke taalconstructie voor meer gedetailleerde informatie over de syntaxis die in deze constructies wordt gebruikt.

Taalconstructie Lichtgewicht syntaxis Uitgebreide syntaxis
samengestelde expressies
<expression1>
<expression2>
<expression1>; <expression2>

geneste let bindingen

let f x =
    let a = 1
    let b = 2
    x + a + b
let f x =
    let a = 1 in
    let b = 2 in
    x + a + b
codeblok
(
    <expression1>
    <expression2>
)
begin
    <expression1>;
    <expression2>;
end
'voor... do'
for counter = start to finish do
    ...
for counter = start to finish do
    ...
done
'terwijl... do'
while <condition> do
    ...
while <condition> do
    ...
done
'voor... in'
for var in start .. finish do
    ...
for var in start .. finish do
    ...
done
'do'
do
    ...
do
    ...
in
Record
type <record-name> =
    {
        <field-declarations>
    }
    <value-or-member-definitions>
type <record-name> =
    {
        <field-declarations>
    }
    with
        <value-or-member-definitions>
    end
Klasse
type <class-name>(<params>) =
    ...
type <class-name>(<params>) =
    class
        ...
    end
Structuur
[<StructAttribute>]
type <structure-name> =
    ...
type <structure-name> =
    struct
        ...
    end
gediscrimineerde vereniging
type <union-name> =
    | ...
    | ...
    ...
    <value-or-member definitions>
type <union-name> =
    | ...
    | ...
    ...
    with
        <value-or-member-definitions>
    end
interface
type <interface-name> =
    ...
type <interface-name> =
    interface
        ...
    end
objectexpressie
{ new <type-name>
    with
        <value-or-member-definitions>
        <interface-implementations>
}
{ new <type-name>
    with
        <value-or-member-definitions>
    end
    <interface-implementations>
}
interface-implementatie
interface <interface-name>
    with
        <value-or-member-definitions>
interface <interface-name>
    with
        <value-or-member-definitions>
    end
typeextensie
type <type-name>
    with
        <value-or-member-definitions>
type <type-name>
    with
        <value-or-member-definitions>
    end
module
module <module-name> =
    ...
module <module-name> =
    begin
        ...
    end

Zie ook