Merhaba arkadaşlar ,
mobilhanem.com sitemiz için anlattığımız/yayınladığımız Swift Dersleri serimize bu yazımızda Swift İf ve Guard ile devam edeceğiz. Bir önceki yazımızda Swift String ve Character konusundan bahsetmiştik. Bu derse başlamadan önce xcode’u kurmak ve playground üzerinde swift kodu yazabilmek için bu dersimizi okumanızı tavsiye ederim.
Swift if Kullanımı
Önceki derlerimizde az da olsa if yapılarını kullanmıştık . Swift if yapıları oldukça basittir.Peki if ne demektir ? if ingilizce bir kelime olup türkçe karşılığı “eğer” dir. if yapısı, programlama dillerinde belirtilen herhangi bir koşulun doğruluğunu kontrol etmek için kullanılır. Belirtilen koşul sağlanıyor ise true değeri döner ve if bloğu çalıştırılır, eğer belirtilen koşul sağlanmıyor ise false değeri döner ve if bloğu çalıştırılmaz. Örnek olarak hepimiz en azından bir kere kullandığımız bir cümle olan , ‘eğer hava güneşli olursa dışarı çıkacağım’ cümlesini swift dilinde aşağıdaki kod ile yazabiliriz.
var havaGunesli = true if havaGunesli { print("Dışarı çıkacağım") }
havaGunesli diye boolean bir değişken tanımladık ve değerini true yaptık. Ardından bunu if yapısına eklediğimizde yukarıdaki cümlenin kod olarak karşılığını bulmuş olduk. havaGunesli değişkeni true olursa konsollara “dışarı çıkacağım” yazdırılıyor. Peki havaGunesli değişkeninin false olma durumunda yazdığımız kod ne yapar ? false olma durumunu belirtmediğimiz için hiç bir şey yapmaz .
Swift if – Else Kullanımı
Havanın güneşli olmama ihtimalide olduğu için kodumuza bu durumu kapsayacak şekilde düzenleyelim.
if havaGunesli { print("Dışarı çıkacağım") } else { print("Dışarı çıkmayacağım") }
Peki bu else nedir ? else’in burdaki anlamı ‘eğer havaGünesli’nin değeri true değil ise else bloğunu çalıştır’dır. if yapılarını boolean değerlerin dışındada kullanabiliriz. Örneğin ,
var benimYasim = 24 if benimYasim == 24 { print("Benim yaşım \(benimYasim)") }
Küçük bir not , == operatörü eşitliği kontrol eder.Örneğin 23 == 24 dediğimizde 23 , 24’e eşitmi demiş oluruz.
Integer türünde benimYasim adında bir değişken tanımladık ve değerini 24 yaptık.Yukarıdaki kod bloğunda demek istediğimiz , “benimYasim’ın değeri 24 ise (true döner) , ekrana “Benim yaşım \(benimYasim)” ‘ı yazdır”dır. Ve benimYasim değişkeninin değeri 24 olduğundan dolayı kod bloğumuz ekrana “Benim yaşım 24” yazar. Tabi ki sadece bu kadar değil , else yapılarını biraz daha etkin kullanmaya başlayabiliriz.
Swift if Else-if Kullanımı
if benimYasim == 23 { print("Benim yaşım 23") } else if benimYasim == 24 { print("Benim yaşım 24") }
Yukarıda yapılan işlemin karşılığı , benimYasim ‘ın değeri 23 ise print(“Benim yaşım 23”) komutunu çalıştır , benimYasim‘ın değeri 23 değilse ve eğer benimYasim‘ın değeri 24 ise print(“Benim yaşım 24”) komutunu çalıştır ‘dır. Burada ki önemli olan nokta else if yapısını yan yana yazmamızdır. else if ‘in çalışma mantığı ise yukarıdaki if konuşulunu sağlamamışsa ve kendi koşulunu sağlıyor ise çalıştırılır. Yukarıdaki örnek için benimYasim değerimiz 24’tür ve ilk if bloğunu sağlamaz çünkü 23 , 24’e eşit değildir, ve ardından else if bloğuna gelir ve yukarıdaki if bloğuna girmediği için benimYasim değerinin 24’e eşit olup olmadığı bakar ve sağlıyor ise o bloğun içine girerek yazılmış olan komutları çalıştırır.
Swift if Else-if Else
Buraya kadar her şey tamam ise bir başka örneğimize geçelim. Şimdi ise diploma notunu ele alan bir kod bloğu yazalım ,
var diplomaNotu = 3.7 if diplomaNotu < 2.0 { print("Mezun olmak için çok çalışman lazım") } else if diplomaNotu <= 2.5 { print("Mezun olabilirsin ama çalışman lazım") } else if diplomaNotu <= 3.0 { print("Fena değilsin") } else if diplomaNotu <= 3.5 { print("Bravo tebrik ederim :)") } else if diplomaNotu <= 4.0 { print("Çok iyisin !!") } else { print("Bizi Kandırma , 4.0'ın üstünde olamaz..") }
İlk olarak diplomaNotu değişkenimizi oluşturduk ve değerini 3.7 ‘ye eşitledik. Ve if bloklarımız ile bu değerin hangi aralıkta olduğunu bulmaya çalıştık. İlk olarak diplomaNotu 2.0’dan küçük mü diye baktık ve eğer küçük ise “Mezun olmak için çok çalışman lazım” yazısını ekranımıza bastırdık. Ardından eğer diplomaNotu 2.0 ‘ın üstündeyse (Yani ilk if bloğuna girmemişse bir başka deyişle sağlamamışsa) bu sefer 2.5’ten küçük mü ? diye baktık eğer küçük ise (true döner) ekranımıza “Mezun olabilirsin ama çalışman lazım” yazısını bastırdık eğer bu koşul sağlanıyor ise diplomaNotu 2.0 ile 2.5 arasında olduğunu anlayabiliriz (dikkat 2.5’te dahildir bu aralığa) Bu şekilde devam ederek hangi aralıkta olduğunu if , else if ile bulabiliyoruz.
Peki en sonraki else neyin nesidir ? En sonda yazdığımız else yukarıda yazdığımız durumların hiç birine girmiyor ise en sondaki else bloğuna girer ve kontrolu sağlamış oluruz. Yukarıdaki kod bloğunda mantıksal olarak bir hata var , bu hatayı bularak yorum kısmında belirtebilirsiniz eğer bulamaz iseniz bir sonraki yazıyı bekleyip görebilirsiniz.
if Yapısında Mantıksal İfadelerin Kullanımı
Mantıksal ifadeler derken and , or , eşit mi ? , küçük mü ? , büyük mü ? , eşit değil mi ? , küçük eşit mi ? , büyük eşit mi ? operatörlerini kastediyorum. Öncelikle bunların swift dilindeki karşılıklarını öğrenmeliyiz aşağıdaki görsele bakarak rahatlıkla görebilirsiniz.
Anlamlarını öğrendik ama klavyemizde nasıl yapabiliriz ? Aşağıdaki görselde tam olarak nasıl yapılabildikleri açıklanmıştır.
Devam etmeden önce And , Or bağlaçlarının sonuçlarını bilmiyorsanız aşağıdaki görselden öğrenebilirsiniz,
Evet bunlarıda öğrendikten sonra bunları biraz uygulayalım ,
var paranVarMi = true var uykunVarMi = false if paranVarMi == true && uykunVarMi == false { print("O zaman dışarıya çıkabilirsin") } else if paranVarMi == true && uykunVarMi == true { print("Biraz uyu ondan sonra dışarıya çık") } else if paranVarMi == false && uykunVarMi == true { print("Biraz para kazan ve uyu") } else if paranVarMi == false && uykunVarMi == false { print("Biraz para kazan") }
paranVarMi ve uykunVarMi isminde boolean türündeki değişkenlerimizi oluşturduk . Önceki örneklere göre bu örneğimizde farklı olan şey koşul olarak iki tane farklı koşul yazmamızdır.Koşul kısmına mantık çerçevesi içinde koşullar yazılabilir. Buradaki örnekte iki koşulumuzu Ve(And) bağlacı ile bağladık bu demek oluyor ki ilk koşulumuzun sonucu true olacak ve ikinci koşulumuzun sonucuda true olacak ki if koşulumuz sağlansın ve bloğun içerisine girsin. And bağlacı ile bağladığımız için iki koşulunda true olması gerekmektedir.Aynı And bağlacının kullanıldığı gibi or , küçük mü ? , büyük mü ? gibi koşullarıda birden fazla şekilde koşulları yazabilirsiniz.
Swift Guard
Guard yapıları if yapılarına çok benzer. Aynı if yapılarındaki gibi ardından gelen bir ifade(koşul) bulunur ve o koşula göre true veya false değeri döner ve dönen ifadeye göre işlem yapılır. Ayrıldıkları noktalardan biri ise guard hatayı başta yakalar .Koşul sağlanmıyor ise hemen else bloğuna girer if yapısında sağlanıyor ise hemen if bloğuna girer ve else bloğuna girmez. Guard kullanmak yazdığınız kodun okunabilirliğini arttırır. Guard yapısını fonksiyonların içinde kullanabiliriz. Fonksiyonlar ilerleyen derslerimizde detaylı olarak anlatılacaktır. Aşağıda basit bir fonksiyon vardır ve bu fonksiyon parametre olarak integer türünde bir değer alır ve o değeri fonksiyonun içinde işlemlere tabi tutar (biz ne yapmasını istediysek tabi 🙂 ).
func sifirdanBuyukMu(x: Int) { guard x > 0 else { print("\(x) , Sıfırdan küçük") return } print("\(x) , Sıfırdan büyük") } sifirdanBuyukMu(x: -1)
Yukarıda fonksiyonumuzun tanımlanmış ve paremetre olarak gelen değişkenimizin 0’dan büyük olup olmamasını değerlendirmiş ve büyükse print(“\(x) , Sıfırdan büyük”) komutunu , küçük ise print(“\(x) , Sıfırdan küçük”) komutunu çalıştırmasını söylemiştir. if yapılarının aksine guard yapılarında mutlaka else bloğu olmak zorundadır. Guard keywordunun arkasından koşulumuz gelmektedir eğer bu yazdığımız koşulumuz sağlanmıyor ise else bloğuna girip orda hangi işlemleri yaptırdıysak sadece o işlemleri yapar. Eğer sağlanmış ise else bloğuna hiç girmez ve else bloğunun bittiği yerden devam eder. Fonksiyonumuz çağırılırken x değerine -1 değeri verilmiş ve x>0 koşulumuzu sağlamadığı için else bloğuna girip “-1 , Sıfırdan küçük” yazısını ekrana bastırır. Eğer x değişkenimizi 1 olarak yazsaydık else bloğuna girmeyip “1 , Sıfırdan büyük” yazısını ekrana bastıracaktı. Aynı if yapısında olduğu gibi guard ilede koşulların arasına virgül(,) koyarak birden fazla koşulu kontrol edebiliriz(Tabiki bütün koşulların sağlanması(true) gerekmektedir.)
Peki guard’ı sadece fonksiyon içerisinde mi kullanırız ? Yaygın olarak fonksiyonların içerisinde kullanılmasına karşın fonksiyonların dışındada aşağıdaki şekilde kullanabiliriz,
var yas = 80 guard yas > 200 else { print("Yaşadığınıza emin misiniz ??") throw NSError() } print("\(yas) yaşındasınız")
yas isminde integer türünde bir değişken tanımladık ve bu değişkenimizin değerini 80 olarak belirledik.Yukarıda 200 yaşından büyük bir insanın yaşamadığını varsaydım ve eğer yas değişkeni 200 veya daha büyük ise ekrana “Yaşadığınıza emin misiniz ??” yazısını bastırma komutunu yazdım.Eğer yas değişkeni 200 den küçükse “\(yas) yaşındasınız” yazısını bastırdım (\(yas) yerine girilen yaş bastırılır). Guard konusu ilerleyen zamanlarda Optionals dersimizde anlatılacaktır.
Neden Return ve Throw Kullanıyoruz ?
if yapısının aksine guard‘da else kısmından normal akışsal çıkış yapılamamaktadır ve bu yüzden return, throw, break, continue gibi keywordler ile programın akışını kendimiz başka yere yönlendiriyoruz bu komutlar daha sonraki derslerimizde detaylı olarak anlatılacaktır.
Konuyla ilgili yorumlarınızı konu altından yapabilir, sorularınızı sorucevap.mobilhanem.com adresinden ve konu altından sorabilirsiniz.
Swift Eğitimleri serimizdeki tüm derslerin listesine buradan ulaşabilirsiniz.
56
Merhaba yine ben 🙂 son guard kod örneğinde throw’ un yanına NSError() yazdığımda “Use of unresolved identifier ‘NSError’ ” hatası alıyorum. Bu NSError nedir ve neden hata veriyor?
Merhaba
Asagidaki kod da eger yas 200 den buyuk degil ise “Yaşadığınıza emin misiniz ??” yazisini ekrana bastiriyoruz diye anliyorum ben. Yanlis miyim?
var yas = 80
guard yas > 200 else {
print(“Yaşadığınıza emin misiniz ??”)
throw NSError()
}
print(“\(yas) yaşındasınız”)
bence diplomaNotu adlı kodumuzda ki mantık hatası diplomaNotu’nun 2.3 olduğunu düşünelim normalde çalışmasını beklediğimiz kod satırı
else if diplomaNotu <= 2.5 {
print("Mezun olabilirsin ama çalışman lazım")}
Ama 2.3 değeri else if diplomaNotu <= 3.0 bu değeride sağlıyor.
else if diplomaNotu <= 3.5 bu değeride sağlıyor.
else if diplomaNotu <= 4.0 bu değeride sağlıyor.
Normalde tek bir koşulu sağlaması gerekirsen birden fazla koşulu aynı anda sağlıyor.