İçeriğe geç

Swift #1 – if & guard

IOS Developer Yolculuğum #1

if

Swift içerisinde bir değişkeni oluştururken optional denilen bir tanım bulunmaktadır. Aşağıdaki kodda name değişkeninin tipini belirtirken String? kullandık. Buradaki soru işareti değişkenin string bir değere sahip olabileceğini vurgulamaktadır. Ancak string olmayabilir nil de olabilir.  Ayrıca soru işaretini kaldırsaydık bu değişkene atanacak değerin kesinlikle string olacağına emin olduğumuzu belirtebilirdik. Fakat bunu yapmak bazı durumlarda mantıklı değildir. Eğer değişken içerisinde bir şekilde nil değer olursa bu uygulamamızın çökmesine neden olacaktır.

var name : String? = "baybars"

func printName() {
    if let name = name {
        print("Name: \(name)")
    } else {
        print("name not nullable")
    }
}

printName()

Örnek olarak şöyle bir senaryo düşünebiliriz. Kullanıcıdan almamız gereken bir isim var kullanıcı isim alanını boş bıraktı ve onayla butonuna tıkladı. Uygulamamızın hata vermemesi için if let yapısını kullanmamız gerekmektedir. if let yapımızın mantığı şu şekildedir. Eğer name değişkeni nil değilse if içerisine girecektir ve print olarak ekrana “Name: baybars” yazdıracaktır. Eğer nil ise else bloğumuz çalışacak ve “name not nullable” hatasını verecektir. (NOT: “if let name” burada bulunan name kontrol edeceğimiz değişken adı ile aynı olmak zorunda değildir.)

guard

Swift içerisinde if dışında guard adında bir değer kontrol yapısı daha bulunmaktadır. Aslında değer kontrolden ziyade şart kontrol diyebiliriz. Guard if’in aksine içerisine yazacağımız şart gerçekleşmezse alacağımız aksiyonları belirlediğimiz bir yapıdır. Yukarıda bulunan örneğin aynısı guard let yapısı ile aşağıda bulunmaktadır. Buradaki guard let mantığı şu şekildedir. Kodumuzda guard let name = name buraya kadar if ile aynı kontrolü yapmaktadır. Fakat daha sonra gelen else verdiğimiz şartın tam aksi olduğunda ne yapacağım demek istemektedir. Eğer name alanı nil gelirse guard let bloğunun içine girecektir ve “name not nullable” hatasını verecektir. Burada ekstra olarak return kullanmamız gerekir. Bunun amacı guard let bloğundan sonra gelen kodları çalıştırmadan fonksiyonumuzu sonlandırmaktır. Guard let içerisinde return kullanmak zorunludur aksi taktirde guard let kullanmanın bir amacı kalmaz. Kodumuzu uyarı mesajını verse de alt da bulunan kodları da çalıştırmayı deneyecektir ve bu durum uygulamamızı çökertecektir.

var name : String? = "baybars"

func printName() {
    guard let name = name else {
        print("name not nullable")
        return
    }
    print("Name: \(name)")
}

printName()

Guard yapısını aslında geri değer döndüren bir fonksiyonda kullanmak daha mantıklıdır. Aşağıdaki kodda isEven adında bir fonksiyon tanımladık. İçerisinde Int tipinde bir değişken almasını istedik ve geriye Bool (true, false) tipinde değer döndürmesini söyledik. Fonksiyon içerisine parametre olarak 1 gönderdiğimizde guard yapımıza girecek ve 1 % 2 değeri 0’a eşit olmadığı için else bloğunu çalıştıracaktır. Eğer bu fonksiyona 2 parametresini gönderseydik guard bloğunu atlayarak true değerini döndürmüş olacaktı. Sonuç olarak guard içerisine girdiğimiz şart sağlanmaz ise ne yapacağımızı belirlememize yaramaktadır.

func isEven(number: Int) ->Bool {
    guard number % 2 == 0 else {
        return false
    }
    return true
}

print(isEven(number: 1))

Kategori:IOS Developer YolculuğuSwift

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.