iOS: fatalError - Never ve Sistem Tasarımı

iOS #23Yazılım #31

Suat Karakuşoğlu yazdı.

İçerik

Merhabalar, geçenlerde sektörün duayenlerinden Richard Stallman’e birisinin sorduğu soruya nasıl cevap verdiği ilgimi çekmişti.

Bu zamana kadar büyük kurguları ve sistemleri tasarladınız, bir probleme nasıl yaklaşıyorsunuz diye sorulduğunda: Stallman istenen fonksiyonların ilk tanımlarını yazarım içleri boş bir şekilde sonrada yavaş yavaş gerçeklerim diye bir cevap veriyor.

Bu tabi şu anda bir servis’i tasarlamadan önce interface’i düşünmekle çok paralel bir cevap.

Aslında topdown yaklaşım ile sistemsel uzamları yukarıdan gördükten sonra çözümün örgüsünü implementasyonlar ile bottom-up olarak yazmak. Her iki yaklaşımı tatbik etmek sağlıklı bir çözümün en önemli anahtarları.

Bu yaklaşıma yazılım dillerinde fonksiyon ve class seviyesinde yardımcı olucak bazı yöntemler mevcut.

Python dilinde direkt pass keyword’u ile dil’i memnun edebiliyorsunuz.

  class Person:
     def work(self):
        # Bu anahtar kelime icerisini by-pass gecmenize yardimci oluyor
        pass

Dinamik dillerde bu biraz daha basit olarak bir keyword ile gerçeklenebiliyor.

Swift gibi static dillerde derleme zamanında compiler’i memnun etmemiz gerekiyor.

  func createEmployee(name: String, credentials: [Credential]) -> Employee {
      // İşçi yaratma mantığını şu anda yazmadım bu nedenle compiler projemizi derletmeyecektir.
  }

Never Tipi nedir ve ne işimize yarar bu durumda?

Never tipi bir Bottom tiptir. Bu basit anlamda class hiyerarşisinde her zaman altta olan, dolayısı ile her dönüş değeri yerine kullanabilecek bir veri tipi anlamına gelir.

fatalError bu işin neresinde?

fatalError fonksiyonu ise Never tipi dönen bir fonksiyondur. Dolayısı ile herhangi implementasyonu henüz olmayan bir fonksiyon için çağırılabilecek bir placeholder fonksiyon görevi görebilir. Bu sayede compiler memnun bir şekilde hayatına devam eder, çünkü fatalError’un döndüğü Never bottom tip dönüş değeri için yeterlidir.

  func createEmployee(name: String, credentials: [Credential]) -> Employee {
      // Burada fırlattığınız hata ile ne yapmadığınızı bilebilirsiniz.
      // Bu kod artık derlenebilecektir.
      fatalError("Create employee first.")
  }

Nelere dikkat etmeliyiz?

fatalError fonksiyonun bu yalnızca bir kullanım durumudur. Normalde uygulamanın hiç girmemesi gereken durumlarda bu fonksiyonu çağırabilmektesiniz. Ancak bu fonksiyonun direkt olarak uygulamayı crash ettireceğini bilmelisiniz.

O nedenle production’da elinizin en son gitmesi gereken, çaresiz kaldığınızda kullanmanız gereken bir fonksiyondur.

Ancak geliştirme aşamasında bu bahsettiğimiz kullanımı ile sizin elinizde sisteminizi tasarlarken yardımcı bir araç görevi görecektir.

Kaynakca