Carta aliran gelung *for*.
Dalam sains komputer, **gelung *for*** ("bagi/untuk") ialah pernyataan aliran kawalan untuk menentukan iteraasi yang membenarkan kod dilaksanakan berulang kali. Pelbagai kata kunci digunakan untuk menentukan pernyataan ini: bahasa keturunan ALGOL menggunakan "*for*", manakala bahasa keturunan Fortran menggunakan "*do*". Selain itu, terdapat kemungkinan lain seperti COBOL yang menggunakan "PERFORM VARYING".

Gelung *for* mempunyai dua bahagian: pengepala yang menyatakan interasi, dan badan yang dilaksanakan sekali setiap iterasi. Pengepala sering mengisytiharkan pembilang gelung atau pemboleh ubah gelung eksplisit, yang membolehkan badan mengetahui interasi yang sedang dilaksanakan. Gelung *for* biasanya digunakan apabila bilangan iterasi diketahui sebelum memasuki gelung. Gelung *for* boleh dianggap sebagai singkatan untuk gelung *while* yang menambah dan menguji pemboleh ubah gelung.

FOR
---

 Ilustrasi gelung *for*, dari i=0 hingga i=2, menghasilkan data1=200
Pernyataan gelung *for* tersedia dalam kebanyakan bahasa pengaturcaraan imperatif. Walaupun mengabaikan perbezaan kecil dalam sintaks, terdapat banyak perbezaan dalam cara penyataan ini berfungsi dan tahap ekspresi yang disokongnya. Secara amnya, gelung *for* jatuh ke dalam salah satu daripada kategori berikut:

### Gelung *for* tradisional

Gelung *for* dalam bahasa seperti ALGOL, Simula, BASIC, Pascal, Modula, Oberon, Ada, Matlab, Ocaml, F# dan sebagainya memerlukan pemboleh ubah kawalan dengan nilai mula dan akhir, yang kelihatan seperti ini:

```
for i = first to last do statement
(\* or just \*)
for i = first..last do statement

```

### Gelung *for* berasaskan iterator

Jenis gelung *for* ini ialah generalisasi jenis julat berangka bagi gelung *for*, kerana ia membenarkan penghitungan set item selain daripada jujukan nombor. Ia biasanya dicirikan oleh penggunaan iterator tersirat atau eksplisit, di mana pemboleh ubah gelung mengambil setiap nilai dalam urutan atau pengumpulan data lain. Contoh perwakilan dalam Python ialah:

```
for item in some\_iterable\_object:
  do\_something()
  do\_something\_else()

```
Di sini, `some_iterable_object` ialah sama ada pengumpulan data yang menyokong iterasi tersirat (seperti senarai nama pekerja), atau mungkin iterator itu sendiri. Sesetengah bahasa mempunyai jenis ini sebagai tambahan kepada satu lagi sintaks gelung; terutamanya, PHP mempunyai jenis gelung ini di bawah nama `for each`, serta gelung *for* tiga ekspresi (lihat di bawah) di bawah nama `for`.

### Gelung *for* bervektor

Sesetengah bahasa menawarkan gelung untuk yang bertindak seolah-olah memproses semua lelaran secara selari, seperti kata kunci `for all` dalam FORTRAN 95 yang mempunyai tafsiran bahawa *semua* ungkapan sebelah kanan dinilai sebelum *sebarang* tugasan dibuat, berbeza daripada bentuk iterasi eksplisit. Sebagai contoh, dalam pernyataan `for` dalam serpihan pseudokod berikut, apabila mengira nilai baharu untuk `A(i)`, kecuali untuk yang pertama (dengan `i = 2`) rujukan kepada `A(i - 1)` akan memperoleh nilai baharu yang mempunyai telah diletakkan di sana pada langkah sebelumnya. Walau bagaimanapun, dalam `for all` versi, setiap pengiraan hanya merujuk kepada `A` asal yang tidak diubah. Perbezaannya mungkin ketara.

```
**for**     i := 2 : N - 1 **do** A(i) := [A(i - 1) + A(i) + A(i + 1)] / 3; **next** i;
**for all** i := 2 : N - 1 **do** A(i) := [A(i - 1) + A(i) + A(i + 1)] / 3;
```

### Gelung *for* terkumpul

Diperkenalkan dalam ALGOL 68 dan diikuti PL/I, gelung jenis ini membolehkan iterasi gelung digandingkan dengan ujian, sebagai contoh:

```
for i := 1 : N while A(i) > 0 do *etc.*
```

iaitu, nilai diberikan kepada pemboleh ubah gelung *i* dan hanya jika *ungkapan sementara* adalah **benar**, badan gelung akan dilaksanakan. Jika hasilnya **palsu**, pelaksanaan gelung *for* berhenti sebentar. Diberikan bahawa nilai *pemboleh ubah* gelung ditakrifkan selepas penamatan gelung, maka pernyataan di atas akan mencari elemen bukan positif pertama dalam tatasusunan *A* (dan jika tiada, nilainya ialah *N + 1*), atau, dengan variasi yang sesuai, aksara bukan kosong pertama dalam rentetan, dan seterusnya.

Pembilang gelung
----------------

Dalam pengaturcaraan komputer, **pembilang gelung** ialah pemboleh ubah kawalan yang mengawal iterasi gelung (konstruk bahasa pengaturcaraan komputer). Ia dinamakan sedemikian kerana kebanyakan penggunaan binaan ini mengakibatkan pemboleh ubah mengambil julat nilai integer dalam beberapa jujukan teratur (contoh. bermula pada 0 dan berakhir pada 10, dengan tambahan nilai sebanyak 1 setiap kali iterasi).

Pembilang gelung berubah dengan setiap iterasi gelung, memberikan nilai unik untuk setiap lelaran individu. Pembilang gelung digunakan untuk memutuskan bila gelung patut ditamatkan dan untuk aliran atur cara meneruskan ke arahan seterusnya selepas gelung.

Tatanama penamaan pengecam lazim bagi pembilang gelung *for* menggunakan huruf pemboleh ubah **i**, **j**, dan **k** (dan seterusnya jika perlu), di mana **i** akan menjadi gelung paling luar, **j** bagi gelung dalaman, dsb. Urutan terbalik juga digunakan oleh sebilangan pengatur cara. Amalan ini bermula lebih awal dalam notasi matematik, di mana indeks bagi penjumlahah dan pendaraban selalunya diwakili **i**, **j**, dsb. Konvensyen alternatif ialah penggunaan huruf digandakan untuk indeks, seperti **ii**, **jj** dan **kk**, kerana ini membolehkan carian dan cari ganti yang lebih mudah daripada menggunakan satu huruf.

### Contoh

Contoh kod C yang melibatkan gelung *for* bersarang yang menggunakan pemboleh ubah pembilang **i** dan **j**:

```
for (i = 0; i < 100; i++) {
 for (j = i; j < 10; j++) {
 some\_function(i, j);
 }
}

```
Gelung *for* dalam C juga boleh digunakan untuk mencetak satu perkataan secara terbalik. Sebagai:

```
for (i = 0; i < 6; i++) {
 scanf("%c", &a[i]);
}
for (i = 4; i >= 0; i--) {
 printf("%c", a[i]);
}

```
Di sini, jika input ialah `epal`, outputnya ialah `lape`.

Rujukan
-------

1. ↑   Analysis of loop control variables in C