Swift'te tip dönüşümü

2020-02-05

Bazen belli bir formattaki veriyi farklı bir formata dönüştürmeye ihtiyaç duyarız. Örneğin hemen aşağıda "tamSayi" adında ve Int türünde daha sonra da "ondalikliSayi" adında ve Double türünde birer değişken tanımlayalım. Ardından birindeki değeri, diğerine atamaya çalışalım.

var tamSayi: Int = 100
var ondalikliSayi: Double = 12.5
tamSayi = ondalikliSayi

Yuarıdaki işlemi gerçekleştirdikten sonra muhtemelen karşılaşıyor olacağınız hata mesajının şöyle olması gerekir: Cannot assign value of type 'Double' to type 'Int'

Bazı programlama dilleri bu kadar katı olmayabilir ve bu işlemi çok fazla gürültü patırtı çıkarmadan gerçekleştirebilir fakat bu tarz otomatik tip dönüşümleri geliştirilen uygulamada performans kayıplarına ve buglara sebep olduğu deneyimlenmiştir. Bu sebeple Swift programlama dili otomatik tip dönüşümlerine izin vermez ve eğer tip dönüşümü yapmak isterseniz bunu açık (explicit) bir şekilde bildirmenizi ister.

Şimdi en başta gerçekleştirmeye çalıştığımız işlemin doğru bir şekilde yapılışını görelim.

tamSayi = Int(ondalikliSayi)

Bu arada unutmadan ondalıklı bir sayıyı tam sayıya dönüştürürken veri kaybı yaşanır. Yani 12.5 değerinin sadece tam kısmı olan 12 değerini saklayabiliriz.

Peki tam sayı türündeki bir değerle ondalıklı sayı türündeki bir değeri çarpıp, çıkan sonucu ondalıklı sayı türünde bir değişkene atarsak ne olur?

let saatlikCalismaUcreti: Double = 19.5
let calisilanSaat: Int = 10
let toplamMaliyet: Double = saatlikCalismaUcreti * calisilanSaat

Bu sefer şöyle bir hata mesajıyla karşılaşırsınız: Binary operator '*' cannot be applied to operands of type 'Double' and 'Int'

Eğer hemen yukarıda gerçekleştirmeye çalıştırdığımız işlemi başarılı bir şekilde yapmak isterseniz hemen aşağıdaki gibi yapmanız gerekiyor.

let toplamMaliyet: Double = saatlikCalismaUcreti * Double(calisilanSaat)

Type inference

Swift'te, çoğu dinamik programlama dilinde olduğu gibi, sabit ve değişken tanımlarken tipleri üstü kapalı (implicit) bir şekilde belirleyebilirsiniz.

let tipiBelirtilmemisTamSayi = 42
let tipiBelirtilmemisOndalikliSayi = 3.14159

Şimdilik tip dönüşümü hakkında bu kadar konuştuğumuz yeter. Sonraki yazımda String veri türünü inceliyor olacağız. Görüşmek üzere...