Swift Switch Case ve Range

Merhaba arkadaşlar ,
mobilhanem.com sitemiz için anlattığımız/yayınladığımız Swift Dersleri serimize bu yazımızda Swift Switch Case ve Range ile devam edeceğiz. Bir önceki yazımızda Swift if ve Guard 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.

Başlamadan önce geçen haftaki yaptığımız bir örnekte mantıksal olarak bir hatanın varlığından bahsetmiştik.Bahsedilen mantıksal hata ise diplomaNotu ‘nun 0’dan düşük olduğu durumlarda bile “Mezun olmak için çok çalışman lazım” yazısı ekrana bastırılıyordu. Oysa diplomaNotu negatif bir değer alamaz bunu çözmek için , başka bir if bloğu oluşturarak diplomaNotu ‘nun 0’dan küçük değilse diye kontrol ederek bu bloğunun içerisine önceden yazdığımız if bloğunu alabiliriz tabiki bu yöntemin dışında bir sürü başka yöntem ilede bu mantıksal hatayı giderebiliriz 🙂

Swift Switch Nedir ?

Swift Switch yapıları bir değişkenin değerini alıp , bizim tarafımızdan belirlenen durumlar ile kıyaslar ve ilk eşleşen durumun sahip olduğu kod bloğunu çalıştırır. Switch yapıları if yapılarına çok benzerdir. if ile yaptığımız işlemleri switch ile rahatlıkla yapabiliriz. Switch yapılarında case yani durumlar bulunur. Switch keyword ‘ünün yanında ele alacağımız değişkenimizi yazıp ardından ele alacağımız durumları case keyword ‘ü ile durumlarımızı yazarız. Daha fazla uzatmadan hemen örnekle açıklayalım.

var kacinciGun = 1

switch kacinciGun {
case 1:
     print("Pazartesi Günündeyiz")
case 2:
     print("Salı Günündeyiz")
case 3:
     print("Çarşamba Günündeyiz")
case 4:
     print("Perşembe Günündeyiz")
case 5:
    print("Cuma Günündeyiz")
case 6:
    print("Cumartesi Günündeyiz")
case 7:
    print("Pazar Günündeyiz")
default:
     print("Haftada sadece 7 gün vardır.")
}

Yukarıdaki kod bloğunda kacinciGun isimli integer türünde değişkenimizi tanımladık ve değer olarak 1 atadık. Switch keyword ‘ümüzün yanında ele alacağımız değişkenimizi yani kacinciGun ‘ü yazdık böylelikle derleyicimize kacinciGun ‘ün alabileceği değerleri inceliyeceğiz dedik ve ardından  case yani durumlarımızda kacinciGun değişkenin alabileceği değerlerimizi girdik (1,2,3,4,5,6,7 ). Ve böylece kacinciGun ‘ün değeri case ‘lerimizden hangisiyle ilk olarak eşleştiyse o durumun altındaki işlemi yapar. Yani aynı case ‘i yazmamıza gerek yoktur çünkü ilk olarak hangisiyle eşleşirse o case ‘in bloğunda olan kodlarımızı çalıştırır.

Nedir Peki Bu Default ?

Print komutundan da anlayabileceğiniz gibi değişkenimizin değerleri case ‘lerimizden hiç biriyle eşleşmez ise bu default durumunun altındaki kod bloğu çalıştırılır. Ve swift bize bu default kısmını yazmamızı zorunlu kılmıştır. Her ihtimali göz önünde bulundursak bile default bloğunu yazmamız gerekmektedir ve bunun yanında default ‘un altında çalıştırılabilir bir komut yazmak durumundayız en basitinden bir print komutu ekleyebiliriz.

Swift Switch vs if

Yukarıda switch kullanarak yaptığımız işlemi if ile yapıp farkını görelim şimdide

if kacinciGun == 1 {
    print("Pazartesi Günündeyiz")
} else if kacinciGun == 2 {
    print("Salı Günündeyiz")
}else if kacinciGun == 3 {
    print("Çarşamba Günündeyiz")
}else if kacinciGun == 4 {
    print("Perşembe Günündeyiz")
}else if kacinciGun == 5 {
    print("Cuma Günündeyiz")
}else if kacinciGun == 6 {
    print("Cumartesi Günündeyiz")
}else if kacinciGun == 7 {
    print("Pazar Günündeyiz")
}

Yukarıda if kullanarak yaptığımız işlem switch ile yaptığımız işlemin aynısıdır . Nerede if nerede switch kullanılacağı sizin kontrolünüzdedir merak etmeyin zaman içinde bunu kolaylıkla yaptığınızı göreceksiniz 🙂

Swift Range

Range ‘in türkçe karşılığı aralıktır. Swift’te Range kullanmanın farklı yolları vardır .

1.Closed Range Operator

Gösterimi – sayı (üç nokta) sayı – şeklindedir -> 3…7 . Burada range ‘imiz 3 ile başlar 4,5,6 ile devam eder ve 7 ile son bulur. Yani 3 ve 7 bu aralığa dahildir.

2.Half-Open Range Operator

Gösterimi – sayı (iki nokta) < sayı – şeklindedir -> 3..<7 . Burada range ‘imiz 3 ile başlar 4,5 ile devam eder ve 6 ile son bulur. Yan, 3 bu aralığa dahilken 7 dahil değildir.

Küçük bir not , 3. bir yöntem olarak One-Sided Ranges vardır fakat bu yöntem diziler anlatıldıktan sonra anlatılacaktır.

var yurumeMesafesi = 1500

switch yurumeMesafesi {
case 0...300:
    print("Yürümeye üşenmeyin")
case 301...800:
    print("Biraz daha fazla yürüyebilirsiniz")
case 801..<2000:
    print("Yürümeyi sevdiğiniz nasılda belli :)")
default:
    print("Yürüme mesafeniz 0 ile 2000 arasında değildir")
}

Evet yukarıda öncelikle yurumeMesafesi isimli değişkenimizi oluşturduk ve 1500 değerini atadık ardından derleyicimize yurumeMesafesi değişkenimizin değerini inceleyeceğimizi söyledik. Ve sonra case ‘lerimizi yani olabilecek durumlarımızı söyledik önceki yaptıklarımızdan tek farkı bu örneğimizde aralık verdik . Bu işlemide iki değerin arasına (üç tane nokta) koyarak yaptık. Derleyicimiz yurumeMesafesi değişkeninin değerinin ilk duruma yani  case 0…300 ‘e uyup uymadığına bakar.Bu uygunluk işlemide  1500 ‘ün 0 ile 300 arasında olup olmaması ile ilgilidir. Eğer 1500 , 0 ile 300 arasında olsaydı bu duruma uyacaktı ve bu bloğa girip konsola “Yürümeye üşenmeyin” yazacaktı fakat bu aralığa girmediği için bir sonraki duruma (case 301…800) bakacak ve bu işlemi uymadığı taktirde sürekli tekrar edecektir . Bu işlem bütün koşullara uyup uymadığına bakana kadar devam edecektir eğer bütün koşullar denenmiş ve uygun aralık bulunamamışsa öncedende söylediğim gibi default bloğundaki kodu çalıştıracaktır. Peki yurumeMesafesi ‘nin değeri 2000 olsaydı hangi case ‘e uygun olacaktı ? Yorumlarınızı bekliyorum 🙂

Switch Case Birden Çok Durum

Elinizde farklı durumlar var fakat bu durumların bazılarında aynı işlemi mi yapıcaksınız ? Birazdan anlatıcağım sistemde tam sizin ihtiyacınızı gidericek bir yöntem. Switch case yapısında farklı koşullar altında farklı bir case yazmadan aynı işlemi rahatlıkla yaptırabilirsiniz ,

var isim = "rüya"

switch isim {
case "rüya",
     "RÜYA":
    isim = "Rüya"
    print("İsim 1.case'te düzeltildi. Düzelmiş hali = \(isim)")
case "rüyA",
     "RüyA":
    isim = "Rüya"
    print("İsim 2.case'te düzeltildi. Düzelmiş hali = \(isim)")
case "rÜYA":
    isim = "Rüya"
    print("İsim 3.case'te düzeltildi. Düzelmiş hali = \(isim)")
default:
    print("Hiç bir case'e uymadı. İsim düzeltilemedi \(isim)")
}

Yukarıda anlattığım işlemlerden farklı olarak burada tek bir case değilde birden çok case yazarak ele almamız. Ve bu işlemide normal olarak yazdığımız case ‘in sonuna , (virgül) koyup altına ve ya yanına (Hangisi gözünüze hoş gelirse) diğer case ‘imizi yazarak yapabiliriz . Dikkat edilmesi gereken hususlardan biriside case keyword ‘ümüzü tekrar tekrar yazmıyoruz onun yerine virgül kullanarak gerçekleştiriyoruz. Peki yukarıdaki kod ne yapıyor ?

isim adında bir değişken tanımladık ve bu değişkenimiz string türünde değeride “rüya” . ilk case ‘imiz isim ‘in değerinin “rüya” olması ve “RÜYA” olması . Eğer bu iki case ‘den birine uyuyor ise isim değişkenimizin değerini “Rüya” olarak düzeltiyoruz ve ekrana “İsim 1.case’te düzeltildi. Düzelmiş hali = \(isim)” yazısını bastırıyoruz. Kısacası girilmiş olan hatalı ismi bulup düzeltiyor ve hangi case ile eşleştiğini (hangi case’e uyduğunu) ekrana yazdırıyoruz .

Switch Case Where Kullanımı

Where keyword ‘ünü kullanarak case ‘lerimize ek olarak bir matematiksel bir koşul koyuyormuşuz gibi düşünebiliriz. Hem case ‘imiz sağlması hemde where keyword ‘ünden sonra yazdığımız koşul sağlanması gerekmektedir aksi taktirde o an denediği case ‘in altında yazan komutu çalıştırmaz ve bir sonraki case ‘e geçerek aynı işlemleri tekrarlar.

var havaSicakligi = -34

switch havaSicakligi {
case -50 ... -20 where havaSicakligi % 2 == 0:
    print("Hava çok soğuk! Derece Çift sayı")
case -19...0 where havaSicakligi % 2 == 0:
    print("Hava soğuk! Derece Çift sayı")
case 0...10 where havaSicakligi % 2 == 0:
    print("Hava fena değil. Derece Çift sayı")
case 10...30 where havaSicakligi % 2 == 0:
    print("Hava güzel. Derece Çift sayı")
default:
    print("Belirtilen aralıkta değil ve ya havaSciakligi Tek sayı")
}

Yukarıda havaSicakligi değişkenimizi yarattık ve -34 değerini atadık. İlk case ‘imizi inceleyelim , ilk olarak -50 … -20 ile yaptığımız işlem , havaSicakligi -50 ile -20 arasında olup olmadığını kontrol eder ve bu durum sağlanıyor ise where havaSicakligi % 2 == 0 işlemini yapar. Burada havaSicakligi ‘nın yüzde 2 sini alarak 0 ‘a eşit mi diye kontrol eder ve bu koşulda sağlanıyor ise altındaki print(“Hava çok soğuk! Derece Çift sayı”) komutunu çalıştırır ve switch yapısından çıkar eğer bunlardan biri bile sağlanmıyor ise bir sonraki case ‘e geçer ve bu işlemi devam ettirir.

 

Yapmış olduğumuz örneklerin tümünü burada bulabilirsiniz.

 

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.

Kaynak: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309

50

Taha Eren Buyruk

Başkent Üniversitesi Bilgisayar Mühendisliği.

5 Yorum

  • (bu durum sağlanıyor ise where havaSicakligi % 2 == 0 işlemini yapar )
    neden yapıyor anlamadım

    • İlk olarak havaSicakligi değişkeninin değerinin -50 … -20 arasında olup olmadığına bakmaktadır. Eğer sağlanmıyor ise where keywordünün sağlanıp sağlanmadığına bakmaz. Bu iki koşul ifadesi AND ile bağlanmıştır bu yüzden ilk koşul false olduktan sonra diğer koşulun ne değer döndürdüğü önemsizdir.
      true AND true = true
      false and false = false
      false and true = false
      true and false = false
      Yani AND ile bağlanmış olan koşulların sonucunun true olabilmesi için bütün koşulların true olamsı yani sağlanıyor olması gerekmektedir.

  • default komutunu çalıştıracaktır çünkü

    case 801 . . < 2000 koşuluna 2000 dahil değildir.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?