Kotlin Null Safety & Non-Null

Ego1st

Uzman üye
15 Mar 2018
1,109
25
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)

sdwADe.png


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.

zXwqka.png


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<String?> = 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
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.