Nopea vartijalausunto (esimerkkien kanssa)

Tässä artikkelissa opit käyttämään vartijalauseketta ohjaamaan ohjelman suorituksen kulkua.

Swift If -lauseke kuvaa, kuinka voit suorittaa toimintoja tiettyjen ehtojen (loogisen arvon) perusteella. Tässä artikkelissa tutkitaan vartijan lausunnon edut, jos lausunto hallitsee ohjelmavirtaa ja kirjoittaa yksinkertaisempaa ja selkeämpää koodia.

Nopea vartijalausunto

Vartijalausunnon pääasiallinen käyttötarkoitus on siirtää ohjelman hallinta pois tietyin ehdoin. Nämä lauseet ovat samanlaisia ​​kuin jos lausekkeet, jotka suorittavat lauseita tietyn ehdon (loogisen arvon) perusteella, mutta toisin kuin suojauslausekkeet suoritetaan vain, kun tietyt ehdot eivät täyty.

Lisäksi vartijan sisällä olevien lausuntojen on poistuttava soveltamisalasta. Siksi meidän on käyttäjäkohtaisia hallintalauseet return, break, continuetai throwlopussa vartija lausuman.

Vartijan lausunnon syntaksi

 vartijalauseke muu (// lausekkeiden // on sisällettävä ohjauslauseke: paluu, tauko, jatka tai heitä.) 
  • Tässä lauseke on looginen lauseke (palauttaa joko truetai false).
  • Jos lauseke arvioidaan false, suoritetaan lausekkeet koodilohkon sisällä guard.
  • Jos lauseke arvioidaan true, koodilohkon sisällä olevat lauseet guardohitetaan suorituksesta.

Kuinka vartijan lausunto toimii?

Huom pää vartija selvitys on oltava ohjaus lausuman return, break, continuetai throw.

Esimerkki 1: Kuinka vartijan lausunto toimii?

Yksinkertainen voimassa oleva vartijalausunto on seuraava:

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

Kun suoritat ohjelmaa, tulos on:

 Ehto täyttynyt

Yllä olevassa ohjelmassa guard sisältää loogisen arvon true (ehto täyttyy). Koska vartijalausekkeet suoritetaan vain, kun ehto ei täyty, vartijan sisällä olevaa lausetta ei suoriteta. Siksi print("Condition met")se suoritetaan ja lähtöehdot täyttyvät näytöllä.

Vaihdetaan nyt ehto epätosi:

Esimerkki 2: vartijan lausunnon on poistuttava soveltamisalasta

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

Yllä olevassa ohjelmassa vartijan kunto arvioidaan false. Joten print("Condition not met")muualla olevan lausunnon pitäisi suorittaa. Mutta saat virheilmoituksen sanomalla, että vartijan runko ei välttämättä kaadu, harkitse paluu- tai heittotapaa poistuaksesi soveltamisalasta.

Virheilmoitus on yksinkertainen sana tarkoittaa, sinun täytyy siirtää ohjelman ohjauksen vartija lausuman käyttäen return, break, continuetai throwlausuntoja. Toistaiseksi aiomme käyttää return. Ja koska returnlausetta voidaan käyttää vain funktion sisällä, aiomme kääri yllä olevan koodin Swift-funktioihin.

Esimerkki 3: vartijalauseke toiminnon sisällä

Voimme käyttää sisäpuolella olevaa vartijalauseketta Swiftin toiminnossa seuraavasti:

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

Kun suoritat yllä olevan ohjelman, tulos on:

 Ehto ei täyty Hei toiminnon kutsun jälkeen 

Yllä olevassa ohjelmassa vartijan kunto arvioidaan false, joten vartijan sisällä olevat lausunnot toteutetaan. Ensimmäinen lauseke print("Condition not met")antaa ehdon, joka ei täyty konsolissa.

Ja käsky returnlopettaa toiminnon suorittamisen ja lauseke print("Hello, after function call")sen jälkeen, kun funktiokutsu suorittaa, joka antaa Hello-funktion kutsun jälkeen konsolissa.

Esimerkki 4: Suoja lisävarusteilla

Olemme nähneet Swift Optionals if-let-sovelluksessa valinnaisen avaamisen käytöstä . Voimme kuitenkin käyttää myös vartijalauseketta sen sijaan, if-letettä purat valinnaisen yhdellä edulla. Tärkein etu valinnaisen pakkauksen purkamisella suojan sijasta if-leton, että voimme lisätä avaamattoman muuttujan laajuutta.

Katsotaanpa tämä alla olevassa esimerkissä:

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

Kun suoritat yllä olevan ohjelman, tulos on:

Nimi on nolla. Ei voida käsitellä

Yllä olevassa ohjelmassa näet, että pakkaamatonta arvolämpötilaa käytetään vartijalausunnon määrittelemän alueen ulkopuolella. Koska nimi on määritelty valinnaiseksi ja sisältää nolla-arvon, vartijalauseke ei pysty avaamaan arvoa.

Joten vartijan sisällä olevat lauseet suorittavat, mikä tulostaa Nimi on nolla. Lähdössä ei voi käsitellä ja toiminto lopetetaan returnlauseella. Yllä olevan vartijalausekkeen if-else vastaava koodi on:

 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() 

Kahden ilmoituksen yläpuolella oleva huomautus on pätevä ja tekee samaa työtä. Mutta jos käytät if-let-käskyä, et voi käyttää avaamatonta arvoa if-let-lauseen ulkopuolella. Mutta vartijalausekkeella voit käyttää avaamatonta arvoa funktion kautta.

Esimerkki 5: Suoja useilla ehdoilla

Vartijalausekkeet voivat myös ketjuttaa useita pilkulla (,) erotettuja ehtoja seuraavasti:

 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()

Kun suoritat yllä olevan ohjelman, tulos on:

Nimi on nolla tai tyhjä merkkijono. Ei voida käsitellä

Yllä olevassa ohjelmassa vartijan lausunto sisältää kaksi pilkulla erotettua ehtoa.

Ensimmäinen ehto let temp = namepurkaa valinnaisen, joka palaa truetapauksessamme, ja toinen ehto temp.count> 0tarkistaa, onko pakkaamattomassa merkkijonossa yli 0 merkkiä, mikä arvioidaan falseesimerkissämme.

Siksi vartijalausekkeen sisällä oleva käsky suorittaa lausekkeen, print("Name is nil or an empty string. Cannot process")jonka nimi on nolla tai tyhjä merkkijono. Ei voi käsitellä konsolissa ja lopettaa toiminnon returnlauseella.

Mielenkiintoisia artikkeleita...