C# 12 İle Gelmesi Muhtemel Özellikler

Selamlar,

Bu makalede, C# 12 ile gelmesi beklenen bazı özellikleri hep beraber inceleyeceğiz.

1-)Primary Constructors:

Aşağıda görüldüğü gibi, RedisPersonKeyGenerator” sınıfının Constructor’ı yoktur. Class, parametreleri sanki bir method gibi alınmıştır. Böylece içeride ayrıca bir değişken tanımlanmasına gerek kalmamıştır. Aslında bu özellik, record tipler için çoktan sağlanmıştır. RedisCore sınıfı, “RedisPersonKeyGenerator” sınıfından türemiştir. Doğal olarak RedisCore sınıfı, “RedisKey” propertysine doğrudan erişebilmektedir. RedisCore sınıfının kendi içinde constructor’ı bulunmaktadır. Eski usül ile yeni usülün farkını göstermek için bu şekilde bir örnek yazılmıştır. RedisCore sınıfı içinde Local Redise, 30 dakka expirelı parametre olarak gelen obje atanmaktadır. Key olarak base’den gelen RedisKey kullanılmaktadır.

Simdi bir sınıftan Constructor ve ayrıca parametre tanımlama ihtiyacını kaldırmak kodu kısaltıp, kod okunaklığını arttırabilir ama set ve get işlemlerinde araya girip müdahele etmeyi ortadan kaldırır. Bu da Observer gibi Notify yapan Design Patternler için pek de istenen bir durum değildir. Ayrıca bence, bir sınıftaki property’e erişmek, değişkene doğrudan erişmekten çok daha sağlıklıdır :)

2-) *Semi-auto-properties (field keyword’ü): 

Benim bu seneki favori yeniliğim açık ara budur. Aşağıdaki örnekde, bir sınıfın standart property özellikleri kullanılmıştır ve üçgenin alanı bulunmuştur. Peki ya var olan bir sınıfa değişken tanımlamadan property atayabilsek.

C# 12 Ile Son Durum: Aşağıda görüldüğü gibi “Height” ve “BaseLength” propertyleri değişkenler olmadan ” field” keyword’ü ile atama ve değer alma işlemleri yapılmıştır. Buradaki “field” keyword’ü, Backward compatibility için büyük bir tehlikedir. Çünkü, ilgili sınıf içinde önceden field adında bir değişken tanımlanmış olabilir. Ve bu da önceden yazımış kodda, bir çakışmaya sebebiyet verebilir. Peki çözüm için ne yapabiliriz ? Mesela “field” yerine “this.field” keyword’ünü kullanabiliriz.

Şimdi gelin Auto Property kısmına bakalım: En başta, ilk yaratılma anında ilgili fieldlar, default olarak aşağıdaki gibi atanabilirler.

3-) Lambda Expression’da Yapılan Geliştirmeler:

C# 12’de parametreler için varsayılan değerlerin tanımlamasına izin verilerek, lambda ifadelerin güçlenmesi sağlanmıştır. Örneğin, aşağıdaki durumda price atanmadığında default olarak 100 kabul edilmekte ve son fiyat 1.18 ile çarpılarak geri dönülmektedir. Eğer price atanmış ise,  o zaman atanan price doğrudan 1.18 ile çarpılarak geri dönülür. Ayrıca artık lamda functionlarda, çok daha complex expressionlar yazılabilecektir. Bence ilerde bu lambda ifadeler, aynı Linq querylerde olduğu gibi “tail” olarak uç uca eklenen karmaşık sorguları basitleştiren bir tool haline gelebilirler.

4-) Switch Expression’da Yapılan Geliştirmeler:

Klasik Yöntem: Aşağıda görüldüğü gibi sınav scoruna göre, başarı durumu raporlanmaktadır.

C# 12 Switch : Artık yeni yapıda, switch yapısında ayrıca yeni bir değişkene ihtiyac duyulmamaktadır. Ben zaten hiçbir zaman bu extra değişken ihtiyacına, anlam verememiştim :)

5-) Tip Tanımlamada Alias Kullanma:

Artık istenir ise, hemen hemen her türe alias yani takma isim, aşağıda görüldüğü gibi verilebilecektir. Örneğin GoogleMapPoint => (string) isim ve (double) kordinat bilgisi almaktadır. Bu tip SetCordinate() methodunda tanımlanmıştır.

Ayrıca tanımlı alias’da ilgili değişkenlere daha kolay erişim icin => “GoogleDetailMapPoint” alias’ı, aşağıdaki gibi tanımlanmıştır. İlgili string değişkene “Name” ve double değişkene “Point” adları ile erişilebilir. Tek istisna olarak nullable referance tiplerin alias veremessiniz. Türlere takma ad vermek, kullandığınız gerçek türleri soyutlamanıza ve kafa karıştırıcı veya uzun genel adlara kolay adlar vermenize olanak sağlar. Bu da, kodunuzu okumayı kolaylaştırır.

Geldik bir makalenin daha sonuna. Bu makalede, C# 12 ile gelmesi muhtemel bazı başlıca özelliklere göz attık. C# Lead Designer’ı Mads Torgersen, değişime ve C#’a yeni özelliklerin katılmasına devam edeceklerini, ekibi ve kendisinin önümüzdeki dönemlerde de “Değişimin“, esas mottoları olduğunu belirtti. Bütün bunların yandan artık daha fazla değişim istemeyen, C#’ın yeterince complex bir hal aldığını düşünen bir kitle de bulunmaktadır. Bu kitle, bir işi yapmanın birden çok yolunun olmasının, kod okunaklığını ve kod standardını sağlamanın zorlaştırdığını idda etmektedirler.

Torgersen ve ekibi, bir yandan bu tepkilere dikkat ederken, diğer yandan da bizim hayatımızı kolaylaştıracak bir dizi muhteşem özellikleri tasarlıyıp geliştirmek gibi zorlu bir iş yükü altında bulunmaktadırlar. Ben geçen ayki MVP Summit’de yüz yüze, C#’a getirdikleri bu efsane yenilikler için özellikle teşekkür ettim. Dile yaptıkları bu eklentiler ile aslında birçok yeni design pattern’e de zemin hazırlamış oluyorlar. Aslında bunun da gayet bilincindeler.Asıl amaçları basitlik ve kod okunabilirliğini arttırmak yani Clean Code.

Yeni bir makalede görüşmek üzere hepinize hoşçakalın.

 

 

 

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. Hasan dedi ki:

    merhaba sevgili üstad çalışmalarınızın devamını dilerin bir ömür boyu kodlamalar ..

Bir cevap yazın

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