Gyors őrségi nyilatkozat (példákkal)

Ebben a cikkben megtanulja használni a guard utasításokat a program végrehajtásának folyamatának szabályozásához.

A Swift If utasítás azt írja le, hogyan hajthatja végre a műveleteket bizonyos feltételek (logikai érték) alapján. Ebben a cikkben megvizsgáljuk az őr utasításának előnyeit, ha a program folyamata vezérli az egyszerűbb és tiszta kódot.

Gyors őrség nyilatkozata

Az őrző nyilatkozat fő célja, hogy a programirányítást bizonyos feltételek mellett átruházza a hatókörről. Ezek az állítások hasonlítanak azokhoz az utasításokhoz, amelyek bizonyos feltétel (boolean érték) alapján hajtanak végre utasításokat, de ettől eltérően a biztonsági utasítások csak akkor futnak, ha bizonyos feltételek nem teljesülnek.

Ezenkívül az őrségen belüli kijelentéseknek ki kell lépniük a hatályból. Ezért van, hogy a felhasználói programot vezérlő utasítások return, break, continuevagy throwa végén az őr nyilatkozatot.

Az őrség nyilatkozatának szintaxisa

 guard kifejezés else (// utasításoknak // tartalmaznia kell egy ellenőrző utasítást: visszatérés, törés, folytatás vagy dobás.) 
  • Itt a kifejezés logikai kifejezés (vagy a, truevagy a false) adja vissza .
  • Ha a kifejezést értékelik false, guardakkor végrehajtják az utasításokat a kódblokkban .
  • Ha a kifejezést értékelik true, a kódblokk belsejében lévő utasítások guardkihagyásra kerülnek a végrehajtásból.

Hogyan működik az őrség nyilatkozata?

Megjegyzés: A végén az őr nyilatkozatot kell tartalmaznia ellenőrzési nyilatkozatot return, break, continuevagy throw.

1. példa: Hogyan működik az őrség nyilatkozata?

Egy egyszerű érvényes őrségi nyilatkozat a következő:

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

A program futtatásakor a kimenet a következő lesz:

 Feltétel teljesült

A fenti programban a guard egy true logikai értéket tartalmaz (a feltétel teljesül). Mivel az őrző nyilatkozatok csak akkor futnak, amikor a feltétel nem teljesül, az őrségen belüli utasítás nem kerül végrehajtásra. Ezért print("Condition met")van végrehajtva, és a kimenetek feltétel teljesül a képernyőn.

Most változtassuk meg a feltételt hamisra:

2. példa: az őrség nyilatkozatának ki kell lépnie a hatókörből

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

A fenti programban az őrállapot értéke a false. Tehát a print("Condition not met")más részen belüli állítást végre kell hajtani. De hibát fog kapni, mondván, hogy az „őr” teste nem esik át, fontolja meg a „visszatérés” vagy a „dobás” használatát a hatókörből való kilépéshez.

A hibaüzenet egyszerű szó jelentését, akkor át kell programú vezérlés az őr nyilatkozatból return, break, continuevagy thrownyilatkozatokat. Egyelőre használni fogjuk return. És mivel az returnutasítás csak egy függvényen belül használható, a fenti kódot a Swift Funkciókba fogjuk csomagolni.

3. példa: őrző utasítás egy függvényen belül

Használhatjuk a belső utasításokat a Swift egyik funkciójában, mint:

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

A fenti program futtatásakor a kimenet a következő lesz:

 A feltétel nem teljesült Helló a funkcióhívás után 

A fenti programban az őr állapot feltételez false, ezért az őrségen belüli utasítások végrehajtásra kerülnek. Az első állítás print("Condition not met")kimenetek állapota nem felel meg a konzolon.

És az utasítás returnmegszünteti a függvény végrehajtását, és az utasítás azt print("Hello, after function call")követően, hogy a függvényhívás végrehajtja, amely a Hello után adja ki a függvényhívást a konzolon.

4. példa: Őr opciókkal

A Swift Optionals-ban láthattuk az opcionális if-letcsomagolásának használatát . Használhatunk azonban őrző nyilatkozatot a if-letválasztható opciók kibontásához is, egy előnnyel. Az opcionális védővel történő kibontásának legfőbb előnye, if-lethogy növeljük a kibontott változó hatókörét.

Lássuk ezt az alábbi példában:

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

A fenti program futtatásakor a kimenet a következő lesz:

A név nulla. Nem lehet feldolgozni

A fenti programban láthatja, hogy a becsomagolatlan értékhőmérsékletet a Guard utasítás által meghatározott körön kívül használják. Mivel a név opcionálisan definiált és nulla értéket tartalmaz, a guard utasítás nem bontja ki az értéket.

Tehát az őrségen belüli utasítások végrehajtják, hogy melyik név nyomtassa ki a nulla értéket. Nem lehet feldolgozni a kimenetben, és utasítással fejezi be a függvényt return. A fenti őr nyilatkozat ekvivalens kódja:

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

Két fenti megállapítás egyaránt érvényes, és ugyanazt a munkát végzi. De az if-let utasítás használatával nem használhatja a kibontott értéket az if-let utasításon kívül. De a guard utasítással a kibontott értéket a függvényen keresztül is felhasználhatja.

5. példa: Több feltételes őr

Az őrök állításai több, vesszővel (,) elválasztott feltételt is láncolhatnak:

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

A fenti program futtatásakor a kimenet a következő lesz:

A név nulla vagy üres karakterlánc. Nem lehet feldolgozni

A fenti programban az őrségi nyilatkozat két feltételt tartalmaz vesszővel elválasztva.

Az első feltétel let temp = namekibont egy választható opciót, amely truea mi esetünkben visszatér , a második feltétel pedig azt temp.count> 0ellenőrzi, hogy a kibontott karakterlánc nem tartalmaz-e 0-nál több karaktert, ami falsea példánkban megadott értéknek felel meg.

Ezért a guard utasításban lévő utasítás végrehajtja azt az utasítást, print("Name is nil or an empty string. Cannot process")amely a Nulla értéket vagy üres karakterláncot adja ki. Nem lehet feldolgozni a konzolban, és a funkciót returnutasítással fejezi be.

érdekes cikkek...