Použití podmíněné logiky k vytvoření více cest spuštění

Dokončeno

Řekněme, že máte program, který vytvoří záložní soubor založený na souborech ve složce. Program se skládá z několika řádků kódu, které vyhledá a komprimuje sadu souborů. Co když se rozhodnete, že chcete přidat logiku, která vytvoří záložní soubor jenom v případě, že se v daný den neprovedou nějaké zálohy? Program by potřeboval způsob, jak zkontrolovat tuto podmínku (již byla provedena záloha?) a pak provést něco jiného na základě toho, jestli je podmínka pravdivá (pokud existuje záložní soubor pro daný den, nespouštět zálohování).

Vytvoření větve kódu pomocí konstruktoru if

Konstruktor if vyhodnotí logický výraz. Pokud se výraz vyhodnotí jako true, program spustí konkrétní větev kódu. Syntaxe konstruktoru if vypadá takto:

if <condition> then <expression>

Příklad konkrétnějšího kódu vypadá jako v tomto příkladu:

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

Definování alternativní větve pomocí klauzule else

Když se if příkaz vyhodnotí jako false, použijte else klauzuli s if konstruktorem ke spuštění jiné větve kódu.

Tady je postup, jak můžete použít else klauzuli:

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

Použití konstruktoru if jako výrazu

Zatím jste viděli, jak můžete v kódu používat if a else vytvářet různé větve. Když kód sleduje různé větve, vytvoří různé výsledky na základě toho, jestli se logická podmínka vyhodnotí jako true nebo false. Možná si nejste vědomi, je to, že při spuštění výrazu se vytvoří hodnota.

Pokud je kód napsaný jako v tomto příkladu, výsledek se vymaže:

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

V tomto případě if a else pracujte spíše jako ternární výraz. Pokud je truepodmínka, vrátí jednu hodnotu. Pokud ano false, vrátí druhou hodnotu. V obou případech se vrátí hodnota. Fakt, který platí pro všechny if výrazy.

Pojďme se znovu podívat na předchozí příklad kódu a podívat se na pozadí:

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

Je to stejný příklad kódu, který jste viděli dříve, ale teď, if a else jsou na stejném řádku. Vzhledem k tomu, že důležité akce printf operace probíhají ve funkci, nemusí funkce vracet skutečnou hodnotu. Proto návratová hodnota výrazu printfn "Senior citizen" vytvoří hodnotu typu unit.

Poznámka:

unit je hodnota, která funguje jako zástupný symbol, pokud se nevrátí žádná skutečná hodnota. Můžete si to představit jako void nebo None.

Další věcí, kterou je třeba mít na paměti, je, že nemůžete kombinovat typy. if a else musí vrátit stejný datový typ nebo se zobrazí chyba. Nemůžete například napsat kód, který vypadá jako v tomto příkladu:

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

V tomto případě určuje, if že návratový typ je string, takže else tento typ nelze změnit na int. Aby předchozí kód fungoval, musíte ho upravit:

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

Použití konstruktoru elif

Zatím jste viděli, jak if a else jak pracovat. elif je další konstruktor, který můžete použít podobně, jako byste použili if. Stejně jako if konstruktor má konstruktor elif logickou hodnotu a měl by být přidán hned za if. Konstruktor elif se spustí, když se if podmínka vyhodnotí jako false. Tady je příklad použití elif:

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