.NET 8 – Collection Expressions
Merhaba,
Bu içeriğimizde .NET 8 ile C# programlama diline gelmiş olan yeni koleksiyonel syntax yapısından bahsediyor olacağız. Malumunuz C#’ta bir koleksiyon ya da dizi oluşturabilmek için genellikle aşağıdaki söz dizimlerinden istifade ediyorduk.
char[] charArray = new char[3] { 'a', 'b', 'c' };
string[] stringArray = new string[] { "A", "B", "C" };
List<byte> byteCollection = new() { 3, 5, 7 };
Artık bu yapılarında tanımlarını [ – ] operatörleri eşliğinde daha pratik ve okunabilir bir şekilde aşağıdaki gibi uygulayabilmekteyiz;
char[] charArray = ['a', 'b', 'c'];
string[] stringArray = ["A", "B", "C"];
List<byte> byteCollection = [3, 5, 7];
Görüldüğü üzere syntax açısından kod maliyeti oldukça azalmıştır. Şimdi gelin bu yeni özelliğin, özellikle yazılım operasyonlarında yoğun bir şekilde kullanılmaları ve tercih edilmelerinden dolayı koleksiyonlar üzerinde getirmiş olduğu farklı varyasyonları değerlendirelim;
class MyClass
{
ImmutableArray<string> names = ["Hüseyin", "Rıfkı", "Şuayip", "Bekir"];
public IEnumerable<int> Numbers => [3, 5, 6, 8, 5, 34, 23, 4, 26];
public int[] GetNumbers() => [3, 23, 5, 236, 35];
}
Ayrıca sabit değerlerin dışında bir diziyi ya da koleksiyonu aşağıdaki gibi ilgili operatörler eşliğinde değişkenler ile de oluşturabilmekteyiz;
string hydrogen = "H"; string helium = "He"; string lithium = "Li"; string beryllium = "Be"; string boron = "B"; string carbon = "C"; string nitrogen = "N"; string oxygen = "O"; string fluorine = "F"; string neon = "Ne"; string[] elements = [hydrogen, helium, lithium, beryllium, boron, carbon, nitrogen, oxygen, fluorine, neon];
Tüm bunların dışında yeni syntax’ın getirisi olarak birden fazla koleksiyonu ya da diziyi Spread Element (..) aracılığıyla tek bir koleksiyon ya da dizi de birleştirebilir ve aşağıdaki örnekte olduğu gibi bu birleştirme sürecinde ekstradan da elemanlar ekleyebiliriz;
string[] vowels = ["a", "e", "i", "o", "u"];
string[] consonants = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "q", "r", "s", "t", "v", "w", "x", "z"];
string[] alphabet = [.. vowels, .. consonants, "y"];
Compiler, [ – ] operatörleriyle bildirilen bir koleksiyonu oluşturmanın en performanslı yolunu belirleyebilmek için statik bir analiz yöntemi kullanmaktadır. Bunu şöyle örneklendirebiliriz. Eğer ki aşağıdaki gibi [] ifadesiyle boş bir dizi tanımlıyor olsaydık bu compiler açısından Array.Empty olarak gerçekleştirilecektir.
Davranış;
int[] numbers = [];
Asıl olan;
int[] numbers = Array.Empty<int>();
Velhasıl kelam,
.NET 8 ile gelmiş olan collection expressions özelliği koleksiyon tanımlama ve kullanma süreçlerinde oldukça ilginç bir kolaylık getirmekte ve daha da önemlisi spread element davranışı sayesinde koleksiyon türleri arasında hızlıca geçiş yapılmasını kolaylaştırmaktadır. Ee artık bizlere düşen ihtiyaç noktalarında bu özellikten istifade ederek kodu daha sade ve dinamik tutmaktır 😉
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
