Null-Safety Nedir?

 


Flutter çalışırken en kafamı karıştıran konulardan birini yazmak istiyorum. Null-Safety nedir? Ne için kullanılır? Nerede kullanılmalıdır? Anladığımı ve araştırarak öğrendiklerimi paylaşırken kendim çok daha iyi öğreniyorum. o yüzden yazmayı seviyorum.


Null-Safety nedir?

Dart programlama dilinde kodların daha güvenli ve daha tutarlı hale getirilmesini sağlayan bir özellik. Bu, kodun çalışma zamanında null referanslarının neden olduğu hataları en aza indiriyor ve kodun daha öngörülebilir olmasını sağlıyor.

2020 yılında piyasaya sürülen 2.12 sürümü ile sunulmuş, bundan önceki Dart versiyonlarında bu özellik yok.

Null-Safety özelliğini kullanabilmek için Dart programlama dillerinde nullable ve non-nullable türlerini ayırt etmemiz lazım. Bu ne demek? Değişkenlerin null değer alabilme veya alamama durumları. Şimdi buna biraz daha detaylı bakalım.

Nullable (?) Türler

Bir değişken nullable olarak tanımlandığında -ki bunu değişkenin sonuna ? koyarak belirtiriz- o değişkenin null değer döndürebileceği anlamına gelir.

Bu kullanımla değişkenin döndürebileceği değeri kontrol etmemiz gerektiğini anlarız çünkü o değişken geçerli bir değer alabilir ya da null döndürebilir.

String? nullableString; //Null veya geçerli değer 
//döndürebilecek bir String değişkeni

Non-Nullable (!) Türler

Tanımlanan değişkenin null olamayacağını, her zaman geçerli bir değer döndüreceğinden emin olduğumuzu anlatmak için kullanırız.

Bu kullanımla -ki bunu da değişkenin sonuna ! koyarak belirtiriz- null değerlerin kabul edilemez olduğunu anlatırız.

String? nullableName = "Selin"; //geçerli bir değer döndürmüş bir değişken
String nonNullableName = nullableName!; //başka bir değişkene null değer
//döndürmeyeceğinden emin olduğumuzu
//belirtmek amaçlı ünlem işareti ile
//kullanıyoruz.
print("Merhaba, $nonNullableName");

Bu örnekte, nullableName değişkeni nullable bir String türünde tanımladık ve "Selin" değeriyle başlattık. Daha sonra, bu nullable değişkeni non-nullable bir değişkene atamak istiyoruz. Ancak, Dart dilinde bu bir hata oluşturacaktır çünkü nullable bir değeri doğrudan non-nullable bir değişkene atayamayız.

nullableName! ifadesi, nullableName değişkeninin null olmadığını belirten bir işaretçi olarak işlev görür. Bu, Dart diline nullable değişkenin aslında null olmayacağını belirtmiş oluruz. Böylece, nullableNamedeğişkenini nonNullableName değişkenine atamak için bu ifadeyi kullanabiliriz. Bu şekilde, Dart'a bu değerin null olmayacağını belirtmiş oluruz ve bu değeri non-nullable bir değişkene atayabiliriz.

Sonuç olarak, nullableName değişkeni null değilse, "Merhaba, Selin" çıktısını alırız. Ancak, nullableName null ise, çalışma zamanında bir hata alırız. Bu nedenle, ! operatörünü kullanırken dikkatli olmalıyız ve nullable değişkenin null olmadığından emin olmalıyız.

Null safety, Dart dilinde kod yazmayı daha güvenli, daha sağlam ve daha öngörülebilir hale getiriyor. Eğer bir hata alacaksak bunu önceden öngörebilmek programcılıkta işlerimizi çok kolaylaştırıyor. Özellikle Flutter gibi büyük ölçekli projelerde hata ayıklama ve bakım süreçlerini kolaylıkla yönetebiliyoruz. Bu da biz geliştiricilere daha sağlam ve güvenilir uygulamalar oluşturma konusunda önemli bir avantaj sağlıyor.

Migrasyon Aracı

Makalemi bitirmeden son olarak Migrasyon aracından bahsetmek istiyorum. Malum programcılıkta her geçen gün birşeyler değişiyor, tanıtılıyor, versiyonlar yükseltiliyor. Diyelim ki, siz de bir proje yazmaya başladınız ve devam ederken büyük bir güncelleme geldi ve sizin de projenizi bu güncellemeye hızlıca uyarlamanız gerekiyor. Bu noktada migrasyon aracı devreye giriyor.

Null-Safety özelliğinin Dart diline 2020 yılında 2.12 sürümüyle geldiğini söylemiştik. Siz bu tarihten önce yazmaya başladığınız, tamamladığınız veya halen devam eden projenize bu araç ile Null-Safety özelliğini ve yeni sürümle gelen tüm yeni özellikleri tanıtabiliyorsunuz.

Yani, proje veya kaynak kodlarınızın bir sürümden diğerine geçişi kolaylaşıyor. Özellikle, önemli bir değişiklik veya güncelleme yapıldığında, mevcut projelerin veya kaynak kodlarının yeni sürüme uyumlu hale getirilmesini sağlıyor.

Null-Safety özelliğinden gidelim, migrasyon aracı mevcut kod tabanını otomatik olarak inceleyerek, nullable ve non-nullable türler arasındaki ayrımı belirliyor ve kodu null safety uyumlu hale getirecek değişiklikleri uyguluyor. Genellikle otomatik dönüşümler yapıyor ancak bazen karmaşık veya belirsiz durumlarda manuel müdahale gerekebiliyor.

Bu aracı kullanabilmek için:

  • Dart SDK sürümünün en son sürüm olduğundan emin olmalıyız.
  • Mevcut projemizi her ihtimale karşı mutlaka yedeklemeliyiz. Herhangi bir sorun olursa geri dönebilmek gerekebilir.
  • Terminal ekranında “dart migrate” komutunu çalıştırıyoruz. Bu komut, projeyi analiz ediyor ve null-safety uyumlu hale getirmek için gereken değişiklikleri öneren bir migrasyon raporu oluşturuyor.
  • Bu raporu dikkatlice inceliyoruz ve migrasyon önerilerini kontrol ediyoruz.
  • Migrasyon raporundaki önerilere göre, projede yapılması gereken değişiklikleri uyguluyoruz. Bu, nullable ve non-nullable türler arasındaki dönüşümleri gerçekleştirmeyi, null kontrolleri eklemeyi ve diğer gerekli değişiklikleri içerebilir.
  • Değişikliklerin uygulanmasının ardından, projemizi test ediyoruz ve doğru çalıştığından emin oluyoruz. Testler çok önemli, beklenmedik durumlar oluşabilir, hatalar alınabilir.
  • Tüm değişiklikler yapıldıktan sonra projemizin doğru çalıştığından eminsek, migrasyon sürecini tamamlamış oluyoruz.


Sonuç olarak, Null-Safety özelliği Dart dilinde kod yazımını daha güvenli hale getiriyor ve biz geliştiricilere daha sağlam ve daha tutarlı bir programlama deneyimi sunuyor. Umarım faydalı olabilmişimdir.

Kolaylıklar dilerim.

Selin.

 

 

Hiç yorum yok: