Brug betinget logik til at oprette flere udførelsesstier

Fuldført

Lad os sige, at du har et program, der opretter en sikkerhedskopifil baseret på filerne i en mappe. Programmet består af et par kodelinjer, der finder og komprimerer et sæt filer. Hvad sker der, hvis du beslutter, at du kun vil tilføje logik, der opretter en sikkerhedskopifil, hvis der ikke er foretaget en sikkerhedskopiering den dag? Programmet skal bruge en måde at kontrollere for denne betingelse (er der allerede foretaget en sikkerhedskopiering?), og derefter gøre noget andet, afhængigt af om betingelsen er sand (hvis der findes en sikkerhedskopifil for dagen, skal du ikke køre sikkerhedskopiering).

Opret en kodegren ved hjælp af en if-konstruktion

En if-konstruktion evaluerer et boolesk udtryk. Hvis udtrykket evalueres som true, kører programmet en bestemt kodegren. Sådan ser syntaksen for en if-konstruktion ud:

if <condition> then <expression>

Et mere håndgribeligt kodeeksempel ser ud som i dette eksempel:

let age = 66
if age > 65 
then printfn "Senior citizen"

Definer en alternativ forgrening ved hjælp af en else-delsætning

Når en if-sætning evalueres som false, skal du bruge en else-delsætning sammen med if-konstruktionen til at køre en anden kodeforgrening.

Sådan kan du bruge en else-delsætning:

let age = 66
if age > 65 
then printfn "Senior citizen"
else printfn "Citizen"

Brug en if-konstruktion som et udtryk

Indtil videre har du set, hvordan du kan bruge if og else til at oprette forskellige forgreninger i koden. Når koden følger forskellige forgreninger, giver den forskellige resultater, afhængigt af om en boolesk betingelse evalueres som true eller false. Det, du måske ikke er klar over, er, at når et udtryk køres, oprettes der en værdi.

Hvis koden skrives som i dette eksempel, bliver resultatet tydeligt:

let age = 64
let message = if age > 65 then "Senior citizen" else "Citizen"
printfn "%s" message

I dette tilfælde fungerer if og else mere som et ternært udtryk. Hvis en betingelse er true, returneres én værdi. Hvis den er false, returneres den anden værdi. I begge tilfælde returneres en værdi. Et faktum, der er sandt for alle if udtryk.

Lad os vende tilbage til et tidligere kodeeksempel og se bag kulisserne:

let age = 66
if age > 65 then printfn "Senior citizen" else printfn "Citizen"

Det er det samme kodeeksempel, du så tidligere, men nu er if og else på samme linje. Da de vigtige handlinger for handlingen printf forekommer i funktionen, behøver funktionen ikke at returnere en faktisk værdi. Derfor producerer returværdien for udtrykket printfn "Senior citizen" en værdi af typen unit.

Seddel

unit er en værdi, der fungerer som pladsholder, når der ikke returneres en faktisk værdi. Du kan tænke på det som void eller None.

En anden ting at huske på er, at du ikke kan blande typer. if og else skal returnere den samme datatype, ellers får du vist en fejl. Du kan f.eks. ikke skrive kode, der ligner dette eksempel:

let someCondition = true
let value = if someCondition then "hello" else 1 // not allowed

I dette tilfælde bestemmer if, at returtypen er string, så else ikke kan ændre denne type til int. Hvis den foregående kode skal fungere, skal du ændre den:

let someCondition = true
let value = if someCondition then "hello" else "1" // allowed

Brug en elif-konstruktion

Indtil videre har du set, hvordan if og else fungerer. elif er en anden konstruktion, som du kan bruge på samme måde som if. På samme måde som med en if konstruktion tager den elif konstruktør en boolesk værdi og skal tilføjes lige efter if. Den elif konstruktion udføres, når betingelsen if evalueres som false. Her er et eksempel på, hvordan du bruger elif:

let cardValue = 1
let cardDescription = if cardValue = 1 then "Ace" elif cardValue = 14 then "Ace" else "A card"
printfn "%s" cardDescription