8. Diziler (Arrays) ve Koleksiyonlar (List, Dictionary, vb.)

image text

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:

Pascal
var
  diziAdi: array[baslangicIndeksi..bitisIndeksi] of veriTipi;

Örnek:

Pascal
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:

Pascal
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:

Pascal
var
  diziAdi: array of veriTipi;

Örnek:

Pascal
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:

Pascal
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:

Pascal
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ı:

Pascal
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ı:

Pascal
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ı:

Pascal
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.

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*