İçeriğe geç

Diziler ve Listeler: Kod Dünyasının Temel Taşları (Array vs List)

Selam millet! Nasılsınız, iyi misiniz? Bu aralar yine kodlarla haşır neşirim, malumunuz artık bir blog yazmaya başladık tekrar, eskilerde olduğu gibi. Hatırlayanlar bilir, 20’li yaşlarımda ne bloglar yazardım, ne de kalırdım 😀 Şimdi yine aynı heyecanla, aynı samimiyetle devam diyoruz.

Bugün aklıma takılan, aslında hepimizin zaman zaman kafasını karıştıran bir konuya değinmek istedim: Diziler ve Listeler! Hani bazen kod yazarken hangisini kullanacağımıza karar veremiyoruz ya, işte tam da o anları anlatacağım size. Kendi başıma geldiği için biliyorum, bu ayrım ilk başta biraz kafa karıştırıcı olabiliyor. Ama merak etmeyin, basit analojilerle, bol bol örnekle öyle bir anlatacağım ki, siz de artık bu ikisini birbirine karıştırmayacaksınız.

Şimdi düşünün, bir markete gittiniz. Elinizde bir alışveriş listeniz var. Bu listede almanız gerekenler tek tek yazılı, değil mi? Mesela: Süt, yumurta, ekmek, peynir. Bu liste, aslında bizim ‘List’ dediğimiz yapının ta kendisi gibi.

Peki, diyelim ki bu listedeki her şeyi aldınız ve eve geldiniz. Şimdi bu aldıklarınızı dolaba yerleştirmeniz lazım. Sütleri yan yana, yumurtaları kutularına, ekmekleri ekmekliğe… İşte bu yerleştirme eylemi, her bir öğenin belirli bir sıraya konulması, bize ‘Array’ yani diziyi hatırlatıyor. Dizi dediğimiz şey, aslında sabit boyutlu bir yapı. Yani siz bir dizi oluştururken, ‘ben bu diziye en fazla 10 eleman koyacağım’ diyorsunuz ve o da öyle kalıyor. Sonradan ‘aa bir tane daha ekleyeyim’ derseniz, vay halinize!

Bu arada, bir keresinde bir projede kullanıcı bilgilerini saklamak için bir dizi kullanmıştım. Başlangıçta 100 kişi diye düşünmüştüm. Sonra bir baktım, proje popülerleşmiş, kullanıcı sayısı 1000’i geçmiş! O zaman anladım ki, diziler bazen yetersiz kalabiliyor, özellikle de boyutun önceden belli olmadığı durumlarda. Neyse ki daha sonra listelerle tanıştım da kurtuldum o dertten.

Şimdi gelelim teknik kısmına. Diziler (Array), genellikle bellekte ardışık olarak yer kaplayan, sabit boyutlu veri koleksiyonlarıdır. Yani siz bir dizi tanımladığınızda, bilgisayar bellekte ona belirli bir yer ayırır ve siz o yerin dışına çıkamazsınız. Bu da performans açısından iyi bir şey, çünkü bilgisayarın o elemana ulaşması çok daha hızlı olur. Tıpkı dolaptaki yumurta kutusunu hemen bulmak gibi.

Listeler (List) ise, daha esnek bir yapı sunar. Boyutu dinamiktir, yani siz eleman ekledikçe listenin boyutu otomatik olarak artar. Bu da bize büyük bir kolaylık sağlar, değil mi? Tıpkı marketteki alışveriş listenize sonradan aklınıza gelen bir şeyi eklemek gibi. Tabii bu esnekliğin de bir bedeli var. Listenin boyutu arttıkça, elemanlara erişim biraz daha yavaşlayabilir, çünkü bilgisayarın bellekte yeni bir yer bulup elemanları oraya taşıması gerekebilir. Ama çoğu zaman bu farkı hissetmeyiz bile.

Şöyle bir örnek verelim:

Diyelim ki bir oyun yapıyorsunuz ve oyuncuların isimlerini bir yerde saklamanız gerekiyor. Başlangıçta belki 10 oyuncu olacak diye düşünürsünüz ve bir dizi kullanırsınız. Ama sonra oyunun popülerleştiğini ve her gün yeni oyuncuların katıldığını fark edersiniz. İşte tam bu noktada diziyle başa çıkmak zorlaşır.

Öncelikle hatalı bir dizi kullanımı görelim:

// YANLIŞ: Sabit boyutlu dizi, eleman eklendiğinde hata verir string[] oyuncuIsimleri = new string[10]; // Sadece 10 oyuncu alabilir oyuncuIsimleri[0] = "Ali"; oyuncuIsimleri[1] = "Veli"; // ... oyuncuIsimleri[9] = "Ayşe";

// Şimdi 11. oyuncuyu eklemeye çalıştığımızda hata alacağız! // oyuncuIsimleri[10] = "Fatma"; // IndexOutOfRangeException hatası!

Gördüğünüz gibi, 10 elemanlık bir diziye 11. elemanı eklemeye çalıştığınızda hata alıyorsunuz. Bu da oyunun çökmesine veya beklenmedik sorunlara yol açabilir. Ne komik değil mi? Kendi yazdığım programlar bile bazen sınıfta kalıyor 🙂

Şimdi gelelim doğru, yani daha esnek bir kullanıma. İşte burada List devreye giriyor:

// DOĞRU: Dinamik boyutlu List, istediğiniz kadar eleman ekleyebilirsiniz using System.Collections.Generic; // Bu namespace'i eklemeyi unutmayın!

List oyuncuIsimleriList = new List(); oyuncuIsimleriList.Add("Ali"); oyuncuIsimleriList.Add("Veli"); // ... ve istediğiniz kadar eklemeye devam edin oyuncuIsimleriList.Add("Ayşe"); oyuncuIsimleriList.Add("Fatma"); // Hata vermez! Boyut otomatik artar. oyuncuIsimleriList.Add("Zeynep");

Console.WriteLine($"Oyuncu sayısı: {oyuncuIsimleriList.Count}"); // Kaç eleman olduğunu gösterir foreach (var isim in oyuncuIsimleriList) { Console.WriteLine(isim); }

İşte bu kadar basit! Listeler, özellikle eleman sayısının önceden belli olmadığı veya sık sık değiştiği durumlarda hayat kurtarıcıdır. C#’ta `System.Collections.Generic` namespace’i altında bulunan `List` yapısı, bu iş için biçilmiş kaftan. ‘T’ yerine hangi türden veriler saklayacaksanız onu yazıyorsunuz, mesela `List` tam sayılar için, `List` metinler için gibi.

Neticede, diziler (Array) performansın ön planda olduğu ve eleman sayısının sabit kaldığı durumlarda iyidir. Listeler ise esnekliğin ve dinamik boyutun önemli olduğu durumlarda tercih edilmelidir. Hani bazen bir şeyi seçerken kararsız kalırız ya, hangisi daha iyi, hangisi daha doğru diye. İşte bu ikisi de tam olarak böyle. Birinin kendine göre avantajları, diğerinin de dezavantajları var.

Bana sorarsanız, modern programlamada, hele de web geliştirirken veya mobil uygulamalar yaparken, çoğu zaman listeler daha pratik ve daha kullanışlı oluyor. Çünkü ne zaman ne kadar veri geleceği belli olmuyor. Ama tabii, performansın kritik olduğu yerlerde, mesela çok büyük veri kümeleriyle uğraşırken veya oyun motorlarında, dizilerin hala önemli bir yeri var.

Umarım bu anlattıklarım kafanızdaki soru işaretlerini biraz olsun gidermiştir. Unutmayın, teknoloji sürekli gelişiyor ve biz de bu gelişimlere ayak uydurmaya devam ediyoruz. Her zaman öğrenmeye açık olmak lazım.

Bu arada, sizler de bu konuda yaşadığınız ilginç deneyimleri veya tercihlerinizi yorumlarda benimle paylaşın. Belki benim bilmediğim harika bir kullanım yöntemi vardır, kim bilir? Ne güzel değil mi? 🙂 Kendi programım sınıfta kaldı derken bile bir şeyler öğrenmiş oluyoruz sonuçta.

Bir sonraki yazıda görüşmek üzere, kendinize iyi bakın!

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.