Declarație de gardă rapidă (cu exemple)

În acest articol, veți învăța să utilizați declarația de gardă pentru a controla fluxul de execuție al programului.

Instrucțiunea Swift If descrie cum puteți efectua acțiuni bazate pe anumite condiții (valoare booleană). În acest articol, vom explora avantajele declarației de gardă asupra instrucțiunii dacă controlează fluxul programului și scriem un cod mai simplu și mai curat.

Declarație de gardă rapidă

Principala utilizare a declarației de gardă este de a transfera controlul programului în afara unui domeniu în anumite condiții. Aceste instrucțiuni sunt similare cu instrucțiunile if care execută instrucțiuni bazate pe anumite condiții (valoare booleană), dar spre deosebire de cazul în care, instrucțiunile de gardă rulează numai atunci când anumite condiții nu sunt îndeplinite.

Mai mult, declarațiile din interiorul pazei trebuie să iasă din scop. Prin urmare, trebuie să declarații de control al programului de utilizator return, break, continuesau throwla finalul declarației de paza.

Sintaxa declarației de gardă

 expresie de gardă else (// declarații // trebuie să conțină o declarație de control: return, break, continue or throw.) 
  • Aici, expresia este o expresie booleană (returnează fie truesau false).
  • Dacă expresia este evaluată la false, guardse execută instrucțiunile din blocul de cod al .
  • Dacă expresia este evaluată la true, instrucțiunile din blocul de cod din guardsunt omise de la executare.

Cum funcționează declarația de gardă?

Notă: Sfârșitul declarației de protecție trebuie să conțină o declarație de control return, break, continuesau throw.

Exemplul 1: Cum funcționează declarația de pază?

O declarație validă simplă de pază este următoarea:

 guard true else ( print("Condition not met") ) print("Condition met") 

Când rulați programul, ieșirea va fi:

 Condiția îndeplinită

În programul de mai sus, guard conține o valoare booleană true (condiția este îndeplinită). Deoarece declarațiile de gardă rulează numai atunci când condiția nu este îndeplinită, declarația din cadrul pazei nu este executată. De aceea print("Condition met")este executată și ieșirile Condiția îndeplinite pe ecran.

Acum să schimbăm condiția în fals ca:

Exemplul 2: declarația de gardă trebuie să părăsească domeniul de aplicare

 guard false else ( print("Condition not met") ) print("Condition met") 

În programul de mai sus, starea de gardă se evaluează la false. Deci, declarația print("Condition not met")din altceva ar trebui să se execute. Dar veți primi o eroare spunând că corpul „paznic” poate să nu cadă, luați în considerare utilizarea unei „întoarceri” sau „aruncări” pentru a ieși din scop.

Mesajul de eroare în cuvântul înseamnă simplu, trebuie să transferați programul de control din declarația de protecție folosind return, break, continuesau throwdeclarații. Deocamdată vom folosi return. Și întrucât returninstrucțiunea poate fi utilizată numai în interiorul unei funcții, vom înfășura mai sus codul în funcțiile Swift.

Exemplul 3: instrucțiunea guard în interiorul unei funcții

Putem folosi declarația de gardă dintr-o funcție din Swift ca:

 func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call") 

Când rulați programul de mai sus, ieșirea va fi:

 Condiția nu este îndeplinită Bună ziua după apelul funcțional 

În programul de mai sus, starea de pază se evaluează false, deci declarațiile din interiorul pazei se execută. Primele instrucțiuni de print("Condition not met")ieșire Condiția nu a fost îndeplinită în consolă.

Și instrucțiunea returnpune capăt execuției unei funcții, iar instrucțiunea print("Hello, after function call")după apelul funcției execută ce ieșiri Hello după apel funcție în consolă.

Exemplul 4: Gardă cu opțional

Am văzut în Swift Optionals utilizarea if-letpentru a desface un opțional. Cu toate acestea, putem folosi, de asemenea, declarația de gardă în locul if-letdespachetării unui opțional cu un singur avantaj. Principalul avantaj al desfacerii unei opționale cu protecție în loc de if-leteste că putem crește domeniul de aplicare al variabilei despachetate.

Să vedem acest lucru în exemplul de mai jos:

 func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase() 

Când rulați programul de mai sus, ieșirea va fi:

Numele este nul. Nu se poate procesa

În programul de mai sus, puteți vedea că valoarea neambalată a temperaturii este utilizată în afara domeniului definit de instrucțiunea guard. Deoarece, numele este definit opțional și conține valoare nulă, instrucțiunea de protecție nu reușește să desfacă valoarea.

Deci, declarațiile din gardian execută altceva care imprimă numele este nul. Nu se poate procesa în ieșire și termină funcția cu returninstrucțiune. Codul echivalent al declarației de gardă de mai sus declarația if-else este:

 func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase() 

Notă de mai sus, două afirmații sunt valabile și fac aceeași treabă. Dar folosind instrucțiunea if-let nu puteți utiliza valoarea despachetată în afara instrucțiunii if-let. Dar cu declarația de gardă puteți utiliza valoarea desfăcută prin funcție.

Exemplul 5: Pază cu condiții multiple

Declarațiile de gardă pot, de asemenea, să lanseze mai multe condiții separate prin virgulă (,) ca:

 func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()

Când rulați programul de mai sus, ieșirea va fi:

Numele este nul sau un șir gol. Nu se poate procesa

În programul de mai sus, declarația de gardă conține două condiții separate prin virgulă.

Prima condiție let temp = namedezvăluie o opțională care revine trueîn cazul nostru, iar a doua condiție temp.count> 0verifică dacă șirul despachetat are mai mult de 0 caractere, ceea ce este evaluat falseîn exemplul nostru.

Prin urmare, instrucțiunea din instrucțiunea guard execută instrucțiunea print("Name is nil or an empty string. Cannot process")care scoate numele este nul sau un șir gol. Nu se poate procesa în consolă și termină funcția cu returninstrucțiune.

Articole interesante...