NEW: Learn SwiftUI with my free YouTube video series! >>

< Previous: Optionals (Seçimliler)   Next: Enumerations >

Optional chaining (Optional zincirleme)

Optional'larla çalışırken kendimizi biraz acemi hissederiz bazen ve açmalar (unwrapping), kontrol etmeler o kadar büyük bir yük haline gelir ki, çalışmaya devam edebilmek için birkaç tane ünlem işareti fırlatmak gelir içimizden. Siz yine de dikkatli olun: Eğer bir değer içermeyen bir optional'ı açmaya zorlarsanız, yazdığınız kod çöker.

Swift dili, kodunuzdaki karmaşayı azaltmaya yardım etmek için iki tekniğe sahiptir. İlkinin adı, sadece optional'ınızın bir değeri varsa kodunuzun çalışmasına izin veren Optional Chaining'tir. Alttaki kodu oyun alanınıza girin ve başlayalım:

func albumReleased(year: Int) -> String? {
    switch year {
    case 2006: return "Taylor Swift"
    case 2008: return "Fearless"
    case 2010: return "Speak Now"
    case 2012: return "Red"
    case 2014: return "1989"
    default: return nil
    }
}

let album = albumReleased(year: 2006)
print("The album is \(album)")

Bu kod sonuç paneline "The album is Optional("Taylor Swift")" yazdıracaktır.

Eğer albumReleased() fonksiyonunun döndürdüğü değeri büyük harf olarak ("Taylor Swift" yerine "TAYLOR SWIFT") değiştirmek isteseydik, bu String'in uppercased() metodunu çağırırdık. Örneğin:

let str = "Hello world"
print(str.uppercased())

Sorun ise, albumReleased() fonksiyonunun optional bir String döndürmesidir: Bir String döndürebilir de, hiçbir şey döndürmeyebilir de. Söylemek istediğimiz şey şu: "Eğer bir String dönüyorsa büyük harflere dönüştür, aksi taktirde birşey yapma." İşte burada söze optional chaining giriyor, çünkü kendisi tam da bu şekilde davranıyor.

Kodunuzun son iki satırını, aşağıdaki gibi değiştirmeyi deneyin:

let album = albumReleased(year: 2006)?.uppercased()
print("The album is \(album)")

Optional chaining yapan soru işaretine dikkat edin: Bu soru işaretinden sonra gelen her şey çalışacak, ama tabi soru işaretinden öncekiler bir değer içeriyorsa. Bu, album değişkeninin veri tipini etkilemez, çünkü bu kod satırı ya nil değerini döndürecek, ya da albümün adının büyük harfli versiyonunu; sonuçta hala optional bir String.

Optional chaining istediğiniz kadar uzun olabilir. Örneğin:

let album = albumReleased(year: 2006)?.someOptionalValue?.someOtherOptionalValue?.whatever

Swift, bir noktada duracağı nil değerini bulana kadar soldan sağa hepsini kontrol eder.

nil değeri birleştirme operatörü (nil coalescing operator)

Swift'in bu özelliği basit görünmesine rağmen, kodunuzu daha basit ve daha güvenli hale getirir. Bakmayın siz birçok insanı korkutan görkemli ismine. Bu bir ayıptır, çünkü ne olduğunu anlamak için zaman ayırırsanız, nil değeri birleştirme operatörünün hayatınızı ne kadar çok kolaylaştıracağını göreceksiniz!

Yaptığı şey hakkında şöyle söyleyebiliriz: "Mümkünse A değerini kullan, ama A değeri nil ise, o zaman B değerini kullan." Bu kadar işte. Özellikle optional'larla birlikte çok kullanışlıdır, çünkü non-optional (seçimli olmayan) B değerini verdiğiniz için, onları optional olmaktan etkili bir şekilde kurtarır. Yani, eğer A bir optional ise ve bir değere sahipse, onu kullanacaktır (çünkü bir değerimiz var). Ama eğer A kendisi varken ama bir değere sahip değilse, B kullanılacaktır (hala bir değere sahibiz). Her halükarda, kesinlikle bir değere sahibiz.

Daha gerçekçi bir durum vermek için, aşağıdaki kodu oyun alanınızda deneyin:

let album = albumReleased(year: 2006) ?? "unknown"
print("The album is \(album)")

Bu bir çift soru işareti, nil birleştirme operatörüdür ve buradaki anlamı "albumReleased() fonksiyonu bir değer döndürürse, onu album değişkenine yerleştir. Ama eğer albumReleased() fonksiyonu herhangi bir değer döndürmezse, dönen nil değeri yerine 'unknown' (bilinmeyen) değerini kullan."

Eğer şimdi sonuç paneline bakarsanız, "The album is Taylor Swift" yazdığını göreceksiniz; artık Optional ifadesi yok. Bu şekilde yazdırmasının sebebi, Swift'in artık fonksiyonun döndüreceği ister bir değer olsun, isterse 'unknown' olsun, gerçek bir şey alabileceğinden emin olmasıdır. Bunun anlamı, herhangi bir şeyi açmanıza gerek olmadığı, dolayısıyla da çökme riskinin olmadığıdır. Kodunuzu daha güvenli ve çalışması daha kolay bir hale getiren gerçek bir veriye sahip olduğunuz artık kesin.

LEARN SWIFTUI FOR FREE I wrote a massive, free SwiftUI tutorial collection, and also have a growing list of free SwiftUI tutorials on YouTube – get started today!

< Previous: Optionals (Seçimliler)   Next: Enumerations >
MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let me know!

Click here to visit the Hacking with Swift store >>