C# 8.0 İle Gelebilecek Muhtemel Yenilikler

Selamlar,

Bu makalede C# 8.0 ile gelmesi muhtemel özellikleri hep beraber inceleyeceğiz. Halen tartışılıyor. İlerde bunların bir kısmı kaldırılabilir. Ya da yenileri de eklenebilir.

1-) Non-Nullable & Nullable Reference Tipleri: Burada yapılmak istenen “NullReferenceExceptions?” hatasından mümkün olduğunca kurtulmaktır. Mesela “string” değişkenler daha en baştan null olabilir ya da olamaz şekilde tanımlanması planlanmaktadır.

  • “T? where T is a value type” ==> Bu şekilde tanımlama hali hazırda zaten yapılabilmektedir.
  • “T? where T is a reference type” ==> Ama reference tipinde bir değişken null olarak henüz atanamamaktadır.
    • C# 8.0 ile bir refence tipi, bu şekilde tanımlandığı zaman null olamaz anlamına gelmekte ve aşağısındaki atama ile derleme anında uyarı alınması planlanmaktadır.
    •  Ayrıca stringlerin default değer olarak da artık “null” değer kabul edilmemesi planlanmaktadır.
    • Null olabilir tanımlaması daha en baştan aşağıdaki gibi yapılabilir.
    • Bu şekilde bir tanımlama ile derleme anında yine toDoList’in null olamaz şeklinde tanımlanması ve GetTodoList() methodunun null dönmesi yüzünden derleme anında uyarı alınacaktır.
    • Aşağıdaki şekillerde yapılabilecek kontrollerin, daha derleme zamanında uyarılar (warning)’ler ile yapılması planlanmaktadır. Bu şekilde gözden kaçabilecek null hatalarının daha derleme zamanında önüne geçilmek istenmektedir.

2-) Records (C# 8.0) : Sıra geldi benim favorime. Sınıfları daha en başta aşağıdaki gibi Constructer kullanmadan ilgili propertyleri ile hızlıca tanımlama. 

Aşağıdaki kodlardan umarım ilerde kurtulmuş olucağız :)

3-) Default Interface : Aşağıdaki örnekte IMail interface’inde tanımlı “SendMailAll()” methodu, c# 8.0 ile artık mutlaka implemente edilmek zorunda değildir. Default olarak ilgili method zaten interface içinde tanımlanmıştır. 

4-) Asynchronous Enumerables : Aşağıda görüldüğü gibi asenkron olarak dönen bir listede mesela Twitter entegrasyonunda, twit atan kişiler sayfaya asenkron olarak listelenmek istendiğinde C# 8.0’da böyle bir yapı planlanmaktadır. Bence çok güzel olur. Umarım biran evel gelir :)

5-) Asynchronous Dispose (C# 8.0) :

Diyelim ki bir windows  yani masaüstü uygulamanız DB ile direk bağlantılı işler yapıyor. 1 milyon kaydın üzerinde transection içinde bir işlem yaparken eğer bir hata oluşur ise, bunları rollback ile geri almak çok vakit alabilir ve windows uygulamanızın donmasına sebebiyet verebilir.

Aşağıdaki yöntem ile bu durum hali hazırda çözülebilir.

Ya C# 8.0 ile aşağıdaki gibi bir çözüme gitsek daha kısa olmaz mı?

6-) Extension Everything :

Bir sınıfın çalışma yapısını bozamadan extensionlar ile ona bir takım özellikler eklemek. Kulağa hiç de fena gelmiyor dimi :)

Aşağıdaki kodlar BUILD 2017 konuşmasından alınmıştır. Ve sadece yapılması planlanmaktadır. Bir çeşit yol haritası diyebiliriz. Görüldüğü gibi Person sınıfının yapısı bozulmadan, statick bir field, method(), property ve hatta constructer bile tanımlanmıştır. Bu şekilde bu sınıfı kullanan diğer kod parçaları, hiçbir şeyden etkilenmeden çalışmaya devam edebileceklerdir.

Bence en güzel yanı, planlanan bu yeni geliştirmelerin şefaf ve açık olması. Siz de GitHub’daki Roslyn projesine giderseniz ve gerçekten akla yatkın bir yöntemle konuya yaklaşırsanız, bir sonraki C# sürümüne yön verebilirsiniz.

Geldik bir makalenin daha sonuna. Yeni bir makalede görüşmek üzere hoşçakalın.

İlgili Video’yu burdan izleyebilirsiniz ==> A Preview of C# 8 with Mads Torgersen

Burdan da C#8.0 için bilgi edinebilirsiniz. ==> C# 8.0 Features

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.