
8. Diziler (Arrays) ve Koleksiyonlar (List, Dictionary, vb.)
Delphi programlama dilinde, verileri düzenli bir şekilde saklamak ve yönetmek için diziler (arrays) ve koleksiyonlar (collections) önemli araçlardır. Bu yapılar, aynı türden birden fazla veriyi tek bir değişken adı altında toplamamızı ve bu verilere kolayca erişmemizi sağlar. Bu makalede, Delphi’de dizilerin ve koleksiyonların ne olduğunu, nasıl kullanıldığını ve hangi durumlarda tercih edilmesi gerektiğini detaylı bir şekilde inceleyeceğiz.
Diziler (Arrays)
Diziler, aynı türden verilerin sıralı bir şekilde saklandığı veri yapılarıdır. Delphi’de diziler statik veya dinamik olarak tanımlanabilir. Statik dizilerin boyutu derleme zamanında belirlenirken, dinamik dizilerin boyutu çalışma zamanında değiştirilebilir.
Statik Diziler
Statik diziler, boyutları önceden belirlenmiş olan dizilerdir. Tanımlanırken eleman sayısı belirtilir ve bu sayı programın çalışması sırasında değiştirilemez.
Tanımlama:
Statik bir dizi tanımlamak için aşağıdaki sözdizimi kullanılır:
var
diziAdi: array[baslangicIndeksi..bitisIndeksi] of veriTipi;
Örnek:
var
sayilar: array[1..5] of Integer;
isimler: array[0..9] of String;
Bu örnekte, sayilar
adında 1’den 5’e kadar indekslere sahip integer türünde bir dizi ve isimler
adında 0’dan 9’a kadar indekslere sahip string türünde bir dizi tanımlanmıştır.
Değer Atama ve Erişim:
Dizinin elemanlarına değer atamak ve erişmek için indeksler kullanılır:
sayilar[1] := 10;
sayilar[2] := 20;
var ilkSayi: Integer := sayilar[1];
Dinamik Diziler
Dinamik diziler, boyutları çalışma zamanında belirlenen ve değiştirilebilen dizilerdir. Bu, programın ihtiyaçlarına göre dizi boyutunu ayarlama esnekliği sağlar.
Tanımlama:
Dinamik bir dizi tanımlamak için aşağıdaki sözdizimi kullanılır:
var
diziAdi: array of veriTipi;
Örnek:
var
notlar: array of Double;
ogrenciIsimleri: array of String;
Bu örnekte, notlar
adında double türünde ve ogrenciIsimleri
adında string türünde dinamik diziler tanımlanmıştır. Ancak, bu dizilerin boyutları henüz belirlenmemiştir.
Boyutlandırma:
Dinamik dizilerin boyutunu belirlemek için SetLength
fonksiyonu kullanılır:
SetLength(notlar, 100); // notlar dizisinin boyutunu 100 olarak ayarla
SetLength(ogrenciIsimleri, 50); // ogrenciIsimleri dizisinin boyutunu 50 olarak ayarla
Değer Atama ve Erişim:
Dinamik dizilerin elemanlarına değer atamak ve erişmek için statik dizilerde olduğu gibi indeksler kullanılır:
notlar[0] := 95.5;
ogrenciIsimleri[0] := 'Ahmet';
Koleksiyonlar (Collections)
Koleksiyonlar, dizilere göre daha esnek ve gelişmiş veri yapılarıdır. Delphi’de birçok farklı koleksiyon türü bulunur. Bunlardan bazıları şunlardır:
- TList: Sıralı bir liste oluşturmak için kullanılır.
- TDictionary: Anahtar-değer çiftlerini saklamak için kullanılır.
- TStringList: String türündeki verileri saklamak ve yönetmek için kullanılır.
- TQueue: İlk giren ilk çıkar (FIFO) prensibine göre çalışan bir kuyruk yapısıdır.
- TStack: Son giren ilk çıkar (LIFO) prensibine göre çalışan bir yığın yapısıdır.
TList
TList
, nesneleri veya pointer’ları saklamak için kullanılan sıralı bir listedir. Dinamik olarak büyüyebilir ve küçülebilir.
Kullanımı:
uses
System.Generics.Collections;
var
liste: TList<Integer>;
i: Integer;
begin
liste := TList<Integer>.Create;
try
liste.Add(10);
liste.Add(20);
liste.Add(30);
for i := 0 to liste.Count - 1 do
ShowMessage(IntToStr(liste[i]));
finally
liste.Free;
end;
end;
TDictionary
TDictionary
, anahtar-değer çiftlerini saklamak için kullanılan bir koleksiyondur. Her anahtar benzersiz olmalıdır. Bu yapı, verilere anahtar üzerinden hızlı erişim sağlar.
Kullanımı:
uses
System.Generics.Collections;
var
sozluk: TDictionary<String, Integer>;
begin
sozluk := TDictionary<String, Integer>.Create;
try
sozluk.Add('Ahmet', 25);
sozluk.Add('Ayşe', 30);
ShowMessage(IntToStr(sozluk['Ahmet'])); // 25
finally
sozluk.Free;
end;
end;
TStringList
TStringList
, string türündeki verileri saklamak ve yönetmek için özel olarak tasarlanmış bir koleksiyondur. Metin dosyalarını okuma, yazma, sıralama ve arama gibi işlemler için kullanışlı yöntemler sunar.
Kullanımı:
var
stringList: TStringList;
i: Integer;
begin
stringList := TStringList.Create;
try
stringList.Add('Elma');
stringList.Add('Armut');
stringList.Add('Kiraz');
for i := 0 to stringList.Count - 1 do
ShowMessage(stringList[i]);
finally
stringList.Free;
end;
end;
Diziler mi, Koleksiyonlar mı?
Diziler ve koleksiyonlar arasındaki temel farklar ve ne zaman hangisinin tercih edilmesi gerektiği aşağıda özetlenmiştir:
- Boyut Esnekliği: Dinamik dizilerin boyutu çalışma zamanında değiştirilebilirken, statik dizilerin boyutu sabittir. Koleksiyonlar genellikle dinamik olarak büyüyebilir ve küçülebilir.
- Veri Türü: Diziler belirli bir veri türündeki elemanları saklarken, bazı koleksiyonlar (örneğin
TList
) farklı türdeki nesneleri saklayabilir. Ancak, tipleri önceden belirtmek generic koleksiyonlar ile mümkündür. - Fonksiyonellik: Koleksiyonlar, dizilere göre daha fazla fonksiyonellik sunar. Örneğin,
TStringList
metin dosyalarını okuma/yazma, sıralama ve arama gibi işlemleri kolaylaştıran yöntemler içerir. - Performans: Dizilere erişim genellikle koleksiyonlara göre daha hızlıdır. Ancak, koleksiyonların sunduğu ek fonksiyonellik ve esneklik, bazı durumlarda performanstan ödün vermeye değer olabilir.
Genel olarak:
- Eğer boyutun önceden bilindiği ve nadiren değiştiği durumlarda diziler tercih edilebilir.
- Eğer boyutun çalışma zamanında değişmesi gerekiyorsa veya daha fazla fonksiyonelliğe ihtiyaç varsa koleksiyonlar daha uygun olabilir.
Özet
Delphi’de diziler ve koleksiyonlar, verileri düzenli bir şekilde saklamak ve yönetmek için güçlü araçlardır. Diziler, aynı türden verileri sıralı bir şekilde saklarken, koleksiyonlar daha esnek ve gelişmiş veri yapılarıdır. Hangi yapının kullanılacağı, uygulamanın gereksinimlerine ve performans ihtiyaçlarına bağlıdır. Bu makalede, dizilerin ve koleksiyonların temel kavramlarını, kullanım örneklerini ve ne zaman hangisinin tercih edilmesi gerektiğini ayrıntılı olarak inceledik. Bu bilgiler, Delphi projelerinizde daha etkili veri yönetimi stratejileri geliştirmenize yardımcı olacaktır.
Bir yanıt bırakın