Yazılım Mimarileri ve Tasarım Desenleri Üzerine

C# 10 – Record Structs

Merhaba,

Bu içeriğimizde C# 9.0 ile hayatımıza giren record yapısının C# 10 ile gelen record structs isimli yeni özelliği üzerine incelemede bulunuyor olacağız.

Her şeyden önce record yapısının ne olduğunu hatırlatan girizgâhla başlayalım. Record’lar; verisel olarak değeri ön planda tutan, değerleri değiştirilemeyen ve compile neticesinde IEquatable<T>‘ı implemente ederek özünde bir sınıfa dönüşen referans türlü veri yapılarıdır. Record’ların ne olduğunu tam teferruatlı anlayabilmek için önceden klavyeye aldığım C# 9.0 – Records İle Immutable Datalar başlıklı makalemi baştan sona okumanızı ve ardından bu içeriğe göz atmanızı tavsiye ederim.

Record struct nedir? diye sorarsanız eğer; record’ın birçok avantajını sağlayan lakin değer türlü olması gibi radikal farkları olan veri yapılarıdır. Şimdi gelin record struct’ın ne olduğu, record’lardan farklarının neler olduğu şeklinde sualleri tek tek irdeleyerek cevap bulmaya çalışalım.

Record Struct Nasıl Oluşturulur?

Record struct’lar aynen bir struct gibi bir record gibi aşağıdaki semantikte oluşturulmaktadırlar.

Prototip :

record struct [name]
{
    ...
}

Misal olarak bir ‘Product’ record struct’ı aşağıdaki gibi oluşturulabilmektedir.

record struct Product
{
    ...
}

Eğer ki ‘Product’ record oluşturmak isteseydik aşağıda görüldüğü üzere bunun çok fazla semantik bir farkı bulunmayacaktı :

record Product
{
    ...
}

Tabi hazır lafı geçmişken söylemekte fayda var ki, C# 9.0 ile gelen bu record [name] yapılanması C# 10 ile record class [name] olarak da tanımlanabilmektedir.

record class Product
{
    ...
}

Bu tanımlama nihai olarak record ile record struct arasındaki karışıklılığı önlemek için zahiren daha uygun bir görsellik sağlamaktadır kanaatindeyim. Siz ne düşünüyorsunuz?

Velhasıl,

Nasıl ki bir record(ya da record class) tüm sınıf özelliklerine sahip olan bir sınıfsa aynı mantıkta bir record struct’ta özünde yine bir struct olan ve struct’ların tüm özelliklerine sahip olan yapılanmadır.

Bu iki record yapılanmasının aralarında benzerlikleri olduğu gibi davranışsal olarak temel farkları da mevcuttur. Şimdi gelin bu iki yapıyı tek tek özellikler çerçevesinde mukayese ederek farklarını ve benzerliklerini inceleyelim.

Mikro seviyede yapılan optimizasyonlar neticesinde record struct’ların, normal struct’lara oranla 20 kat daha performanslı olduğu gözlemlenmiştir.

Nihai olarak,
Normal şartlarda struct veri türleri class’lara nazaran performans açısından oldukça avantajlıdırlar. record’lar ise struct’lara nazaran class’lara karşı kısmı bir avantaja sahiptirler. C# 10 ile gelen bu record struct’lar ise performansta struct’ları da sollamış bulunuyorlar. Kritik noktalarda kullanmanın koda, performansa ve maliyeti düşürmeye inanılmaz faydası olacağı kanaatindeyim.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Mobil sürümden çık