Utilizați logica condițională pentru a crea mai multe căi de execuție

Finalizat

Să presupunem că aveți un program care creează un fișier de backup bazat pe fișierele dintr-un folder. Programul constă din câteva linii de cod care localizează și comprimă un set de fișiere. Ce se întâmplă dacă decideți că doriți să adăugați o logică care creează un fișier de backup doar dacă nu s-a efectuat o copie backup în ziua respectivă? Programul ar avea nevoie de o modalitate de a verifica această condiție (are deja făcută o copie backup?), apoi să facă ceva diferit, în funcție de faptul dacă condiția este adevărată (dacă există un fișier de backup pentru ziua respectivă, nu rulați backup).

Crearea unei ramuri de cod utilizând o construcție if

O construcție if evaluează o expresie booleană. Dacă expresia se evaluează ca true, programul rulează o anumită ramură de cod. Iată cum arată sintaxa unei construcții de if:

if <condition> then <expression>

Un exemplu de cod mai tangibil arată astfel:

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

Definirea unei ramuri alternative utilizând o clauză else

Atunci când o instrucțiune if se evaluează ca false, utilizați o clauză de else cu if construi pentru a rula o altă ramură de cod.

Iată cum puteți utiliza o clauză de else:

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

Utilizarea unei construcții if ca expresie

Până acum, ați văzut cum puteți utiliza if și else pentru a crea diverse ramuri în cod. Atunci când codul urmează ramuri diferite, produce rezultate diferite, în funcție de evaluarea unei condiții booleene ca true sau false. De ce este posibil să nu știți, este că atunci când rulează o expresie, se produce o valoare.

Dacă codul este scris astfel, rezultatul devine clar:

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

În acest caz, if și else funcționează mai mult ca o expresie ternă. Dacă o condiție este true, returnează o valoare. Dacă este false, returnează cealaltă valoare. În orice caz, se returnează o valoare. Un fapt adevărat pentru toate expresiile if.

Să revizuim un exemplu de cod anterior și să ne uităm în culise:

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

Este același exemplu de cod pe care l-ați văzut mai devreme, dar acum, if și else se află pe aceeași linie. Deoarece acțiunile importante ale operațiunii printf apar în funcție, funcția nu trebuie să returneze o valoare reală. Prin urmare, valoarea returnată a expresiei printfn "Senior citizen" produce o valoare de tip unit.

Notă

unit este o valoare care acționează ca substituent atunci când nu se returnează nicio valoare reală. Vă puteți gândi la ea ca void sau None.

Un alt lucru de reținut este că nu puteți amesteca tipuri. if și else trebuie să returneze același tip de date sau veți primi o eroare. De exemplu, nu puteți scrie cod care arată astfel:

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

În acest caz, if determină că tipul returnat este string, astfel că else nu poate modifica acel tip în int. Pentru ca codul precedent să funcționeze, trebuie să-l modificați:

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

Utilizarea unei construcții elif

Până acum, ați văzut cum if și else de lucru. elif este o altă construcție pe care o puteți utiliza similar cu modul în care ați utiliza if. La fel ca o construcție de if, construirea elif preia o valoare booleană și ar trebui adăugată imediat după if. Construirea elif se execută atunci când condiția de if se evaluează ca false. Iată un exemplu despre cum să utilizați elif:

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