Kotlin Null Safety - Non-Null

Kotlin Null Safety Nedir?

Kotlin Null Safety, null değerlerden dolayı oluşabilecek tehlikeleri ortadan kaldırmak için geliştirilmiştir. Java'da null değerlerle işlem yapmaya çalıştığımız zaman çoğu zaman uygulama çöker. Ama eğer değerler güvenli bir şekilde null alabilseydi, çok daha rahat olurdu ve çökmelerin büyük oranda önüne geçilirdi. İşte Null Safety bu yüzden çok önemlidir.

Şimdi Kotlin'de nullable dediğimiz tanımlamalara bakalım

Kod:
var tht: String = "THT"
tht = null
Bu kodu çalıştırdığımızda alacağımız sonuç uygulamanın çökmesi olacaktır. Şimdi ise nullable olarak tanımlayalım.

Kod:
var tht: String? = "THT"
tht = null
Kodu bu şekilde derlediğimiz zaman bir sorun çıkmayacaktır. Aynı şekilde sadece null değer atanan değişkenleri yazdırabiliriz

Kod:
var deneme: String? ""
deneme = null
println(deneme)


Sonuç yukarıda gördüğünüz gibi null olacaktır.

Peki ya değişkenlerle işlem yapmak istersek. Örneğin bir stringin uzunluğunu almak istiyoruz ama stringimiz nullable yani null değere sahip olabilir. Bu durumda ne yapmalıyız.

Bunun için null safety'i kullanmamız gerek.

Örnek kod;

Kod:
var tht2: String = "THT2"
var deneme2: String? = null
Kod:
val length1 = tht2.length // Bu kod düzgünce çalışacaktır çünkü null değer alamaz.
val length2 = deneme2.length // Bu kod daha derlenmeden hata alırız çünkü null safety'i sağlamadık.


Gördüğünüz gibi bize bu şekilde bir hata verdi

Şimdi null safety nasıl sağlanır ona bakalım.

1- Null durumu kontrolü

Kod:
var stringA: String? = null
val aLength = if(a != null) stringA.length else -1
2- Güvenli Çağrı(Safe Call)

Kod:
val smt: String? = null
println(smt?.length)
Gördüğünüz gibi Kotlin bizim için işleri oldukça kolaylaştırıyor. Sonuna soru işareti eklemek eğer null değilse yap anlamında

Bir örnek daha

Kod:
val thtList: List = listOf("Ego1st", null)
for(user in thtList){
user?.let {
println(user)
}
}
Bu örnekte listede tutulacak verileri string nullable olarak belirttiğimiz için null olan 2. elemanı geçerek uygulamayı çökmekten kurtarır.

if(ornekDegisken != null) açıklamasının kısaltılmış hali

Kod:
val smt2: String? = null
val l22 = smt2.length ?: //null değil ise
!! Operatörü

!! operatörü nullable değerlerin kesinlikle null olmadığını belirtmek için kullanılır

Örnek kullanım;

Kod:
val a: Int? = null
if(a != null){
println(a!!)
}
normalde println(a) yapsak hata verirdi ancak sonuna !! koymamız kesinlikle null olmadığını ve buna göre işlem yapılacağını ifade ediyor.
Benim tavsiyem bu kullanımı olabildiğince az kullanmak

Cast'lerde durum nasıl

Diyelim ki bir nullable integer'ımız var ve bizim bu integeri normal integera cast etmemiz lazım bunun için;

Kod:
val a: Int? = null
...

val b: Int = a as? Int
Sondaki soru işareti yine bize yardımcı oluyor

Yazım hatası yaptıysam ya da eksiğim veya yanlışım varsa affola, bildirmeyi unutmayın :)

Kotlin Temelleri: Kotlin Temelleri