Stronger_Cracker
- 25 Tem 2022
- 6,396 Mesaj
Aktiflik
Seviye
Deneyim
C# - Cssharp Collection Expressions: Daha Kısa ve Daha Temiz Koleksiyon Tanımlama
SeLamun ALeyüm bugün ; Csharp dilinde koleksiyon oluşturma işi yıllardır yapılıyoruz; ama kabul edelim, bazı yazımlar gereğinden fazla uzun ve dağınık kalabiliyordu. Collection Expressions bu noktada devreye giriyor. Daha kısa, daha okunabilir ve daha modern bir sözdizimi sunarak günlük CShaRP kodunu sadeleştiriyor. Özellikle küçük veri kümeleri, sabit başlangıç listeleri ve metot çağrılarında farkı hemen hissediliyor.
Bugün ele aldığımız Collection Expressions nedir?
Collection Expressions, koleksiyon benzeri verileri köşeli parantez kullanarak daha kısa ve daha okunabilir şekilde ifade etmemizi sağlayan modern bir Cshap sözdizimidir.
Yani şu mantığı getirir:
Bu yapı tek başına “her zaman liste” anlamına gelmez. Esas mesele, hedef türün ne olduğudur. Yani derleyici bunu atandığı veya gönderildiği tipe göre yorumlar.
Örnek:
Burada aynı sözdizimi kullanılıyor; ancak sonuç, hedef türe göre dizi veya liste olarak oluşur.
Eski koleksiyon oluşturma yöntemleri ile farkı ne?
Daha önce genelde şöyle yazıyorduk:
Yeni sözdizimi ile aynı işi daha sade yazabiliyoruz:
Buradaki temel farklar:
Yeni sözdizimi nasıl çalışıyor?
En temel kullanım:
Boş koleksiyon yazımı da daha nettir:
Bir de dikkat çeken güzel tarafı, başka koleksiyonları yayabilmektir:
Buradaki .. ifadesi, mevcut koleksiyonun elemanlarını tek tek yeni koleksiyonun içine yayar. Bu sayede birden fazla dizi veya listeyi daha kısa ve okunabilir şekilde birleştirebiliriz. Özellikle başlangıç verisi oluştururken veya birden fazla kaynaktan gelen verileri tek koleksiyonda toplarken temiz bir kullanım sunar.
Bir başka basit örnek:
Bu örnekte zorunluRoller içindeki elemanlar, ardından ekRoller içindeki elemanlar yeni koleksiyonun içine sırayla eklenir. En sona da tek bir eleman olarak "SuperAdmin" eklenir.
Yani sonuç şu mantıkta oluşur:
Bir başka basit örnek:
Burada sabitIdler ve yeniIdler dizilerindeki tüm elemanlar, tumIdler adlı yeni dizinin içine sırasıyla eklenir. Yani iki ayrı koleksiyon, tek bir koleksiyon hâlinde birleştirilmiş olur.
.. Kullanmazsan tek bir öge gibi algılanır fakat sen .. yazarsan tek tek elemanları alır.
Eski ve yeni sözdizimi kısa karşılaştırmalar
1) Dizi oluşturma
2) Liste oluşturma
3) Koleksiyon birleştirme
Yeni yaklaşım özellikle “başlangıç verisi oluşturma” ve “birkaç kaynaktan koleksiyon birleştirme” işlerinde daha rahat okunuyor. (Yeni demem bu güncelleme ile gelen birşey değil)
Eğer burayı okuyorsan ne mutlu. gece gece emek zamanım boşa vermemiş olmak sevindirir. eğer okumadan yorum yapıyorsan "seni bulacammmm!"
Metot parametrelerinde ve günlük kullanımda ne avantaj sağlar? Farklı bir başlıkta açmak istemedim ( :?)
Günlük hayatta en güzel kullanım alanlarından biri, kısa koleksiyonları doğrudan metoda göndermektir.
Örnek:
Bu kullanımın artıları:
Bir başka örnek:
Eskiden bunun için çoğu geliştirici önce küçük bir dizi veya liste tanımlıyordu. Şimdi ihtiyaç anında doğrudan ifade edilebiliyor.
Okunabilirlik, sadelik ve bakım açısından neden değerli?
Collection Expressions sadece “daha kısa yazmak” için önemli değil. Asıl değer şurada:
Özellikle junior geliştiriciler için de güzel bir kazanım var: Kodun “gürültüsü” azalınca asıl iş mantığı daha görünür olur.
Kısa ve öğretici küçük örnekler
Örnek 1: Sabit başlangıç verisi
Örnek 2: Birden fazla kaynağı birleştirme
Örnek 3: Metoda kısa veri gönderme
Bazı Üstat abilerden tavsiyeler -> dikkat edilmesi gerekenler
-Her yerde var ile doğal tür beklemeyin. Collection expressions çoğu zaman hedef türe ihtiyaç duyar.
-Kod kısa diye her durumda otomatik olarak “daha iyi” değildir. Çok karmaşık veri kurulumlarında bazen klasik yazım daha açık olabilir.
-Takım içinde eski sürüm kullanan projeler varsa dil sürüm uyumunu kontrol edin.
-Boş ifade olan [] bazı senaryolarda bağlama göre belirsizlik oluşturabilir; hedef tür netse sorun yaşamazsınız.
Avantajlar
Daha kısa ve modern sözdizimi
Koleksiyon başlatmayı sadeleştirir
Küçük veri kümelerinde okunabilirliği artırır
Metot çağrılarında akıcı kullanım sağlar
Birleştirme senaryolarında daha temiz görünür
The ENd
Collection Expressions, sadece daha kısa kod yazmak için eklenmiş bir sözdizimi değildir. Doğru kullanıldığında kodu daha temiz, daha anlaşılır ve daha bakımı kolay hâle getirir. Özellikle sabit başlangıç verileri, küçük koleksiyonlar ve metot çağrılarında oldukça faydalıdır. Yeni dil özelliklerini öğrenirken en iyi yaklaşım, önce küçük yerlerde kullanmak; sonra ekip standardına dönüştürmektir.
SeLamun ALeyüm bugün ; Csharp dilinde koleksiyon oluşturma işi yıllardır yapılıyoruz; ama kabul edelim, bazı yazımlar gereğinden fazla uzun ve dağınık kalabiliyordu. Collection Expressions bu noktada devreye giriyor. Daha kısa, daha okunabilir ve daha modern bir sözdizimi sunarak günlük CShaRP kodunu sadeleştiriyor. Özellikle küçük veri kümeleri, sabit başlangıç listeleri ve metot çağrılarında farkı hemen hissediliyor.
Bugün ele aldığımız Collection Expressions nedir?
Collection Expressions, koleksiyon benzeri verileri köşeli parantez kullanarak daha kısa ve daha okunabilir şekilde ifade etmemizi sağlayan modern bir Cshap sözdizimidir.
Yani şu mantığı getirir:
C#:
[1, 2, 3]
["Muhammed", "Osman", "Ayşe"]
[]
Bu yapı tek başına “her zaman liste” anlamına gelmez. Esas mesele, hedef türün ne olduğudur. Yani derleyici bunu atandığı veya gönderildiği tipe göre yorumlar.
Örnek:
C#:
int[] sayilar = [1, 2, 3];
List<string> isimler = ["Muhammed", "Osman", "Ayşe"];
Burada aynı sözdizimi kullanılıyor; ancak sonuç, hedef türe göre dizi veya liste olarak oluşur.
Eski koleksiyon oluşturma yöntemleri ile farkı ne?
Daha önce genelde şöyle yazıyorduk:
C#:
int[] sayilar = new[] { 1, 2, 3 };
List<string> isimler = new List<string>
{
"Muhammed",
"Osman",
"Ayşe"
};
Yeni sözdizimi ile aynı işi daha sade yazabiliyoruz:
C#:
int[] sayilar = [1, 2, 3];
List<string> isimler = ["Muhammed", "Osman", "Ayşe"];
Buradaki temel farklar:
- Daha az sözdizimsel gürültü vardır.
- new, tür tekrarı ve uzun başlatıcı blokları azalır.
- Kod ilk bakışta daha hızlı okunur.
- Özellikle kısa koleksiyonlarda ciddi temizlik sağlar.
Yeni sözdizimi nasıl çalışıyor?
En temel kullanım:
Kod:
int[] puanlar = [10, 20, 30];
List<int> kuyruk = [100, 200, 300];
IEnumerable<string> roller = ["Admin", "Hacker", "Cracker"];
Boş koleksiyon yazımı da daha nettir:
C#:
int[] bosDizi = [];
List<string> bosListe = [];
Bir de dikkat çeken güzel tarafı, başka koleksiyonları yayabilmektir:
C#:
int[] ilk = [1, 2, 3];
int[] ikinci = [4, 5];
int[] hepsi = [[B]..[/B]ilk, [B]..[/B]ikinci, 6];
Buradaki .. ifadesi, mevcut koleksiyonun elemanlarını tek tek yeni koleksiyonun içine yayar. Bu sayede birden fazla dizi veya listeyi daha kısa ve okunabilir şekilde birleştirebiliriz. Özellikle başlangıç verisi oluştururken veya birden fazla kaynaktan gelen verileri tek koleksiyonda toplarken temiz bir kullanım sunar.
Bir başka basit örnek:
C#:
string[] zorunluRoller = ["Admin", "Editor"];
string[] ekRoller = ["Uye", "Misafir"];
string[] tumRoller = [..zorunluRoller, ..ekRoller, "SuperAdmin"];
Bu örnekte zorunluRoller içindeki elemanlar, ardından ekRoller içindeki elemanlar yeni koleksiyonun içine sırayla eklenir. En sona da tek bir eleman olarak "SuperAdmin" eklenir.
Yani sonuç şu mantıkta oluşur:
C#:
["Admin", "Editor", "Uye", "Misafir", "SuperAdmin"]
Bir başka basit örnek:
C#:
int[] sabitIdler = [100, 101];
int[] yeniIdler = [200, 201, 202];
int[] tumIdler = [..sabitIdler, ..yeniIdler];
Burada sabitIdler ve yeniIdler dizilerindeki tüm elemanlar, tumIdler adlı yeni dizinin içine sırasıyla eklenir. Yani iki ayrı koleksiyon, tek bir koleksiyon hâlinde birleştirilmiş olur.
.. Kullanmazsan tek bir öge gibi algılanır fakat sen .. yazarsan tek tek elemanları alır.
Eski ve yeni sözdizimi kısa karşılaştırmalar
1) Dizi oluşturma
C#:
// Eski
string[] sehirler = new[] { "Yozgat", "Ankara", "Sivas" };
// Yeni
string[] sehirler2 = ["Yozgat", "Ankara", "Sivas"];
2) Liste oluşturma
C#:
// Eski
List<int> idler = new List<int> { 5, 10, 15 };
// Yeni
List<int> idler2 = [5, 10, 15];
3) Koleksiyon birleştirme
C#:
// Eski
List<int> tumSayilar = new List<int>();
tumSayilar.AddRange(birinciListe);
tumSayilar.AddRange(ikinciListe);
tumSayilar.Add(99);
// Yeni
List<int> tumSayilar = [..birinciListe, ..ikinciListe, 99];
Yeni yaklaşım özellikle “başlangıç verisi oluşturma” ve “birkaç kaynaktan koleksiyon birleştirme” işlerinde daha rahat okunuyor. (Yeni demem bu güncelleme ile gelen birşey değil)
Eğer burayı okuyorsan ne mutlu. gece gece emek zamanım boşa vermemiş olmak sevindirir. eğer okumadan yorum yapıyorsan "seni bulacammmm!"
Metot parametrelerinde ve günlük kullanımda ne avantaj sağlar? Farklı bir başlıkta açmak istemedim ( :?)
Günlük hayatta en güzel kullanım alanlarından biri, kısa koleksiyonları doğrudan metoda göndermektir.
Örnek:
C#:
void Yazdir(IEnumerable<string> veriler)
{
foreach (var veri in veriler)
{
Console.WriteLine(veri);
}
}
Yazdir(["C#", "SQL", "Linux"]);
Bu kullanımın artıları:
- Önce değişken tanımlama zorunluluğunu azaltır.
- Tek kullanımlık koleksiyonlarda kodu kısaltır.
- Test, demo, örnek ve yardımcı metot senaryolarında çok temiz görünür.
Bir başka örnek:
C#:
bool HepsiPozitifMi(IEnumerable<int> sayilar)
{
return sayilar.All(s => s > 0);
}
bool sonuc = HepsiPozitifMi([3, 8, 15]);
Eskiden bunun için çoğu geliştirici önce küçük bir dizi veya liste tanımlıyordu. Şimdi ihtiyaç anında doğrudan ifade edilebiliyor.
Okunabilirlik, sadelik ve bakım açısından neden değerli?
Collection Expressions sadece “daha kısa yazmak” için önemli değil. Asıl değer şurada:
- Niyet daha net görünür: “Burada bir koleksiyon var” mesajı hemen anlaşılır.
- Gereksiz tekrar azalır: Tür ve başlatma kalıbı sürekli tekrar etmez.
- Kod gözle taranabilir hâle gelir: Özellikle aynı sınıfta çok sayıda sabit veri varsa fark edilir.
- Refactor sürecini kolaylaştırır: Ufak başlangıç koleksiyonları daha sade kaldığı için bakım maliyeti düşer.
Özellikle junior geliştiriciler için de güzel bir kazanım var: Kodun “gürültüsü” azalınca asıl iş mantığı daha görünür olur.
Kısa ve öğretici küçük örnekler
Örnek 1: Sabit başlangıç verisi
C#:
List<string> durumlar = ["Bekliyor", "İşleniyor", "Tamamlandı"];
foreach (var durum in durumlar)
{
Console.WriteLine(durum);
}
Örnek 2: Birden fazla kaynağı birleştirme
C#:
int[] zorunlu = [1, 2];
int[] secmeli = [7, 8];
List<int> tumDersler = [..zorunlu, ..secmeli, 99];
Örnek 3: Metoda kısa veri gönderme
C#:
void Logla(IEnumerable<string> mesajlar)
{
foreach (var mesaj in mesajlar)
{
Console.WriteLine(mesaj);
}
}
Logla(["Bağlantı açıldı", "Veri okundu", "İşlem tamamlandı"]);
Bazı Üstat abilerden tavsiyeler -> dikkat edilmesi gerekenler
-Her yerde var ile doğal tür beklemeyin. Collection expressions çoğu zaman hedef türe ihtiyaç duyar.
-Kod kısa diye her durumda otomatik olarak “daha iyi” değildir. Çok karmaşık veri kurulumlarında bazen klasik yazım daha açık olabilir.
-Takım içinde eski sürüm kullanan projeler varsa dil sürüm uyumunu kontrol edin.
-Boş ifade olan [] bazı senaryolarda bağlama göre belirsizlik oluşturabilir; hedef tür netse sorun yaşamazsınız.
Avantajlar
Daha kısa ve modern sözdizimi
Koleksiyon başlatmayı sadeleştirir
Küçük veri kümelerinde okunabilirliği artırır
Metot çağrılarında akıcı kullanım sağlar
Birleştirme senaryolarında daha temiz görünür
The ENd
Collection Expressions, sadece daha kısa kod yazmak için eklenmiş bir sözdizimi değildir. Doğru kullanıldığında kodu daha temiz, daha anlaşılır ve daha bakımı kolay hâle getirir. Özellikle sabit başlangıç verileri, küçük koleksiyonlar ve metot çağrılarında oldukça faydalıdır. Yeni dil özelliklerini öğrenirken en iyi yaklaşım, önce küçük yerlerde kullanmak; sonra ekip standardına dönüştürmektir.
