Swift'te if statement ve ternary operator

2020-02-07

Geliştirme yaparken farklı senaryolarda farklı durumları kontrol etmemiz gerektiği zamanlar olabilir. Örneğin iki farklı sayıdan biri diğerinden büyük mü diye kontrol ettiğimiz bir durumu düşünelim, sonuç ya doğru ya da yanlış olabilir. İşte tam da bu tarz durumlar için kullanışlı bir yapı Swift'te mevcut.

let buyukMu: Bool = true
let kucukMu: Bool = false

// "Type inference" sayesinde şöyle bir kullanım da mümkün
let buyukMu = true
let kucukMu = false

Doğrudan değer ataması yapmak yerine mesela bir sayı diğerine eşit mi-değil mi ya da büyük mü-küçük mü diye belirlemek için doğrudan sayıları da boolean operatörleri yardımıyla karşılaştırabiliriz.

let birIkiyeEsitMi = (1 == 2)
let birIkiyeEsitDegilMi = (1 != 2)
let birIkidenBuyukMu = (1 > 2)
let birIkidenKucukMu = (1 < 2)

Yukarıdaki operatörlere ve diğer bahsetmediklerime zaten aşina olduğunuzu düşündüğüm için daha fazla bu konunun üzerinde durmayacağım.

Bir şeyleri karşılaştırdıktan sonra bilgisayardan aksiyon almasını isteriz. İşte bu tarz durumlar için çoğunlukla if statement kullanırız.

if 2 > 1 {
    print("2, 1'den büyüktür.")
}

// 2, 1'den büyüktür!

Bazen şartın doğru olmadığı durumlarda aksiyon almak isteriz bunun için else clause kullanabilirz.

let hayvan = "Fil"

if hayvan == "Kedi" || hayvan == "Kopek" {
    print("Evcil hayvan.")
} else {
    print("Evcil bir hayvan değil.")
}

// Evcil bir hayvan değil.

Bazen de birden fazla durumu ardı ardına karşılaştırmak isteriz ve şartın ihtiyaçlarımızı karşıladığı durumda aksiyon almak isteriz.

let saat = 12
var vakit = ""

if saat < 6 {
    vakit = "Sabahın körü"
} else if saat < 12 {
    vakit = "Sabah"
} else if saat < 17 {
    vakit = "Öğle"
} else if saat < 20 {
    vakit = "Akşam"
} else if saat < 24 {
    vakit = "Geç saatler"
} else {
    vakit = "GEÇERSİZ BİR SAAT!"
}

print(vakit) // Öğle

Ternary operator

İki sayı arasından küçük olanı ve büyük olanı belirlemeye çalıştığımız örneğe tekrar dönelim. Bunu if statement ile hemen aşağıdaki gibi yapabilirdik.

let a = 5
let b = 10

let min: Int
let max: Int

if a < b {
    min = a
    max = b
} else {
    min = b
    max = a
}

Buna alternatif ve daha kısa bir söz dizimine sahip olan ternary operator kullanabiliriz. Söz konusu kontrol yapısını incelemek gerekirse en başta bir şart (koşul) aldığını görürüz. Eğer şart doğruysa soru işaretinden sonra gelen kod çalışır, değilse iki nokta üst üste işaretinden sonra gelen kod çalışır.

(<KOŞUL>) ? <KOŞUL DOĞRUYSA BURASI ÇALIŞACAK> : <YANLIŞSA BURASI ÇALIŞACAK>

Peki yukarıdaki problemi bize vadedilen daha kısa bir yolla nasıl çözerdik?

let a = 5
let b = 10

let min = a < b ? a : b
let max = a > b ? a : b

Bu arada iki sayı içerisinde büyük ve küçük olan değerleri bulmak çok yaygın bir işlem olduğu için, Swift'te sırf bu durum için kullanılan özel fonksiyonlar mevcut. Fonksiyonlara girmeden önce anlatmak istediğim diğer yapılar olduğu için konuyu şimdilik burada bırakalım.