iOS – Swift Dersleri (Tuples, Optionals, Error Handling)

Java Kotlin Eğitimi

Merhaba Arkadaşlar,
Swift paylaşımlarımıza kaldığımız yerden devam ediyoruz. Bu paylaşımımızda birden fazla bileşenden oluşan tuples veri yapısını, optionals özelliğini ve hataları yönetmede kullanabileceğimiz error handling konularına değineceğiz.

Tuples

Tuples kavramını birden fazla bileşene sahip olan veri yapısı olarak düşünebiliriz. Tuples’ı oluşturan değerler aynı tip olmak zorunda değildir. Birbirinden farklı tipteki değerlerin birarada bulunabildiği birleşik yapılardır. Aşağıdaki örnekteki tuple, HTTP kod ve açıklamasını ifade ediyor.

(404, “Bulunamadı”) tuples yapısı http dönüş değeri olan bir Int ve bu dönüş değerinin açıklaması olan bir String değerini gruplar. “Int ve String tuples’i” şeklinde ifade edilir.

Herhangi bir tuples yaratmak için herhangi tipteki değerlerden istediğimiz sayıda kullanarak gruplama yapabiliriz. (Int, Int, Int) veya (String, Bool) şeklinde gruplama yapmamız mümkündür.

Tuples’daki değerleri aşağıdaki şekilde ayırıp kullanabiliriz:

Tuples’daki değerleri ayırırken sadece belirli değerlere ihtiyacımız var ise aşağıdaki şekilde ihtiyacımız olmayanları (_) alttan çizgi ile belirterek önemsemeyebiliriz.

Alternatif olarak sıfırdan başlayacak şekilde her bir elemana indeks numarası ile ulaşabiliriz. Herhangi bir değişkene atama yapmamıza gerek kalmaz.

Tuples’daki bileşenleri isimlendirip, bu bileşenlere ulaşmak istediğimizde de kendi isimlerini kullanarak ulaşabiliriz.

Tuples konusunda benim ben en beğendiğim özellik swift’te fonksiyonların tuples dönebiliyor olması. Objective-C ve diğer çoğu dilde fonksiyonlar tek bir değer dönebilir. Diğer dillerde fonksiyonların birden fazla değer dönmesini sağlamak istersek istediğimiz değişkenleri içeren başka bir sınıf ya da enumaration gibi bir yapı oluşturmamız gerekir. Swift’te bir fonksiyonun dönüş değerini tuples olarak ayarlarsak birden fazla değer dönmesini sağlayabiliriz.

Örnek olarak bir Int tipindeki dizinin en büyük ve en küçük elemanını dönen aşağıdaki fonksiyonu inceleyelim:

Optionals

Optional’ları bir değerin “olmama”, başka bir deyişle “boş olma” durumunda kullanırız. Optional’lar bize şunu ifade eder:

Bir değer vardır ve X’e eşittir,
ya da
Bir değer yoktur.

Optional’ları aşağıdaki örneği inceleyerek daha iyi anlayabiliriz. Bir String değerini Int değerine çevirelim. Fakat her String değeri Int değerine çevrilemeyebilir. “123” String’i Int’e çevrilebilirken, “Merhaba Dünya” String’i Int’e çevrilemez. Bu gibi bir durumda initializer’in hata almaması için optional kullanmamız gerekir:

Burada Int fonksiyonu “Int” yerine “optional Int” döner. “Optional Int” “Int?” olarak yazılır. Sonundaki soru işareti bize değerin ya bir integer değere sahip olduğunu ya da herhangi bir değere sahip olmadığını ifade eder. (Herhangi bir Bool ya da String değere sahip olamaz, ya Int değere sahip olur, ya da hiçbir değere sahip olmaz.)

Optional’ı aşağıdaki şekilde nil yapabiliriz.

Optional’a hiçbir değeri atamadan otomatik olarak nil olmasını sağlayabiliriz.

Not:
Swift’teki nil ile Objective-C’deki nil aynı şeyler değildir. Objective-C’de nil olmayan bir objeyi gösteren bir pointer iken Swift’teki nil bir pointer değil, bir tipin değerinin olmamasıdır. Sadece object tiplerinin değil, herhangi bir tipin optional’ı nil olabilir.

Optional’ın değere sahip olup olmadığını if kontrolü ile anlayabiliriz. Optional’ın değere sahip olduğundan emin olduğumuzda optional’ın değerine sonuna ünlem işareti koyarak ulaşabiliriz. Bu ünlem bize “bu bir optional’dır ve bir değere sahiptir ve onu kullan” anlamına gelir.

If ya da while statement içinde optional binding yaparak da optional’in değere sahip olup olmadığını anlayabiliriz:

Error Handling

Runtime’da alma ihtimalimiz olan hata’ları kontrol altında tutmamıza yarayan bir yapıdır. Herhangi bir hatanın neden alındığını anlayabilir, bu hata durumunu istediğimiz şekilde yönetebiliriz.

Bir fonksiyon çalışırken hata alırsa bir hata fırlatır. Bu fonksiyonu çağıran yerde bu hata yakalanabilir ve hataya göre aksiyon alınabilir.

throws ifadesi bu fonksiyonun hata durumunda hata fırlatacağını belirtir. Bu fonksiyonu çağırdığımız yerde do-try-catch bloğu kullanarak bu hatayı yakalayabiliriz. Yakalamazsak uygulamamız crash olacaktır.

Aşağıdaki örneği inceleyecek olursa;
sandvicYap() fonksiyonu temiz bulaşık yok ise veya malzeme yok ise hata fırlatıyor. sandvicYap() fonksiyonu hata almaz ise sandvicYe() fonksiyonu çalışır ve kod sonlanır. sandvicYap() fonksiyonu temiz bulaşık olmaması nedeniyle hata alırsa Error.TemizBulasikYok hatası fırlatılır ve bu hata catch Error.TemizBulasikYok ile yakalanır, bulasiklariYika() çalışır. Benzer şekilde sandvicYap() fonksiyonu malzeme olmaması nedeniyle hata alırsa Error.MalzemeYok hatası fırlatılır ve bu hata catch Error.MalzemeYok ile yakalanır, satınAl(malzemeler) fonksiyonu çalışır. Herhangi bir hata durumunda sandvicYe() fonksiyonu çalışamaz.

Bu paylaşımımızda Tuples yapısına, fonksiyonların dönüş tipinin tuples olabileceğine, Optional’ları ne olduğu ve nasıl kullanıldığına ve hata durumlarını nasıl kontrol edebileceğimize değinmeye çalıştık. Mobilhanem‘de Swift paylaşımlarına devam edeceğiz. Bizi takipte kalın.

Swift ile ilgili tüm paylaşımlarımıza buradan ulaşabilirsiniz.

iOS – Swift Dersleri (String, Character)

Kaynak: developer.apple.com

Aycan Ayhan

1 Yorum

Haftalık Bülten

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