Null
- Okunuşu
- nal
Kısaca
Null, “burada değer yok” anlamına gelen özel bir değerdir; bir değişken bilerek hiçbir nesneye ya da veriye başvurmadığında kullanılır.
Programlamada null nedir?
Null, bir değişkenin bilerek hiçbir değer tutmadığını gösteren bir işarettir. Eksik bir ikinci ad, eşleşme bulamayan bir arama ya da boş bırakılmış bir veritabanı sütunu null ile temsil edilebilir. Diller bunu farklı yazar: Java, JavaScript, C# ve Kotlin'de null, Python'da None, Ruby, Go ve Swift'te nil, C ve C++'ta NULL ya da nullptr.
Null vardır, çünkü değişkenler sıklıkla nesnelere başvurur ve bazen başvurulacak bir nesne yoktur. Sorun, kodun bir değerin var olduğunu varsayıp onu kullanmaya çalışmasıyla başlar: null üzerinde bir metot çağırmak Java'nın NullPointerException hatası ya da JavaScript'in TypeError: Cannot read properties of null hatası gibi hatalara yol açar. Null referansları 1965'te icat eden Tony Hoare, neden oldukları hata ve çökme sayısı nedeniyle onlara daha sonra “milyar dolarlık hatam” dedi.
Modern diller, yokluğu tür sisteminde açık hâle getirerek riski azaltır. Kotlin, Swift, katı (strict) TypeScript ve null olabilen referans türlerine sahip C#'ta String? ya da string | null gibi bir tür kullanılmadan önce denetlenmelidir ve unutursanız derleyici şikâyet eder. Rust ve Haskell'de hiç null yoktur, bunun yerine Option veya Maybe türleri kullanılır. İsteğe bağlı zincirleme (user?.address) ve null birleştirme (name ?? "Guest") gibi operatörler bu denetimleri kısa tutar.
Null sıklıkla diğer “boş” değerlerle karıştırılır. Boş bir dize, 0 sayısı ve boş bir liste gerçek değerlerdir; null ise hiç değer olmadığı anlamına gelir. JavaScript bir komşu daha ekler: undefined genellikle bir değerin hiç atanmadığı anlamına gelirken null bilerek atanır. SQL'de NULL bilinmeyen anlamına gelir; bu yüzden NULL = NULL doğru değildir ve bunun yerine IS NULL ile sınamanız gerekir.
Önemli noktalar
- Null, bir değerin bilerek yokluğunu temsil eder.
- Null'ı gerçek bir nesneymiş gibi kullanmak en yaygın çalışma zamanı hatalarından bazılarına yol açar.
- Kotlin, Swift, TypeScript ve C# null olabilen türleri derleme zamanında izleyebilir.
- Rust ve Haskell,
OptionveMaybetürleriyle null'dan tamamen kaçınır. - Null,
"",0ya da boş liste gibi boş değerlerden farklıdır.
Örnek
interface User {
name: string;
nickname: string | null; // may be missing on purpose
}
function displayName(user: User): string {
// user.nickname.toUpperCase() would not compile: it might be null
return user.nickname ?? user.name;
}
displayName({ name: "Ada", nickname: null }); // "Ada"
displayName({ name: "Grace", nickname: "Amazing" }); // "Amazing"Sık sorulan sorular
JavaScript'te null ile undefined arasındaki fark nedir?
undefined genellikle bir değişkene ya da özelliğe hiç değer verilmediği anlamına gelirken null, “değer yok” anlamında bilerek atanır. null == undefined doğrudur, ancak farklı türler oldukları için null === undefined yanlıştır.
Null pointer exception nedir?
Kodun bir null referansı sanki gerçek bir nesneyi gösteriyormuş gibi, örneğin üzerinde bir metot çağırarak kullanmaya çalışması durumunda ortaya çıkan hatadır. Java buna NullPointerException der; diğer dillerde farklı adlarla benzer hatalar vardır.
Null neden milyar dolarlık hata olarak adlandırılır?
1965'te null referansları ALGOL W diline ekleyen bilgisayar bilimcisi Tony Hoare, null'ın neden olduğu çökmelerin ve hataların muazzam maliyetini anlatmak için 2009'da bu ifadeyi kullandı. Bu yüzden birçok yeni dil, eksik değerlerin açıkça ele alınmasını zorunlu kılar.
İlgili sayfalar
- Veri türüProgramlamanın Temelleri, s. 54Veri türü, bir programa bir verinin sayı ya da metin gibi hangi tür bir değer taşıdığını ve hangi işlemlerin ona uygulanabileceğini söyleyen sınıflandırmadır.
- DeğişkenProgramlamanın Temelleri, s. 10Değişken, bir programda sayı ya da metin gibi bir değeri tutan ve kodun çalışırken okuyup değiştirebildiği, adlandırılmış bir depolama alanıdır.
- İşaretçiProgramlamanın Temelleri, s. 29İşaretçi, başka bir değerin kendisi yerine bellek adresini saklayan bir değişkendir; kodun o veriyi dolaylı yoldan okumasına ya da değiştirmesine imkân tanır.
- İstisnaProgramlamanın Temelleri, s. 28İstisna, bir hata oluştuğunda programın normal akışını kesen bir olaydır; kod bunu programı çökertmek yerine yakalayıp ele alabilir.
- KotlinProgramlama Dilleri, s. 18Kotlin, JVM üzerinde çalışan, Java ile sorunsuz uyum sağlayan, özlü ve statik tipli bir dildir; Android ve sunucu tarafı geliştirmede yaygın kullanılır.
- TypeScriptWeb Geliştirme, s. 51TypeScript, JavaScript üzerine statik tipler ekleyerek birçok hatayı kod çalışmadan yakalayan ve düz JavaScript'e derlenen bir programlama dilidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin