Bazen for döngüleri olarak da adlandırılan for
ifadeleri, sınırlanmış sayıda öğe üzerinde yinelenmeleri dışında loop
ifadeleriyle aynıdır. Yani burada, yineleme sayısı for
döngüsü yürütülmeden önce bilinir ve döngüden ne zaman çıkılacağına ilişkin kararlar senin için otomatik hale getirilir.
Dalga Tetikleyici cihazı, Dalga Tetikleyici cihazının Döngü ayarını bir sayıya ayarladığında sınırlanmış yinelemelere sahip bir for
döngüsü örneğidir. Dalga Tetikleyici’nin atımı, cihazın Döngü ayarı tarafından belirtilen sayıda tekrar eder.

Bu örnekte, iki Tetikleyici cihazı Dalga Tetikleyici’nin yolundadır. Dalga Tetikleyici’nin atımı bir Tetikleyici cihazına ulaştığında cihaz Pano cihazlarından birinde metin görüntülenmesi için bir sinyal gönderir ve üç kez tekrar eder.
Bu örnek, kod halinde aşağıdaki gibi görünebilir:
for (X := 0..2):
TriggerDevice1.Transmit()
TriggerDevice2.Transmit()
for
ifadesi iki bölümden oluşur:
- Yineleme belirtimi: Parantez içindeki ifadeler ve ilk ifade bir üreteç olmalıdır. Bu örnekte
(X := 0..2)
şeklindedir. - Gövde: Parantezlerden sonraki ifadeler. Bu örnekte gövde,
Transmit()
’in yer aldığı iki satırdır.

Üreteç
Bir üreteç, her defasında bir tane olacak şekilde bir değerler sekansı üretir ve değere bir ad verir. Bu örnekte, üreteç X := 0..2
şeklindedir, dolayısıyla döngünün her yinelemesinde, üreteç bir sonraki değeri üretir ve değere X adını verir. Üreteç sekansın sonuna ulaştığında for
döngüsü biter. Döngü değişkeninin geçerli bir değere sahip olup olmadığının kontrol edilmesine yönelik bu karar akışı, for
ifadesinde yerleşiktir.
Üreteçler yalnızca aralıkları, dizileri ve haritaları destekler.
Bir Aralık üzerinde Yineleme
Aralık türü bir dizi tamsayıyı temsil eder; örneğin, 0..3
ve Min..Max
.
Aralığın başlangıcı, ifadedeki ilk değer (örneğin 0
), sonu ise ifadede ..
işaretinden sonraki değerdir (örneğin 3
). Aralık, başlangıç ve bitiş değerlerinin kendileri de dahil olmak üzere bunlar arasındaki tüm tamsayıları içerir. Örneğin, 0..3
aralık ifadesi; 0
, 1
, 2
ve 3
sayılarını içerir.
Aralık ifadeleri yalnızca int
değerlerini destekler ve yalnızca for
, sync
, race
, ve rush
ifadelerinde kullanılabilir.
for (Number := 0 .. 3):
Log("{Number}")
Sonuç, günlüğe 0
, 1
, 2
ve 3
sayılarını içeren dört satır ekleyecektir.
Bir for
ifadesi, her yinelemenin sonuçlarını bir dizi içinde döndürebilir. Aşağıdaki örnekte, Numbers
, -1
ila -10
int
değerlerine sahip sabit bir dizidir.
Numbers := for (Number := 1..10):
-Number
Bir Dizi veya Harita Üzerinde Yineleme
Diziler ve haritalar üzerindeki yinelemeler yalnızca değerler olabileceği gibi haritalar için anahtar-değer çifti, diziler içinse dizin-değer çifti de olabilir.
Bu durumda, yalnızca dizinin değerleri kullanılmakta olup Values
; 2
, 3
ve 5
int
değerlerine sahip olan sabit bir dizidir.
Values := for (X : array{1, 2, 4}):
X+1
Aynısı bir harita ile de yapılabilecek olup bu durumda Values
; 3
, 7
int
değerlerine sahip olan sabit bir dizidir.
Values := for (X := map{ 1=>3, 0=>7 }):
X
X->Y
deseni, bir dizin-değer veya anahtar-değer çiftini ayrıştırmak için kullanılabilir. Dizin (veya anahtar) sol kısma (X
), değer ise sağ kısma (Y
) bağlıdır.
Bir diziden dizin-değer çiftlerine bir örnek olan Values
; 1
, 3
ve 6
int
değerlerine sahip olan sabit bir dizidir.
Values := for ( X -> Y : array{1, 2, 4}) :
X + Y
Bir haritadan dizin-değer çiftlerine bir örnek olan Values
; 4
ve 7
int
değerlerine sahip olan sabit bir dizidir.
Values := for ( X->Y := map{ 1=>3, 0=>7 }):
X + Y
Filtreleme
Üreteçten değerleri filtrelemek için for
ifadesine başarısız olabilir ifadeler ekleyebilirsin. Filtre başarısız olursa o yineleme için sonuç olmaz ve for
, üreteç tarafından üretilen bir sonraki değere atlar.
Örneğin, döndürülen sonuçlarda 0
’ı dışarıda bırakmak için for
ifadesine Num <> 0
filtresi eklenir.
NoZero := for (Number := -5..5, Number <> 0):
Sayı
Bu, sözdizimsel olarak aşağıdakiyle aynıdır:
expression0
for (Item : Collection, test-arg-block):
expression1
expression2

Tanım
Yineleme belirtimine adlandırılmış ifadeler de ekleyebilirsin. Ayrıca ad, hem yineleme belirtiminde hem de gövdede kullanılabilir.
Values := for ( X := 1..5; Y:=SomeFunction(X); Y < 10):
Y
Sonuç: tüm değerlerin 10'dan küçük olduğu, en fazla 5 öğeli bir dizi.
İç İçe Yerleştirilmiş For
Bir for
döngüsünü başka bir for
döngüsü içinde iç içe yerleştirebilirsin. Bunu yapmanın iki yolu vardır:
-
Tek For İfadesi: Birden fazla üreteç tarafından belirlenir. Sonuç, tek boyutlu bir dizidir.
-
Birden Fazla For İfadesi: Ayrı
for
blokları. Sonuç, çok boyutlu bir dizidir.
Aşağıdaki bölümlerde bunlar daha ayrıntılı olarak açıklanmaktadır.
Tek For İfadesi
Daha fazla üreteç ekleyerek tek bir for
ifadesinde birden fazla döngüye sahip olabilirsin. Birden fazla üreteç içeren tek bir for
ifadesinin sonucu, tek boyutlu bir dizidir.
Bu örnekte, Values
; 13
, 14
, 23
ve 24
int
değerlerine sahip olan sabit bir dizidir.
Values := for(X:=1..2, Y:=3..4):
X * 10 + Y
Bu, anlamsal olarak aşağıdakiyle aynıdır:
expression0
for (Item : Collection, Item2 : Collection2):
expression1
expression2

Birden Fazla For İfadesi
Bir for
ifadesini başka bir for döngüsü gövdesine iç içe yerleştirebilirsin. Bir for
ifadesi tek boyutlu bir dizi döndürdüğünden bir for
ifadesinin iç içe yerleştirilmesi iki boyutlu bir dizi döndürür.
Bu durumda Values
, iki sabit int
dizisine sahip olan sabit bir dizidir. İlk dizi 13
ve 14
değerlerini, ikinci dizi ise 23
ve 24
değerlerini içerir. (Bu, array{ array{13, 14}, array{23, 24} }
şeklinde yazılabilir.)
Values := for ( X := 1..2 ):
for (Y := 3..4):
X * 10 + Y
Hata
Yineleme belirtiminde herhangi bir şey başarısız olursa o yinelemeden kaynaklanan tüm değişiklikler geri alınır.
for(X := 1..5; S := IncrementSomeVariable(); X < 3):
X
Bu for
ifadesinin sonucu array{1,2}
şeklinde olup for döngüsünün değerlendirilmesinden sonra IncrementSomeVariable
’a yalnızca iki çağrı yapılmıştır çünkü diğer çağrılar, X < 3
filtresi başarısız olduğunda geri alınmıştır.