İçeriğe geç

Diziler ve Listeler: Hangisi Ne Zaman Kullanılır? (Basit Anlatım)

Selam millet! Nasılsınız, iyi misiniz? Biliyorsunuz, programlama dünyasında bazen öyle şeyler olur ki, insan ‘Aa, bu ne şimdi?’ diye kalır. İşte diziler ve listeler de benim için biraz öyleydi başlangıçta. Hani sanki iki kardeş gibi duruyorlar ama aralarında incecik, ama bir o kadar da önemli farklar var. Neyse efendim, lafı çok uzatmadan konuya girelim.

Şimdi düşünün, bir süpermarkete gittiniz. Elinizde bir alışveriş listesi var. Bu listede ne var? Süt, peynir, ekmek, yumurta… Tamam, liste güzel ama sizin market arabasına bu ürünleri koymanız lazım değil mi? İşte bu noktada diziler ve listeler devreye giriyor aslında.

Öncelikle dizilerden başlayalım. Diziler, sabit boyutlu, aynı tipteki elemanları saklayan yapılardır. Yani siz bir dizi oluştururken, ‘Benim bu dizimde 10 tane tam sayı olacak’ dersiniz ve bitti. Sonra içine sayıları doldurursunuz. Ama ‘Aa, bir tane daha ekleyeyim’ derseniz, eyvah ki ne eyvah! Dizinin boyutu bellidir, onu değiştiremezsiniz. Hani böyle eski püskü bir çekmecen var ya, içinde ne kadar yer varsa o kadar eşya sığar, fazlası taşıyor? Diziler de biraz öyle. Bu yüzden, eğer ne kadar veri geleceğini önceden kesin olarak biliyorsanız, diziler biçilmiş kaftan olabilir. Mesela bir oyun geliştirirken, 10 kişilik bir oyuncu listesi mi tutacaksınız? İşte o zaman dizi harika iş görür.

Peki ya listeler? Listeler ise daha esnek, dinamik yapılar. Ne demek bu? Dilediğiniz kadar eleman ekleyip çıkarabilirsiniz. Hani o alışveriş listesi varya, ‘Süt, peynir, ekmek… Aa, bir de muz almayı unutmuşum!’ deyip listeye muzu eklemek gibi. Veya ‘Bu peyniri almaktan vazgeçtim’ deyip listeden çıkarmak gibi. İşte listeler tam olarak bunu yapar. Bu yüzden, ne kadar veri geleceği belli olmayan durumlarda veya verinin sık sık değişeceği senaryolarda listeler imdadımıza yetişir. Mesela bir web sitesine gelen kullanıcı yorumlarını mı tutacaksınız? Her an yeni bir yorum gelebilir, eski bir yorum silinebilir. İşte o zaman liste kullanmak en mantıklısı. Bu arada, C# gibi dillerde `List` sınıfı bunun en güzel örneği. ‘T’ yerine de istediğiniz veri tipini koyabiliyorsunuz.

Şimdi gelelim benim bir zamanlar yaşadığım bir teknik fiyaskoya. Bir proje geliştiriyordum, kullanıcıların bir form doldurmasını istiyorduk. Formda kaç tane ürün seçeceklerini bilmiyorduk. Başlangıçta ‘En fazla 5 ürün seçerler’ diye düşünüp bir dizi oluşturduk. Sonra ne oldu dersiniz? Bir baktık ki bazı kullanıcılar 10-15 tane ürün seçiyor! Tabii bizim o dizi hemen patladı, hata üstüne hata. Kendi yazdığım kod sınıfta kaldı yani 🙂 Neyse ki hemen listeye geçiş yaptık da kurtardık projeyi. Bu olaydan sonra dizileri ne zaman kullanmam gerektiğini daha iyi anladım sanırım.

Açıkçası, bu işleri öğrenirken en çok zorlandığım noktalardan biri buydu. Sürekli ‘Dizi mi kullanmalıyım, liste mi?’ diye düşünürdüm. Sonra fark ettim ki, aslında tamamen ihtiyaca yönelik bir seçim. Eğer sabit bir boyut ve veri tipi sizin için yeterliyse, dizi daha performanslı olabilir. Çünkü boyut sabit olduğu için hafıza yönetimi daha kolay olur. Ama işin içine dinamizm, esneklik giriyorsa, kesinlikle listelere yönelmek lazım. Tabii bu performans farkı çok büyük verilerde daha belirgin hale geliyor, küçük projelerde pek hissedilmeyebilir.

Diyelim ki bir uygulamanız var ve kullanıcıların favori ürünlerini kaydedeceksiniz. Başlangıçta ‘Belki 5-10 ürün olur’ diye düşündünüz ve bir dizi oluşturdunuz. Ama sonra baktınız ki bazı kullanıcılar yüzlerce favori ürün ekliyor. İşte tam bu noktada dizinin yetersiz kaldığını göreceksiniz. İşte o zaman `List` veya `List` gibi bir liste kullanmak işleri çok kolaylaştırır. Bu sayede kullanıcılarınızın istediği kadar ürünü rahatlıkla ekleyebilirsiniz. Hatta `Add()` metoduyla kolayca ekleme, `Remove()` metoduyla da silme işlemleri yapabilirsiniz. Ne güzel değil mi?

Bir de işin şöyle bir boyutu var: Eğer siz bir veriyi bir kere oluşturup, sonra onu değiştirmeyecekseniz, belki de dizi kullanmak daha mantıklı. Çünkü dizilerde elemanlara erişim, listelere göre biraz daha hızlı olabilir. Tabii bu hız farkı dediğim gibi yine büyük veri setlerinde kendini belli eder. Küçük verilerde bunu hissetmek pek mümkün değil. Yani sonuç olarak, ne zaman ne kullanacağınızı bilmek, kodunuzun hem daha anlaşılır hem de daha performanslı olmasını sağlar.

Şimdi bu konuyu bir de kodla pekiştirelim ki iyice otursun kafamızda. Mesela bir kaç tane isim tutacağımızı düşünelim. Önce diziyle deneyelim, sonra da listeyle. Bakalım ne olacak.

// Dizilerde boyut sabittir. 10 elemanlık bir dizi tanımladık. string[] isimlerDizi = new string[3]; // Sadece 3 kişilik yerimiz var

isimlerDizi[0] = "Ali"; isimlerDizi[1] = "Veli"; isimlerDizi[2] = "Ayşe";

// isimlerDizi[3] = "Fatma"; // Buraya bir eleman eklemeye çalışırsak hata alırız! Boyut aşıldı.

Console.WriteLine("Dizi elemanları:"); foreach (var isim in isimlerDizi) { Console.WriteLine(isim); }

Gördüğünüz gibi diziye 3 eleman ekledik ve bitti. Dördüncüyü eklemeye kalktığımızda hata alacağız. Şimdi gelelim listeye.

Listeler ise esnek yapılarıyla bize daha fazla alan tanır.

// Listelerde boyutu istediğimiz gibi değiştirebiliriz. List isimlerListe = new List();

isimlerListe.Add("Ali"); isimlerListe.Add("Veli"); isimlerListe.Add("Ayşe"); isimlerListe.Add("Fatma"); // İstediğimiz kadar ekleyebiliriz!

Console.WriteLine(" Liste elemanları:"); foreach (var isim in isimlerListe) { Console.WriteLine(isim); }

isimlerListe.Remove("Veli"); // Bir elemanı kolayca çıkarabiliyoruz.

Console.WriteLine(" 'Veli' çıkarıldıktan sonra Liste elemanları:"); foreach (var isim in isimlerListe) { Console.WriteLine(isim); }

İşte böyle! Listelerde istediğimiz kadar eleman ekleyip çıkarabiliyoruz. Bu bize büyük bir esneklik sağlıyor. Hani böyle bazen bir şeyi yaparken ‘Keşke şurası da şöyle olsaydı’ dersin ya, işte listeler o ‘keşke’leri ortadan kaldırıyor. Aslında bu konuyu daha detaylı anlatan bir yazı Google’da denk geldim, ilginçti. Orada da benzer örnekler verilmişti.

Sonuç olarak, diziler sabit boyutlu ve aynı tipteki veriler için, listeler ise dinamik boyutlu ve değişken veri sayıları için idealdir. Hangi durumda hangisini kullanmanız gerektiği tamamen sizin projenizin ihtiyacına bağlı. Bana göre, özellikle başlangıç seviyesinde, listelerle başlamak daha güvenli çünkü esneklikleri sayesinde ilk etapta hata yapma olasılığınız azalır. Ama tabii ki dizilerin de yeri ayrı, performans gerektiren yerlerde onları da unutmamak lazım. Yani ne diyelim, her ikisinin de kendine göre bir güzelliği var 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.