ProgramlamaiOS geliştirici

Swift'te type inference (tip tahmini) mekanizması nasıl çalışır ve örtük tipler kullanıldığında hangi sorunlar ortaya çıkabilir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Swift'in güçlü bir tip tahmini mekanizması vardır — bu, derleyicinin programcı tarafından açıkça belirtilmeden bir değerin tipini otomatik olarak belirlemesine olanak tanır. Tip tahmini kodu kolaylaştırır ve "gürültüsünü" azaltır. Örneğin:

let number = 42 // Int olarak tahmin edildi let name = "John" // String olarak tahmin edildi let items = [1, 2, 3] // [Int] olarak tahmin edildi

Ancak, bazı nüansları unutmamak önemlidir:

  • Tip tahmini, değer veya başlatıcı (örneğin, koleksiyon boşsa) değiştiğinde değişebilir.
  • Örtük tipler, farklı tipteki değerleri birleştirirken beklenmedik hatalara yol açabilir.
  • Bazen tip tahmini, karmaşık genel tipler kullanıldığında okunabilirliği ve hata ayıklamayı zorlaştırır.

Kandırmaca soru

let emptyArray = [] ifadesiyle bir değişken tanımlarsak, hangi türü alır?

Çoğu kişi emptyArray'nin "herhangi bir şeyin" dizisi veya [Any] olacağını yanıtlar. Gerçekte, Swift derleyicisi tipi çıkaramaz ve bir hata verir:

let emptyArray = [] // Hata: boş koleksiyon literali açık bir tipe ihtiyaç duyar

Boş bir dizi kullanmak için tipi açıkça belirtmek gerekir:

let emptyArray: [Int] = []

Temanın inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri


Hikaye

Ekip, let params = [:] olarak boş bir sözlük ekledi ve tipin [String: Any] olacağını bekliyordu, ancak derleyici tipi çıkaramadığı için derleme başarısız oldu. Sonuç — type inference'ın özelliklerinden kaynaklanan sebebi araştırmaya harcanan zaman.


Hikaye

Proje, let value = decode(json) olarak tanımlanan bir fonksiyonun çıkış tipini kullanıyordu. Geliştirici [String: Any] bekliyordu, ancak belirsizlik nedeniyle parser Any döndürdü ve bu durum runtime'da tipi dönüştürmeye çalışırken uygulamanın çökmesine neden oldu.


Hikaye

Açık bir tip belirtmeden farklı tipteki değerleri bir diziye eklemeye çalıştılar — let items = [1, "two", 3.0]. Swift tipi [Any] olarak çıkardı, fakat bu sonraki işlemler için bir tipte elemanlar beklenen bir dizide mantık hatalarına neden oldu.