Kotlin’de Null Safety (Null Güvenliği)

Recep Güzel
3 min readAug 10, 2023

--

Herkese merhabalar 👋 Bugün başlıktan anlaşılacağı üzerine Kotlin de Null Safety ( Null Güvenliği) konusunu anlatmaya çalışacağım . Hazırsanız başlayalım .

Öncelikle Null ne demek bunu öğrenelim .

Null:Boş veya hiç anlamına gelmektedir .

Bilgisayar dilinde değişkenlerin veya nesnelerin bellekte bulunamaması durumudur. Bu durumda NullPointerException hatası alırız.

Biraz anlaşılması zor olabilir ,anlaşılabilmesi için bir resimle örneklendirelim .

Null Safety(Null Güvenliği):Null güvenliği, bir programlama dilinde değişkenlerin null (değer atanmamış) değerlere sahip olma durumunu kontrol etmek ve bununla başa çıkmak için kullanılan bir kavramdır. Kotlin, null güvenliği konusunda oldukça güçlü bir dil olarak bilinir.

Nullable ve Non-nullable Nedir?

Kotlin, değişkenlerin veya değerlerin null olup olamayacağını belirlemek için nullable ve non-nullable türler arasında ayrım yapar. Bir değişkenin nullable veya non-nullable olması, bu değişkenin null (boş) değer alıp alamayacağını belirtir.

Nullable Değişkenler: Bir değişkenin null olması durumudur . Nullable değişkenlerinin tipi hem null hemde belirtilen türde (String, Int vb. ) olabilir.

Bir nullable değişkeni kullanırken, null olup olmadığını kontrol etmeniz gerekmektedir.

var name :String? = null
//name adında String tipinde bir Nullable değişken tanımladık

Non-nullable Değişkenler:Bir değişkenin null olmaması durumudur.Non-nullable değişkenlerin tipi sadece beliritlen türden(String ,Int vb )olabilir.

val age : Int = 10
//age adında Int tipinde Non-nullable bir değiken tanımladık

Nullable Değişkenlerin Kullanımı:

Tipi nullable olmayan bir değişkene null değeri atanamaz.

var a:String = "Hello"  //Yanlış kullanım
a = null

var b:String? ="Hello I am nullable" //Doğru kullanım
b = null

Nullable olmayan bir property nin üyelerine güvenli bir şekilde erişebiliriz
ama nullable olan bir property nin üyelerine güvenli erişmemize izin verilmez.


var b:String? ="Hello I am nullable"
b = null

val bLength = if(b!= null) print(b.length) else print(1)

//Değişkenimiz null olduğu için if ile null konrolü yaptık .
//Çıktı 1 olacaktır.

Safety ?. operatörü kullarak üyelere erişim sağlanabilir.

 var a: String = "Hello"
var b: String? = null

println(a?.length) //Null kontrolü yapmana gerek yok a null değil
println(b?.length) // b null değilse uzunluk null ise null yazdırılır.

Safety operatörü ile chained call yapılabilir

val sum = b?.length?.sumWith(3)
// Eğer herhangi bir chain null ise sonuç olarak null döndürülür.

Elvis Operatörü

Elvis Operatörü : Kotlin’de “Elvis Operatörü” (?:), null koşullu ifadeleri kolaylaştıran ve null değerlerle çalışmayı daha güvenli hale getiren bir yapıdır. Bu operatör, bir ifadeyi değerlendirirken, eğer ifade null ise belirtilen alternatif bir değeri kullanmanıza olanak tanır.

Elvis Operatörü, sıklıkla nullable değişkenlerin değerlerini kontrol etmek ve null referans hatalarını önlemek için kullanılır. Aynı zamanda kodun daha temiz ve okunabilir olmasına yardımcı olur.

val result = nullableValue ?: defaultValue

Yukarıdaki kod bloğunda nullableValue değerininin null olup olmadığını kontrol eder. nullableValue değeri null ise defaultValue değerini kullanır eğer null değil ise kendi değerini kullanır .

val name :String? = null 
val guestName= name ?: "Guest"

println(guestName)

// Çıktı : Guest

Yukarıdaki örnekte name adında bir null değişken oluşturduk . Sonra guestName adında bir değişken oluşturup name değişkeninin null olup olmamasını elvis operatörü ile kontrol ettik .name değişkenimiz null olduğu için guestName değeri “Guest” e eşit oldu .

Not-null Assertion Operator (!!)

!! operatörünün kullanımı, bir değişkeni nullable türünden non-nullable bir türe dönüştürmeyi amaçlar. Bu, kodunuzda null kontrollerine ihtiyaç duymadan değişkeni kullanmanıza olanak sağlar. Ancak, eğer !! operatörü ile işaretlenen değişken gerçekten null ise, bu durumda hemen bir hata alırsınız.

val name: String? = "John"
val nonNullableName: String = name!!
println(nonNullableName)

//Çıktı-> John

name değişkenimiz non-nullable olduğu için eşitleme yapıldı değişkenimiz null olsaydı NullPointerException hatası alacaktık.

Buraya kadar okuduysanız alkışlarınızı 👏bekliyorum .Her hafta yeni bir yazıyla karşınızdayım .Yazılardan haberdar olmak için beni takip etmeyi unutmayın .

Arkadaşlar umarım açıklayıcı olmuştur. Kendim de yeni öğreniyorum ve öğrendiğim konuları burada yazıyorum . Kalın sağlıcakla 👋👋

Diğer Platformlardan Takip etmek isterseniz;

Linkedln https://www.linkedin.com/in/recepguzel34/

Github https://github.com/recepbrk

Twitter https://twitter.com/RcpbrkGuzel

--

--