- İmmutable, recordların propertyleri create ediltikten sonra artık değiştirilemez.
- Value-Based Equality, aynı record türünün iki instancesi, propertyleri için aynı valuelara sahip olmaları durumunda eşit olduğu anlamına gelir.
‘init’ keyword’ü ile işaretlenen propertyler nesne üretildikte sonra artık değiştirilemezler. Benzer şekilde bir objeyi bütünsel olarak değişmez yapmak istiyorsak burada Recordlar devreye girmektedir. Böylece recordlar sayesinde immutable obje oluşturabiliriz.
Record, bir objenin komple sabit/değişmez olarak kalmasını sağlamakta ve bu durumu güvence altına almaktadır. Böylece bu obje, artık değeri değişmeyeceğinden dolayı esasında objeden ziyade bir değer gözüyle bakılan bir yapıya dönüşmektedir.
Class’lar da verisel olarak nesne ön plandadır ve her bir farklı referansa sahip olan nesne farklı değer olarak algılanmaktadır.
Dolayısıyla Equals(x, y)
karşılaştırması yanlıştır.
Recordlar da ise farklı objelerde de olsa, veriler(property değerleri) aynı olduğu sürece Equals(x, y)
önermesi doğru olacaktır.
Record türünde yaratılacak nesneler aralarında karşılaştırıldıklarında referans olarak değil, verisel olarak değerlendirilir ve veriler eşitse bu nesneler eşit kabul edilir.
UserOne ve UserTwo record type oluşturma şekilleride ikiside aynı şey demektir. İkisi içinde Id ve Name değerleri obje oluşturulacağı zaman belirlenir ve bir daha bu değerler değiştirilemez.
INHERİTANCE
Equals
with Expression
Positional Record
CLASS vs RECORD
- Classların iki instances/objects karşılaştırmak için bellek adrreslerine bakmamız gerekirken recordlar için property values karşılaştırılması yeterlidir. Recordlar için iki nesnenin propertyleri eşitse bu recordlar eşit kabul edilir
- Record, data/properties depolamak için tasarlanırken, Classlar logic/operations/behavior için tasarlanır.
- DTO'lar gibi sadece data taşıyan logic içermeyen yapılar için record kullanabiliriz.
DTO vs RECORD
- DTO'lar ve Recordlar arasında seçim yaparken, uygulamanızın özel gereksinimlerini göz önünde bulundurmanız önemlidir. Transfer edilecek objenin immutable olmasını istiyorsak recordları tercih etmeliyiz. Ancak, uygulamanız eski C# sürümleriyle uyumluluk gerektiriyorsa veya transfer edildikten sonra dataları değiştirebilmeniz gerekiyorsa, DTO'ları tercih edebiliriz.
C# dilinde nesneleri temsil etmek için class, record ve struct gibi farklı türler bulunur.
Peki, bunların farkları nelerdir?
· Class (Referans Tipi)
Bellekte heap üzerinde tutulur.
Referans tipi olduğu için nesne kopyalandığında sadece referansı aktarılır.
Değiştirilebilir (mutable) yapılar için uygundur.
· Record (Referans veya Değer Tipi)
Varsayılan olarak immutable (değiştirilemez) yapıdır.
Value-based equality kullanır (içerik karşılaştırması yapar).
class veya struct olarak tanımlanabilir.
· Struct (Değer Tipi)
Stack üzerinde tutulur (performans açısından avantajlıdır).
Kopyalama yapıldığında yeni bir nesne oluşturulur.
Küçük ve sık kullanılan veri yapıları için uygundur.
Özet:
Referans tipi istiyorsanız: Class veya Record (class)
Değer tipi ve immutable yapı istiyorsanız: Record (struct)
Değer tipi ve mutable yapı istiyorsanız: Struct
Hiç yorum yok:
Yorum Gönder