Diziler
Object pascal her tür değişkenden dizi oluşturulmasına olanak sağlar. Örneğin, integer türden 5 elemanlı bir dizi değişkeni şu şekilde bildirilir;
Object Pascal diğer dillerden farklı olarak özel bir property'e sahiptir; Diziler belirli bir sayıdan başlamak zorunda değildir. Bu nedenle 3 elemana sahip 14 den başlayan bir diziyi aşağıdaki şekilde bildirebiliriz;
Object Pascal dizileri sıfır yada birden itibaren başlamaz ise, bir for döngüsüyle dizi elemanları içinde ilerlerken özel bir özen gösterilmesi gerekmektedir. Delphi derleyicisi High() ve Low() isimli yerleşik fonksiyonlar sunmaktadır. Bunlar sırasıyla dönüş değeri olarak bir dizi değişkeninin alt ve üst sınırlarını döndürür. Bu nedenle aşağıdaki gibi yazdığımız kod sayesinde for döngüsü içinde bu fonksiyonların kullanımı daha az hataya eğimli olup, yönetilmesi daha kolaydır.
Kod: Tümünü seç
var
A: array[14..16] of Integer;
i: Integer;
begin
for i := Low(A) to High(A) do
A[i] := i;
end;
Karakter dizilerine daima 0 ile başlayın, sıfır tabanlı karakter dizileri PChar tipinden değişkenler içeren fonksiyonlara geçirilebilirler.
Birden fazla boyut belirtmek için, boyut listesi aşağıdaki gibi virgülle ayrılır.
Kod: Tümünü seç
var
A: array[1..2, 1..2] of Integer;
Çok boyutlu dizilere erişmek için, küme parantezleri içinde her bir boyutu ayırmak için virgül kullanılır.
Dinamik Diziler
Dinamik diziler boyutları derleme aşamasında bilinmeyen dinamik olarak ayrılmış dizilerdir. Dinamik bir diziyi bildirmek için; boyut belirtmeksizin diziyi tanımlayın.
Kod: Tümünü seç
var
// string tipli dinamik dizi:
Din_Dizi: array of string;
Dinamik dizi kullanılmadan önce, hafızada yer ayırmak için SetLength() yordamı kullanılmalıdır.
Hafızada yer ayrıldıktan sonra, normal dizi gibi dinamik dizinin elemanlarına erişilebilir.
Kod: Tümünü seç
Din_Dizi[0] := 'İyi Günler';
strTemp := Din_Dizi[0];
Dinamik diziler sıfır-tabanlıdır. Dinamik dizilerin ömürleri kısadır, bu nedenle onları kullanırken serbest bırakılmasına gerek yoktur çünkü kapsam dışına çıktıklarında kendiliğinden serbest bırakılırlar. Bununla beraber bir dinamik dizi kapsam dışına çıkmadan önce serbest bırakılmak istenirse (örneğin aşırı miktarda hafıza kullanıyorsa) nil değeri atanır.
Kod: Tümünü seç
Din_Dizi := nil; // Din_Dizi yi serbest bırakır
Dinamik diziler AnsiString'e benzer şekilde başvuru sözdizimi kullanılarak yönetilirler. Aşağıdaki kod parçasının sonunda A1[0] ın değerini hızlıca test etmek istersek;
Kod: Tümünü seç
var
A1, A2: array of Integer;
begin
SetLength(A1, 4);
A2 := A1;
A1[0] := 1;
A2[0] := 63;
Doğru cevap 63 olur, çünkü A2:=A1 ifadesi yeni bir dizi oluşturmaz fakat bunun yerine A2, A1 ile aynı başvuruyu kullanır. Bu nedenle, A2 ye yapılan her hangibir değişiklik A1 de etkileyecektir.
Bunun yerine A1 in tam bir kopyasını A2 ye atamak istiyorsanız, Copy() standart yordamını kullanın.
Önceki kod çalıştırıldığında, A2 ve A1 başlangıçta aynı veriyi içeren iki farklı dizi olacaktır. Birinde yapılan değişiklik diğerini etkilemeyecektir. İsteğe bağlı olarak, başlangıç elemanı ve kopyalanacak eleman sayısı Copy() yordamının parametresi olarak aşağıda gösterildiği gibi belirtilebilir.
Dinamik diziler aynı zamandan çok boyutlu da olabilirler. Birden fazla boyutu belirtmek için, ek olarak herbir boyutu belirtmek için
array of ifadesi eklenir.
Kod: Tümünü seç
Bird_Cok_Dizi: array of array of Integer;
Çok boyutlu dinamik dizi için hafızada yer ayırmak için; SetLength() yordamına boyutun büyüklüğünü parametre olarak geçirin.
Çok boyutlu dinamik dizilere erişmek , normal çok boyutlu dizilere erişmekte olduğu gibi aynı yolla yapılır, köşeli parantez içinde herbir eleman virgülle ayrı olarak gösterilir.