Ana Başlık 1. for, while ve Döngü Kontrolü

Amaç: for ve while döngülerini, break/continue ve seçim ölçütlerini öğreterek tekrarlayan işlemleri güvenli yazmak.

Öğrenme Çıktıları:

Anahtar Sözcükler: for, while, break, continue, sonsuz döngü, sayaç

Giriş

Önceki bölümlerde tekil şekiller ve koşullu kararlar işlendi. Oyun dünyaları ise çoğu zaman onlarca tekrarlayan öğe içerir: ızgara çizgileri, engeller, parçacıklar. Aynı kodu elle kopyalamak bakımı zorlaştırır; döngüler bu tekrarı tek bir kalıpta toplar.

for sayaç tabanlı, while koşul tabanlı tekrardır. Yanlış koşul sonsuz döngüye yol açabilir; break erken çıkış, continue tur atlama sağlar. Bu ana başlık döngünün nedenini, sözdizimini ve güvenli kontrolünü kurar. İç içe ızgara ve animasyon bir sonraki ana başlıkta gelir. Bundan sonra gelen alt başlıklarda önce veri modeli, sonra hamle kuralı, en sonda çizim ve etkileşim kurulur. Her yeni fonksiyon mümkün olduğunca küçük bir örnekte çalıştırılır; böylece hatanın kaynağı daha kolay bulunur. Anlatımda önce ilgili yapının ne işe yaradığı açıklanır, ardından kod satır satır okunur. Terimler ilk geçtikleri yerde kısa bir tanımla verilir; gerekirse tablo veya görsel ile desteklenir. Örnek sketch’ler tek bir mekaniğe odaklanır; böylece yan konular okumayı dağıtmaz. Parametreleri değiştirip yeniden çalıştırmak, kuralın sınırını görmenin en hızlı yoludur. Bu ana başlığın çıktısı, sonraki oyunda yeniden kullanılabilecek bir iskelet oluşturur.

1.1. Neden Döngü? Tekrarlayan İşlemler

Tanım: Döngü (loop) — Aynı veya benzer işlemleri, döngü değişkeni ve koşul yardımıyla otomatik olarak tekrarlayan programlama yapısıdır.

Döngü olmadan beş adet dikdörtgen çizmek için rect() beş kez yazılmalıdır:

Kod 1.

javascript
rect(0, 0, 40, 40);rect(50, 0, 40, 40);rect(100, 0, 40, 40);rect(150, 0, 40, 40);rect(200, 0, 40, 40);

Burada yalnızca X konumu 50'şer piksel artmaktadır. On veya yüz dikdörtgen gerektiğinde bu yöntem sürdürülebilir değildir. Döngü ile örüntü tek bir değişkene bağlanır; değişken her turda güncellenir.

Dikkat: Döngü, draw() içinde her frame'de çalışırsa gövdedeki kod da her frame'de tekrarlanır. Örneğin 10 tur dönen bir for döngüsü, saniyede 60 frame ile saniyede 600 kez gövdeyi çalıştırır. Performans sorunlarında döngü tur sayısı ve draw() içindeki iş yükü birlikte düşünülmelidir.

1.2. for Döngüsü

Tanım: for döngüsü — Başlangıç değeri, devam koşulu ve artış adımının başta, noktalı virgülle ayrılmış üç parçada tanımlandığı; tekrar sayısı genellikle önceden bilinen döngü türüdür.

Sözdizimi:

Kod 2.

javascript
for (başlangıç; koşul; artış) {  // döngü gövdesi — koşul true olduğu sürece tekrarlanır}

Dikkat — girinti (indentation): for / while gövdesi de if gibi süslü parantez içindedir. Gövde satırlarını içeri almak (çoğunlukla 2 veya 4 boşluk), özellikle iç içe döngülerde hangi rect veya if satırının hangi döngüye ait olduğunu ayırt etmeyi kolaylaştırır. JavaScript girintiyi zorunlu kılmaz (Python’da yanlış indentation programı durdurur); okunabilirlik ve hata ayıklama için bu kitaptaki örneklerde her zaman kullanılır. Tab ile boşluğu karıştırmayın (Bölüm 1 Ana Başlık 3, if sözdizimi notu).

Tanım: Döngü değişkeni — for veya while içinde tur sayısını veya konumu izleyen değişkendir. Örneklerde sayaç için çoğu zaman i, j veya anlamlı adlar (satir, sutun) kullanılır.

for başlığının üç parçası — ne işe yarar?

Üç parça zorunlu isimler değil; her biri farklı anda çalışır. Noktalı virgüller parçaları ayırır:

Tablo 1.

Sıra Parça Ne zaman çalışır? Görevi Örnek
1 Başlangıç Döngü bir kez, en başta Değişkene ilk değer let i = 0
2 Koşul Her tur öncesi true ise gövde çalışır; false ise döngü biter i < 5
3 Güncelleme (çoğu zaman “artış”) Her gövde bitince (tur sonu) Değişkeni günceller i++, i--, i += 5

Çalışma sırası her zaman şöyledir: başlangıç → (koşul? → gövde → güncelleme → koşul? → …). Üçüncü parça gövdeden sonra gelir; bu yüzden gövde içinde i hâlâ o turun değeridir.

Bilgi: Bu parçaya alışkanlıkla artış denir; ancak buraya illa i++ yazmak zorunda değilsiniz. Azaltma (i--), ikişer/beşer adım (i += 2, i += 5) veya başka bir atama da geçerlidir — önemli olan tur sonunda değişkenin bir sonraki tura uygun hale gelmesidir. Parça boş bırakılırsa güncelleme gövdeye (veya hiç) yazılır; bu durum bir sonraki alt bölümde örneklenir.

Kod bloğu: Üç parçanın rolünü konsolda izleme.

Kod 3.

javascript
function setup() {  createCanvas(200, 100);  console.log("başlangıç çalışacak");  for (let i = 0; i < 3; i++) {    console.log("gövde, i =", i);  }  console.log("döngü bitti");} function draw() {  background(240);}

Konsol çıktısı:

Kod 4.

text
başlangıç çalışacakgövde, i = 0gövde, i = 1gövde, i = 2döngü bitti

(i++ her gövdeden sonra sessizce çalışır; ayrı bir console.log satırı yoktur.)

Üç parçadan bazılarını boş bırakmak

Noktalı virgüller durur; aradaki ifade yazılmazsa o parça atlanmış sayılır:

Tablo 2.

Yazım Anlam
for (let i = 0; i < 5; ) Artış yok — gövdede i++ yazılmazsa sonsuz döngü riski
for (; i < 5; i++) Başlangıç yok — i döngüden önce tanımlanmış olmalı
for (let i = 0; ; i++) Koşul yok — koşul hep true kabul edilir; çıkış için break gerekir
for (;;) Üçü de boş — while (true) ile aynı mantık; bilinçli break şart

Aşağıda her durum için kısa, çalışır örnekler vardır (setup içinde; konsol çıktısı).

Kod bloğu: Artış boş — güncelleme gövdede.

Kod 5.

javascript
function setup() {  createCanvas(200, 100);  for (let i = 0; i < 3; ) {    console.log("artış gövdede, i =", i);    i++; // üçüncü parça boş olduğu için burada  }} function draw() {  background(240);}

Kod 6.

text
artış gövdede, i = 0artış gövdede, i = 1artış gövdede, i = 2

Kod bloğu: Başlangıç boş — i önce tanımlanır.

Kod 7.

javascript
function setup() {  createCanvas(200, 100);  let i = 0; // başlangıç döngü dışında  for (; i < 3; i++) {    console.log("başlangıç dışarıda, i =", i);  }} function draw() {  background(240);}

Kod 8.

text
başlangıç dışarıda, i = 0başlangıç dışarıda, i = 1başlangıç dışarıda, i = 2

Kod bloğu: Koşul boş — break ile çıkış.

Kod 9.

javascript
function setup() {  createCanvas(200, 100);  for (let i = 0; ; i++) {    console.log("koşul yok, i =", i);    if (i >= 2) {      break; // yoksa sonsuz döner    }  }  console.log("break ile çıktık");} function draw() {  background(240);}

Kod 10.

text
koşul yok, i = 0koşul yok, i = 1koşul yok, i = 2break ile çıktık

Kod bloğu: for (;;) — üçü de boş (while (true) eşdeğeri).

Kod 11.

javascript
function setup() {  createCanvas(200, 100);  let n = 0;  for (;;) {    console.log("for(;;), n =", n);    n++;    if (n >= 3) {      break;    }  }} function draw() {  background(240);}

Kod 12.

text
for(;;), n = 0for(;;), n = 1for(;;), n = 2

Dikkat: Boş parça “yazmayı unuttum” ile karıştırılmamalıdır. Bilinçli boş bırakma nadirdir; başlangıç düzeyinde üç parçayı da doldurmak okunabilirliği artırır. for (;;) veya koşulsuz for yalnızca break ile birlikte ve draw() dışında kullanılmalıdır.

Kısayol operatörleri (++, --, +=, -=)

Sayısal değişkeni bir artırmak veya azaltmak döngülerde sık tekrarlanır. JavaScript bunun için kısayol operatörleri sunar; bunlar yeni bir dil kuralı değil, uzun yazımın kısa eşdeğeridir:

Tablo 3.

Uzun yazım Kısayol Anlam
i = i + 1 i++ i bir artar
i = i - 1 i-- i bir azalır
x = x + 10 x += 10 x on artar
skor = skor - 1 skor -= 1 skor bir azalır

for döngüsünün üçüncü bölümünde her iki biçim de geçerlidir:

Kod 13.

javascript
for (let i = 0; i < 5; i = i + 1) { /* … */ }for (let i = 0; i < 5; i++) { /* … */ }          // aynı anlamfor (let satir = 5; satir >= 0; satir--) { /* … */ } // alttan üste

Dikkat: ++ ve -- tek birimlik adımdır. Beşer beşer ilerlemek için i = i + 5 veya i += 5 yazılır; i++++ diye bir yazım yoktur.

Kod bloğu: Yatay dizide beş kare çizen for döngüsü.

Kod 14.

javascript
function setup() {  createCanvas(400, 200);  noStroke();} function draw() {  background(30, 30, 50);   for (let i = 0; i < 5; i = i + 1) {    fill(100 + i * 30, 150, 200);    rect(i * 50, 80, 40, 40);  }}

i sırasıyla 0, 1, 2, 3, 4 değerlerini alır; her değerde rect(i * 50, 80, 40, 40) farklı X konumunda bir kare çizer.

for döngüsü izleme tablosu

for (let i = 0; i < 5; i = i + 1) ifadesinin turları:

Tablo 4.

Tur Koşul i < 5 i değeri Gövdede çizilen X Tur sonu: artış
1 true (0 < 5) 0 0 i → 1
2 true (1 < 5) 1 50 i → 2
3 true (2 < 5) 2 100 i → 3
4 true (3 < 5) 3 150 i → 4
5 true (4 < 5) 4 200 i → 5
6 false (5 < 5) — döngü biter —

Koşul false olduğunda gövde bir kez daha çalışmaz; akış döngüden sonraki satıra geçer.

Görsel 1. for döngüsü akış şeması
Görsel 1. for döngüsü akış şeması

Görsel 1 for döngüsünün çalışma sırasını özetler: başlangıç (i = 0), koşul kontrolü (i < 5), gövde, artış (i = i + 1) ve koşula geri dönüş. Koşul false olduğunda döngü biter.

Dikkat: Koşul ifadesinde yaygın hata sınır kullanımıdır. i < 5 ifadesi i'nin 0, 1, 2, 3, 4 olduğu beş tur üretir; i <= 5 yazılırsa altı tur olur. Izgara ve dizi indekslerinde bu fark sık kaynaklıdır.

1.3. while Döngüsü

Tanım: while döngüsü — Koşul başta kontrol edilir; koşul true olduğu sürece gövde tekrarlanır. Başlangıç ve artış for başlığında değil, döngü öncesinde ve gövdesinde yazılır.

Sözdizimi:

Kod 15.

javascript
while (koşul) {  // gövde}

Kod bloğu: while ile sayaç — setup() içinde mantık gösterimi. Konsola yazdırmak için 1.3'teki console.log() kullanılır.

Kod 16.

javascript
function setup() {  createCanvas(400, 400);   let sayac = 0;  while (sayac < 5) {    console.log("sayac:", sayac);    sayac = sayac + 1;  }  console.log("while bitti");} function draw() {  background(220);}

Konsol çıktısı (sırayla):

Kod 17.

text
sayac: 0sayac: 1sayac: 2sayac: 3sayac: 4while bitti

while döngüsü izleme tablosu

sayac = 0 sonrası while (sayac < 5) { …; sayac = sayac + 1; } için:

Tablo 5.

Tur Koşul sayac < 5 sayac (gövde başı) Konsola yazılan Tur sonu: sayac
1 true (0 < 5) 0 sayac: 0 1
2 true (1 < 5) 1 sayac: 1 2
3 true (2 < 5) 2 sayac: 2 3
4 true (3 < 5) 3 sayac: 3 4
5 true (4 < 5) 4 sayac: 4 5
6 false (5 < 5) — döngü biter —

Tablo, for izleme tablosuyla aynı mantıktadır; fark yalnızca başlangıç/artışın nerede yazıldığıdır.

Görsel 2. while döngüsü akış şeması
Görsel 2. while döngüsü akış şeması

Görsel 2 while akışını özetler: döngü öncesi sayac = 0, koşul, gövde, artış, koşula dönüş.

Sonsuz döngü

Gövdede koşulu false yapacak güncelleme yoksa döngü sonsuz döner ve program donabilir.

Yanlış örnek (çalıştırmayın — tarayıcı kilitlenebilir):

Kod 18.

javascript
let n = 0;while (n < 5) {  console.log(n);  // n artırılmadı → koşul hep true kalır}

Dikkat: draw() içinde while (true) veya çok uzun süren bir while yazmak animasyonu hızlandırmaz; tam tersine yavaşlatır ve çoğu zaman tarayıcıyı kilitler. Çünkü draw bir frame’i bitirmeden bir sonraki frame’e geçilemez — uzun while o frame’i bitirmez, ekran güncellenmez, fare/tuş olayları da işlenmeyebilir. Sonsuz veya sürekli tekrar için p5.js zaten her frame draw() çağırır; ekstra “sonsuz while” gerekmez.

1.4. Aynı İş: for ve while — Hangisi Ne Zaman?

Aynı görev çoğu zaman her iki döngüyle de yazılabilir. Aşağıda “0’dan 4’e kadar konsola yaz” işi yan yana gösterilir.

Kod bloğu: Aynı mantık — for sürümü.

Kod 19.

javascript
function setup() {  createCanvas(200, 100);  for (let i = 0; i < 5; i++) {    console.log("for:", i);  }} function draw() {  background(240);}

Kod bloğu: Aynı mantık — while sürümü.

Kod 20.

javascript
function setup() {  createCanvas(200, 100);  let i = 0;  while (i < 5) {    console.log("while:", i);    i++;  }} function draw() {  background(240);}

Her iki konsol da 0 1 2 3 4 üretir. Eşleme şöyle okunur:

Tablo 6.

for parçası while karşılığı
let i = 0 (başlangıç) Döngüden önceki let i = 0
i < 5 (koşul) while (i < 5)
i++ (artış) Gövde sonundaki i++

Çizim örneği de aynıdır: Beş kare için for (let i = 0; i < 5; i++) { rect(i * 50, 80, 40, 40); } yerine let i = 0; while (i < 5) { rect(…); i++; } yazılabilir; tuval aynı görünür.

Basit desenler: yatay / dikey çizgi ve eşmerkezli daire

Aşağıdaki üç desen döngü değişkenini konuma bağlamanın en sade örnekleridir. Her biri önce for, sonra while ile yazılır; tuval çıktısı aynıdır.

Görsel 3. Döngü ile basit desenler — yatay, dikey, eşmerkezli
Görsel 3. Döngü ile basit desenler — yatay, dikey, eşmerkezli

Görsel 3 üç deseninin beklenen çıktısını özetler.

Kod bloğu: Yatay paralel çizgiler — for.

Kod 21.

javascript
function setup() {  createCanvas(280, 200);} function draw() {  background(236);  stroke(40);  for (let i = 0; i < 8; i++) {    let y = 20 + i * 20;    line(20, y, 260, y);  }}

Kod bloğu: Aynı yatay çizgiler — while.

Kod 22.

javascript
function setup() {  createCanvas(280, 200);} function draw() {  background(236);  stroke(40);  let i = 0;  while (i < 8) {    let y = 20 + i * 20;    line(20, y, 260, y);    i++;  }}

i her turda Y konumunu kaydırır; X uçları sabittir → yatay paralel çizgiler.

Kod bloğu: Dikey paralel çizgiler — for / while.

Kod 23.

javascript
// forfor (let i = 0; i < 8; i++) {  let x = 20 + i * 30;  line(x, 20, x, 180);} // while (eşdeğer)let i = 0;while (i < 8) {  let x = 20 + i * 30;  line(x, 20, x, 180);  i++;}

Burada değişen X’tir; çizgiler dikeydir.

Kod bloğu: Eşmerkezli daireler — for / while.

Kod 24.

javascript
function setup() {  createCanvas(280, 200);} function draw() {  background(236);  noFill();  stroke(40);  for (let i = 1; i <= 6; i++) {    let çap = i * 28;    circle(140, 100, çap);  }} // while eşdeğeri:// let i = 1;// while (i <= 6) {//   circle(140, 100, i * 28);//   i++;// }

Merkez sabit, çap i ile büyür → eşmerkezli daireler. (circle(x, y, çap) p5.js’te çap parametresi alır.)

Sıra Sizde: Tek bir for ile renk tayfı çizin (p5.js). Hedef görünümler:

Görsel 4. Mavi renk tayfı — üstte 0, altta 255
Görsel 4. Mavi renk tayfı — üstte 0, altta 255

Görsel 5. Kırmızı renk tayfı — solda 0, sağda 255
Görsel 5. Kırmızı renk tayfı — solda 0, sağda 255

İstenenler:

  1. Görsel 4 (dikey / mavi): Yatay şeritler; mavi bileşen 0’dan 255’e artsın (fill(0, 0, mavi) — mavi döngü değişkenine bağlı).
  2. Görsel 5 (yatay / kırmızı): Dikey şeritler; kırmızı 0’dan 255’e artsın (fill(kirmizi, 0, 0)).
  3. İç içe döngü gerekmez — yukarıdaki yatay/dikey çizgi örnekleri gibi tek for yeter. Tek tek renk yazmayın.

İpucu: N şerit için renk = i * (255 / (N - 1)) (veya map(i, 0, N - 1, 0, 255)). Şerit yüksekliği / genişliği: height / N, width / N.

draw() ile dolaylı döngü (background silmeden)

for / while tek frame içinde birçok çizgi üretir. Benzer sonucu bazen draw()’ın kendisine bırakmak da mümkündür: background() çağrılmazsa önceki çizimler silinmez; her frame’de bir yeni çizgi eklenir. Bu, p5.js’in sürekli draw çağrısını dolaylı bir döngü gibi kullanmaktır.

Kod bloğu: Her frame bir yatay çizgi — background yok.

Kod 25.

javascript
let satir = 0; function setup() {  createCanvas(280, 200);  background(236); // yalnızca bir kez  stroke(40);} function draw() {  if (satir < 8) {    let y = 20 + satir * 20;    line(20, y, 260, y);    satir++;  }  // satir 8 olunca yeni çizgi eklenmez; tuval dolu kalır}

İlk 8 frame’de ekran Görsel 3’teki yatay desene yaklaşır; fark, çizgilerin zamanla birikmesidir (animasyon gibi görünür). for ile tek frame’de biten sürüm anında tamamlanır.

Tablo 7.

Yaklaşım Ne zaman?
for / while + background her frame Desen her frame yeniden çizilir (oyun / animasyon iskeleti)
draw + biriktirme (background yok) Adım adım biriktirme; eğitim / basit “çizim makinesi”
draw içinde while (true) Kullanma — frame bitmez; animasyon yavaşlar / tarayıcı kilitlenebilir

Dikkat: Biriktirme örneğinde background’ı draw içine koyarsanız her frame tuval silinir ve yalnızca son çizgi kalır. Bilinçli seçim gerekir.

Hangisi hangi durumda daha iyi?

Kesin bir kural yoktur; okunabilirlik ve niyet önemlidir. Başlangıç düzeyinde şu tercihler yaygındır:

Tablo 8.

Durum Önerilen Gerekçe
Tur sayısı baştan belli (5 kare, 8×8 ızgara, dizi boyutu) for Üç parça tek satırda; artış unutulması zor
“Koşul doğru olduğu sürece devam” (hedef bulunana kadar, dışarıdan gelen bayrak) while Koşul vurgulanır; tur sayısı başta net olmayabilir
draw() içinde sınırlı sayıda nesne çizmek for Frame başına sabit / bilinen tur
draw() içinde while (true) Kullanma Frame bitmez → yavaşlama / kilitlenme; animasyon draw tekrarından gelir

Tartışma: “Beş kare çiz” için while de çalışır; ama for niyeti (“sayarak tekrarla”) daha net gösterir. “Kullanıcı doğru cevabı girene kadar sor” gibi tur sayısı belirsiz işlerde while daha doğal okunur. İkisi de aynı makineye derlenebilir; seçim çoğu zaman okuyan insanın işi anlaması içindir.

Bilgi: for (;;) ile while (true) eşdeğerdir; ikisinde de çıkış break ile yapılır (bir sonraki alt bölüm).

Döngüler oyunlarda neden bu kadar sık?

Beş rect örneğindeki tekrar, oyunlarda da aynıdır: listedeki her düşmanı, her mermiyi veya her tahta satırını tek tek işlemek. Aşağıdakiler örnek senaryolardır (oyun motorunun içini birebir iddia etmez); amaç, döngünün neyi tekrarladığını somutlaştırmaktır.

Tablo 9.

Oyun Döngünün tekrarladığı iş (kabaca) Çoğu zaman
Super Mario Bros. Ekrandaki her düşman ve jetonu güncellemek / çizmek for
Pac-Man Her hayaleti (Blinky, Pinky, …) sırayla hareket ettirmek for
Tetris Dolu satırları tarayıp silmek; parçanın bloklarını çizmek for
Space Invaders Formasyondaki her gemiyi ve her mermiyi ilerletmek for

while daha çok “koşul doğru olduğu sürece” işlerde öne çıkar: can bitene kadar, doğru cevap gelene kadar, liste boşalana kadar. Bu kitaptaki mini oyunlarda çoğu tekrar for ile başlar; while seçtiğinizde gerekçenizi bir cümleyle söyleyebilmeniz yeterlidir.

Sıra Sizde: Tablodan veya bildiğiniz bir oyundan iki örnek seçin. Her biri için (1) döngünün neyi tekrarladığını, (2) for mu while mu daha doğal olur — birer cümleyle yazın.

1.5. break, continue ve Erken Çıkış

Tanım: break — Döngüyü hemen sonlandırır; akış döngüden sonraki satıra geçer. Kalan turlar çalışmaz.

Tanım: continue — Yalnızca o turdaki gövdenin geri kalanını atlar; döngü bir sonraki tura (koşul / artış) geçer.

Bu iki komut for ve while içinde kullanılabilir. Amaç çoğu zaman “hedef bulundu, yeter” (break) veya “bu turu atla, sonrakine bak” (continue) demektir.

Kod bloğu: break — konsolda izleme.

Kod 26.

javascript
function setup() {  createCanvas(200, 100);   for (let i = 0; i < 10; i++) {    if (i === 3) {      console.log("break: i =", i, "→ döngü biter");      break;    }    console.log("i =", i);  }  console.log("for sonrası");} function draw() {  background(240);}

Konsol çıktısı:

Kod 27.

text
i = 0i = 1i = 2break: i = 3 → döngü biterfor sonrası

i 3 olduğunda gövde console.log("i =", i) satırına gelmeden break çalışır; 4…9 turları hiç yapılmaz.

Kod bloğu: continue — tek bir turu atlama.

Kod 28.

javascript
function setup() {  createCanvas(200, 100);   for (let i = 0; i < 5; i++) {    if (i === 2) {      console.log("continue: i =", i, "→ bu tur atlandı");      continue;    }    console.log("i =", i);  }} function draw() {  background(240);}

Konsol çıktısı:

Kod 29.

text
i = 0i = 1continue: i = 2 → bu tur atlandıi = 3i = 4

Tablo 10.

Komut Ne yapar? Sonraki adım
break Döngüyü tamamen bitirir Döngünün dışındaki kod
continue Yalnızca o turu yarıda keser Aynı döngünün sonraki turu

Bilgi: İç içe döngülerde break yalnızca içinde bulunduğu döngüyü kırar; dış döngü devam eder. Hem dış hem iç döngüyü birden kesmek için genelde bir boolean bayrak (bulundu) veya fonksiyon içinde return kullanılır (fonksiyonlar Ana Başlık 3).

Kod bloğu: İç döngüde break — dış döngü sürer (konsol).

Kod 30.

javascript
function setup() {  createCanvas(200, 100);   for (let satir = 0; satir < 3; satir++) {    for (let sutun = 0; sutun < 3; sutun++) {      console.log("bak:", satir, sutun);      if (satir === 1 && sutun === 1) {        console.log("break — yalnızca iç döngü biter");        break;      }    }    console.log("dış tur bitti, satir =", satir);  }} function draw() {  background(240);}

Konsol çıktısı (özet): satir = 1 iken sutun 0 ve 1 yazılır, sonra iç break; ardından satir = 2 yine 0, 1, 2 ile gezer. Dış döngü durmaz.

Kontrollü sonsuz döngü (setup / mantık kodunda; draw içinde değil):

Kod 31.

javascript
let deneme = 0;while (true) {  deneme++;  console.log("deneme", deneme);  if (deneme >= 3) {    break; // bilinçli çıkış  }}

Aynı desen for (;;) ile de yazılabilir; yine break şarttır.

Sıra Sizde: for (let i = 0; i < 10; i++) içinde console.log(i) var. i === 3 iken continue, i === 7 iken break ekleyin. Konsolda hangi sayılar görünür? Önce kâğıda yazın, sonra Web Editor’de doğrulayın.

Yapay Zekâ Etkileşimi: for ve while Karşılaştırma

Amaç: Aynı çıktıyı üreten for/while çiftini yapay zekâya yazdırıp farkı tartışmak.

Adım 1: 0’dan 9’a sayıları konsola yazdıran for isteyin. Adım 2: Eşdeğer while isteyin; artış satırını bilinçli silip ne olduğunu gözleyin (gerekirse sayfayı yenileyin). Adım 3: Hangisinin okunabilir olduğunu bir cümleyle not edin.

Özet

Döngü, aynı işlem ailesini bir sayaca veya bir koşula bağlı olarak yineleyen yapıdır; beş rect çağrısını tek tek yazmak yerine örüntüyü tek bir değişkene bağlar. for (başlangıç; koşul; artış) üçlüsünde başlangıç yalnızca bir kez, koşul her tur öncesinde, güncelleme ise her gövde bitiminde çalışır. Bu parçalar bilinçli olarak boş bırakılabilir; ancak boş bırakma nadir bir tercihtir ve for (;;) gibi biçimler yalnızca break ile birlikte anlam taşır. i++, i-- ve i += 5 kısayolları uzun yazımın eşdeğeridir. while ise “koşul doğru kaldıkça” modelidir; başlangıç döngüden önce, güncelleme gövde içinde yazılır ve güncelleme unutulduğunda koşul hiç bozulmadığı için tarayıcı kilitlenebilir.

Aynı iş çoğu zaman her iki yapıyla da yazılabildiğinden seçim okunabilirliğe dayanır: tur sayısı baştan belliyse for, tur sayısı belirsiz ve vurgu koşuldaysa while daha doğal okunur. break içinde bulunduğu döngüyü hemen sonlandırır, continue yalnızca o turun kalan gövdesini atlar; iç içe döngülerde break en içteki döngüyü kırar, dış döngü sürer. Oyunlarda aynı tekrar Tetris’te dolu satırların taranmasında, Pac-Man’de hayaletlerin sırayla güncellenmesinde veya mermi listesinin işlenmesinde görülür. draw içinde while (true) animasyonu hızlandırmaz; frame’i bitirmediği için görüntüyü ve girdiyi dondurur. Bu temel, sonraki ana başlıktaki iç içe ızgara ve frameCount animasyonuna zemin hazırlar.

Neler Öğrendik?

Soru 1 for başlığındaki üç parça sırasıyla neyi kontrol eder?

A) Dosya, ağ, bellek

B) Başlangıç, devam koşulu, artış/adım

C) Renk, stroke, fill

D) HTML, CSS, JS

E) Yalnızca fare olayları

Soru 2 draw() içinde while (true) yazmak genelde neye yol açar?

A) Animasyonu güvenle hızlandırır

B) Frame bitmez; animasyon yavaşlar veya tarayıcı kilitlenebilir

C) Yalnızca rengi değiştirir

D) for döngüsünü zorunlu kılar

E) Hiçbir etkisi olmaz

Soru 3 break ne yapar?

A) Programı yeniden başlatır

B) En içteki döngüyü hemen sonlandırır

C) Tuvali siler

D) FPS’i 60 yapar

E) String birleştirir

Soru 4 continue ne yapar?

A) Döngüyü başa sarıp tüm programı bitirir

B) Bu turdaki kalan gövdeyi atlayıp sonraki tura geçer

C) setup’ı siler

D) mousePressed zorunlu kılar

E) Diziyi sıralar

Neler Öğrendik Yanıt Anahtarı

Soru 1: Doğru Cevap: B

Soru 2: Doğru Cevap: B

Soru 3: Doğru Cevap: B

Soru 4: Doğru Cevap: B

Yararlanılan Kaynaklar

Bu içerik aşağıdaki kaynaklardan derlenerek hazırlanmıştır: