Bu makalede, programınızın yürütme akışını kontrol etmek için guard deyimini kullanmayı öğreneceksiniz.
Swift If İfadesi, belirli koşula (boolean değer) göre eylemleri nasıl gerçekleştirebileceğinizi açıklar. Bu makalede, program akışını kontrol etmek ve daha basit ve temiz kod yazmak için guard ifadesinin if ifadesine göre faydalarını keşfedeceğiz.
Swift Guard Beyanı
Guard ifadesinin ana kullanımı, belirli koşullarda program kontrolünü kapsam dışına aktarmaktır. Bu ifadeler, ifadeleri belirli bir koşula (boolean değer) göre yürüten if ifadelerine benzer, ancak if'nin aksine, guard ifadeleri yalnızca belirli koşullar karşılanmadığında çalışır.
Ayrıca, koruma içindeki ifadeler kapsamdan çıkmalıdır. Bu nedenle, kullanıcı programı kontrol ifadelerine sahip return
, break
, continue
veya throw
bekçi deyimi sonunda.
Muhafız İfadesi Sözdizimi
guard ifadesi else (// ifadeler // bir kontrol ifadesi içermelidir: dönüş, kesme, devam etme veya atma.)
- Burada ifade bir boole ifadesidir (ya
true
da döndürürfalse
). - İfade değerlendirilirse
false
, kod bloğunun içindeki ifadelerguard
yürütülür. - İfade olarak değerlendirilirse
true
, kod bloğunun içindeki ifadelerguard
yürütmeden atlanır.
Koruma ifadesi nasıl çalışır?
Not: bekçi ifade neticede bir kontrol deyimi içermelidir return
, break
, continue
veya throw
.
Örnek 1: Guard ifadesi nasıl çalışır?
Basit bir geçerli koruma ifadesi aşağıdaki gibidir:
guard true else ( print("Condition not met") ) print("Condition met")
Programı çalıştırdığınızda, çıktı:
Koşul karşılandı
Yukarıdaki programda, koruma bir boole değeri true içerir (koşul karşılanmıştır). Koruma deyimleri yalnızca koşul karşılanmadığında çalıştığından, koruma içindeki ifade çalıştırılmaz. Bu yüzden print("Condition met")
çalıştırılır ve ekranda Karşılanan Koşulu çıktılar .
Şimdi koşulu yanlış olarak değiştirelim:
Örnek 2: guard ifadesi kapsamdan çıkmalı
guard false else ( print("Condition not met") ) print("Condition met")
Yukarıdaki programda koruma durumu olarak değerlendirilir false
. Yani, print("Condition not met")
else içindeki ifade yürütülmelidir. Ancak, 'koruma' gövdesinin düşmeyebileceğini söyleyen bir hata alırsınız , kapsamdan çıkmak için bir 'dönüş' veya 'fırlatma' kullanmayı düşünün.
Basit bir kelime araçlarında hata mesajı, kullanmakta bekçi ekstresinden programı kontrol aktarmak gerekir return
, break
, continue
veya throw
ifadeleri. Şimdilik kullanacağız return
. Ve return
ifade yalnızca bir işlevin içinde kullanılabildiğinden, yukarıdaki kodu Swift İşlevlerinde kaydıracağız.
Örnek 3: Bir işlev içindeki koruma ifadesi
Guard ifadesini Swift'deki bir işlevde şu şekilde kullanabiliriz:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Yukarıdaki programı çalıştırdığınızda, çıktı:
Koşul karşılanmadı İşlev çağrısından sonra Merhaba
Yukarıdaki programda, koruma koşulu değerlendirilir false
, bu nedenle korumanın içindeki ifadeler yürütülür . İlk ifadenin print("Condition not met")
çıkışları Durum karşılanmaması konsolda.
Ve ifade return
, bir işlevin yürütülmesini sonlandırır print("Hello, after function call")
ve işlev çağrısından sonraki ifade , konsoldaki işlev çağrısından sonra Hello çıktısını verir .
Örnek 4: İsteğe bağlı koruma
Swift Optionals'da if-let
isteğe bağlı bir paketin paketini açmak için kullanıldığını gördük . Bununla birlikte, if-let
tek bir avantajla isteğe bağlı bir paketin paketini açmak yerine koruma ifadesini de kullanabiliriz . İsteğe bağlı bir koruma ile sarmayı açmanın ana avantajı, sarmalanmamış if-let
değişkenin kapsamını artırabilmemizdir.
Bunu aşağıdaki örnekte görelim:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Yukarıdaki programı çalıştırdığınızda, çıktı:
İsim sıfır. İşlenemiyor
Yukarıdaki programda, sarılmamış temp değerinin guard ifadesiyle tanımlanan kapsam dışında kullanıldığını görebilirsiniz. Ad isteğe bağlı olarak tanımlandığından ve nil değeri içerdiğinden, guard deyimi değeri sarmada başarısız olur.
Yani, guard'ın içindeki ifadeler, Name is nil basan çalıştırır . İşlenemez çıktı ve birlikte işlev sonlandırır return
açıklamada. Yukarıdaki guard ifadesinin eşdeğer kodu if-else ifadesi şöyledir:
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()
Yukarıdaki iki ifade hem geçerlidir hem de aynı işi yapar. Ancak if-let ifadesini kullanarak sarılmamış değeri if-let ifadesinin dışında kullanamazsınız. Ancak guard ifadesiyle sarılmamış değeri işlev boyunca kullanabilirsiniz.
Örnek 5: Birden çok koşulla koruma
Koruma ifadeleri, aşağıdaki gibi virgülle (,) ayrılmış birden çok koşulu da zincirleyebilir:
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()
Yukarıdaki programı çalıştırdığınızda, çıktı:
Ad sıfır veya boş bir dizedir. İşlenemiyor
Yukarıdaki programda, koruma ifadesi virgülle ayrılmış iki koşul içerir.
İlk koşul , bizim durumumuzda let temp = name
dönen bir isteğe bağlı olanı açar true
ve ikinci koşul temp.count> 0
, sarmalanmamış dizenin false
örneğimizde değerlendirilen 0'dan fazla karaktere sahip olup olmadığını kontrol eder .
Bu nedenle, guard deyimi içindeki deyim print("Name is nil or an empty string. Cannot process")
, Name nil veya boş bir dizge çıktı veren bir deyimi yürütür . İşlenemez konsolda ve birlikte işlev sonlandırır return
açıklamada.