Ana Başlık 3. Değişkenler, Operatörler ve Koşullu İfadeler

Amaç: Değişken ve veri türlerini tanıtarak karşılaştırma/mantıksal operatörler ile if/else dallanma mantığını kurmak.

Öğrenme Çıktıları:

Anahtar Sözcükler: değişken, veri türü, operatör, if/else, boolean, doğruluk tablosu

Giriş

İlk ana başlıkta p5.js ortamı kurulmuş, koordinat sistemi tanınmış ve temel şekiller çizilmiştir. Ancak çizilen şekiller henüz duruma göre karar verememektedir. Oyun programlamanın özü, çalışma anındaki bilgiye göre farklı yollar izlemektir: top kenara değdi mi, skor yeterli mi, fare doğru bölgeye tıkladı mı?

Bu kararlar koşullu ifadelerle kodlanır. Koşuldan önce değişken kavramı gerekir; skor, can, konum ve oyun bitiş bayrağı gibi bilgiler isimlendirilmiş bellek alanlarında tutulur. JavaScript’te let / const, temel veri türleri, atama ile karşılaştırmanın ayrımı ve && / || / ! operatörleri bu zemini oluşturur.

Bu ana başlıkta değişkenler, operatörler ve if/else yapıları sistematik işlenir. Fare etkileşimi ve Daire Tıklama mini oyunu bir sonraki ana başlıkta, bu temelin üzerine kurulacaktır. 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.

3.1. Değişkenler ve Veri Türleri

Tanım: Değişken (variable) — Program çalışırken değeri okunabilen, değiştirilebilen veya sabit tutulabilen isimlendirilmiş bellek alanıdır.

JavaScript'te değişken tanımlamak için let, const veya eski sözdizim olan var anahtar sözcükleri kullanılır. var işlev (function) kapsamına sahiptir ve beklenmedik davranışlara yol açabilir; let ve const ise blok kapsamlıdır (süslü parantez {} içinde tanımlanırsa dışarıdan erişilemez). Örneklerde değişebilir değerler için let, değişmeyecek sabitler için const kullanılır.

Kod bloğu: Temel değişken tanımlama örnekleri.

Kod 1.

javascript
let skor = 0;                  // Tam sayı (number)let oyunAdi = "Daire Tıklama"; // Metin (string)let oyunBitti = false;         // Mantıksal değer (boolean)const HEDEF_SKOR = 10;         // Sabit — sonradan değiştirilmez (BÜYÜK_HARF örfi)

Bu düzeyde odaklanılan temel veri türleri şunlardır (JavaScript'te undefined, null, object gibi ek türler de vardır):

Tablo 1.

Tür Açıklama Örnek
number Tam sayı veya ondalıklı sayı 42, 3.14, -7
string Metin (tırnak içinde) "Merhaba", 'p5.js'
boolean Doğru veya yanlış true, false

p5.js, konum ve boyut için number türünü yoğun biçimde kullanır. Oyun durumunu izlemek için boolean değişkenler (oyunBitti, hedefVuruldu gibi) sık görülür.

Değişken adlarının ne anlama geldiği okunabilirlik açısından önemlidir. x, y gibi tek harfli adlar koordinat için yaygındır; a, b, temp1 gibi belirsiz adlar ise kodun izlenmesini zorlaştırır.

Tanım: camelCase (deve notasyonu) — Birleşik değişken veya fonksiyon adlarında ilk kelimenin küçük harfle başladığı, sonraki kelimelerin ilk harfinin büyük yazıldığı ve kelimeler arasında boşluk veya alt çizgi bulunmayan adlandırma biçimidir. Örnek: hedefX, topHizi, kalanSure.

camelCase, JavaScript'te dil tarafından zorunlu kılınan bir kural değildir; hedef_x veya HedefX gibi adlar da sözdizimi açısından geçerlidir. Ancak JavaScript ve p5.js topluluğunda değişken ve fonksiyon adları için camelCase yaygın bir örf (convention) haline gelmiştir. Bu kitaptaki örneklerde değişken ve fonksiyon adları camelCase ile yazılır.

Sabit (const) değerlerde ise bazen tüm harflerin büyük yazıldığı ve kelimelerin alt çizgiyle ayrıldığı BÜYÜK_HARF örfi kullanılır: HEDEF_SKOR, MAKS_CAN. Bu da zorunluluk değil, okunabilirlik için benimsenen bir düzendir.

Dikkat: Tek eşittir (=) atama operatörüdür; eşitlik sorusu için == veya === kullanılır. === (üç eşittir, tam eşitlik) hem değeri hem veri türünü birlikte kontrol eder; örneklerde karşılaştırmalarda === kullanılır. == ise tür dönüşümü yaparak eşleştirebilir (ör. "5" == 5 true döner) ve başlangıç düzeyinde kafa karışıklığına yol açabilir.

String (metin) işlemleri — kısa özet

Bu kitaptaki mini oyunlar çoğunlukla sayı ve boolean ile ilerler; yine de skor yazısı, seviye adı veya "Kazandın!" gibi mesajlar string türündedir. Aşağıdaki işlemler başlangıç için yeterlidir:

Tablo 2.

İşlem Sözdizimi Örnek Sonuç
Birleştirme (+) "a" + "b" "Skor: " + 7 "Skor: 7"
Uzunluk metin.length "p5.js".length 5
Büyük / küçük harf .toUpperCase() / .toLowerCase() "Hi".toUpperCase() "HI"
Eşitlik === durum === "bitti" true veya false

Kod bloğu: String birleştirme ve ekrana yazma (çalışır sketch).

Kod 2.

javascript
let skor = 7;let oyunAdi = "Daire Tıklama"; function setup() {  createCanvas(400, 200);} function draw() {  background(240);  fill(0);   let mesaj = "Skor: " + skor; // "Skor: 7"  text(mesaj, 20, 40);   if (oyunAdi.length > 0) {    text(oyunAdi.toUpperCase(), 20, 70);  }}

Sayıyı metne çevirmek için String(skor) veya skor + "" de kullanılabilir; pratikte "Skor: " + skor en yaygınıdır. Metinden sayıya dönüş (Number("10"), parseInt) bu ana başlıkta zorunlu değildir; skor zaten number tutulur, ekrana yazarken string birleştirilir. text(metin, x, y) tuvale yazar (Ana Başlık 1 çizim tablosu); metin rengi fill ile ayarlanır.

3.2. Karşılaştırma ve Mantıksal Operatörler

Koşullu ifadeler, karşılaştırma operatörlerinin sonucuna dayanır. Karşılaştırma sonucu her zaman boolean değer üretir: true veya false.

Tablo 3.

Operatör Anlam Örnek Sonuç (örnek değerlerle)
== Değer eşitliği (tür dönüşümü yapabilir) skor == 10 skor 7 ise → false; skor 10 ise → true; skor "10" (metin) iken → true (tür dönüşür)
=== Tam eşitlik (değer + tür) — örneklerde kullanılan skor === 10 skor 7 ise → false; skor 10 ise → true; skor "10" (metin) iken → false
!= Eşit değil mi? durum != "bitti" durum "oynuyor" ise → true; durum "bitti" ise → false
< Küçük mü? x < 100 x 50 ise → true; x 150 ise → false
> Büyük mü? y > 200 y 250 ise → true; y 100 ise → false
<= Küçük veya eşit mi? skor <= 5 skor 5 ise → true; skor 7 ise → false
>= Büyük veya eşit mi? can >= 1 can 1 ise → true; can 0 ise → false

== ile === farkı (tür dönüşümü): JavaScript’te "10" bir string (metin), 10 ise bir number (sayı)dır; görünüşte aynı olsalar da veri türleri farklıdır. == (iki eşittir) karşılaştırırken gerekirse türleri birbirine çevirmeye çalışır (tür dönüşümü / type coercion): bu yüzden "10" == 10 sonucu true olur. === (üç eşittir, tam eşitlik) hem değeri hem türü kontrol eder; "10" === 10 sonucu false olur. Oyun kodunda skor, can gibi değerler zaten number tutulduğu için ve sürpriz eşleşmeleri önlemek adına örneklerde === tercih edilir. Eşit değil için benzer ayrım vardır: != tür dönüşümü yapabilir, !== yapmaz; örneklerde mümkün olduğunca !== kullanılır.

Mantıksal operatörler

Mantıksal operatörler, karşılaştırma ifadelerinin ürettiği true/false değerlerini birleştirir. Sonuç yine boolean olur.

Tablo 4.

Operatör Anlam Örnek Sonuç (örnek değerlerle)
&& VE — her iki koşul da doğru olmalı x > 0 && x < 400 x 150 iken → true; x 500 iken → false
|| VEYA — en az biri doğru yeter can === 0 || sure === 0 can 0, sure 30 iken → true; can 3, sure 30 iken → false
! DEĞİL — boolean değeri tersine çevirir !oyunBitti oyunBitti false ise → true; oyunBitti true ise → false

Dikkat — matematikteki zincir ile JavaScript farkı: Matematikte “x, 20 ile 60 arasında” çoğu zaman 20 < x < 60 diye yazılır. JavaScript’te bu ifade beklendiği gibi çalışmaz. Dil önce 20 < x sonucunu üretir (true veya false), sonra bu boolean değeri 60 ile karşılaştırmaya çalışır; sonuç kafa karıştırıcı veya yanlış olabilir. Aralığı doğru sormak için iki karşılaştırmayı && ile bağlayın:

Kod 3.

javascript
// Yanlış beklenti (matematik yazımı — JS'te güvenilir değil):// 20 < x < 60 // Doğru:20 < x && x < 60

Örneğin x = 40 iken 20 < x && x < 60 → true; x = 10 iken → false. Tuval sınırı gibi durumlar da aynı kalıptır: x > 0 && x < width.

Bilgi: Bazı diller (örneğin Python) 20 < x < 60 biçimindeki zincirli karşılaştırmaya izin verir ve bunu “iki koşulun birden sağlanması” diye yorumlar. JavaScript / p5.js’te ise bu kolaylık yoktur; aralık her zaman && (veya gerekirse ||) ile açıkça yazılır. Matematikte geçerli görünen her yazımın kodda da geçerli veya aynı anlamda olması gerekmez — dilin kuralları esastır.

Tanım: Operand — Bir operatörün üzerinde işlem yaptığı değer veya ifadedir. Örneğin skor === 10 ifadesinde === operatördür; skor ve 10 iki operandtır. x > 0 && x < 400 ifadesinde && operatörünün operandları x > 0 ile x < 400 koşullarıdır. !oyunBitti ifadesinde ! tek operand alır (oyunBitti).

Tanım: Doğruluk tablosu — Bir ifadenin farklı girdi değerlerinde true veya false sonucunu satır satır gösteren tablodur.

İki operandlı operatörlerde (&&, ||) her operand true veya false olabileceğinden 2 × 2 = 4 durum vardır. Aşağıda A ve B, bu iki operandı temsil eder (ör. A = can > 0, B = !oyunBitti). Tek operandlı ! için ise yalnızca 2 durum vardır.

&& (VE) doğruluk tablosu — 4 durum

Tablo 5.

# A B A && B
1 true true true
2 true false false
3 false true false
4 false false false

Özet: Yalnızca A ve B ikisi birden true ise sonuç true olur. Oyun bağlamında can > 0 && !oyunBitti ifadesi hem canın sıfırdan büyük hem de oyunun bitmemiş olması gerektiğini söyler; biri false ise tüm ifade false döner.

Tablo 6.

Örnek ifade can oyunBitti can > 0 !oyunBitti Sonuç
can > 0 && !oyunBitti 3 false true true true
can > 0 && !oyunBitti 0 false false true false
can > 0 && !oyunBitti 3 true true false false

|| (VEYA) doğruluk tablosu — 4 durum

Tablo 7.

# A B A || B
1 true true true
2 true false true
3 false true true
4 false false false

Özet: A veya B'den en az biri true ise sonuç true olur. Oyun bağlamında can === 0 || sure === 0 ifadesi can bittiğinde veya süre dolduğunda oyunun sona erdiğini ifade eder.

Tablo 8.

Örnek ifade can sure can === 0 sure === 0 Sonuç
can === 0 || sure === 0 0 45 true false true
can === 0 || sure === 0 2 0 false true true
can === 0 || sure === 0 2 45 false false false

! (DEĞİL) doğruluk tablosu — 2 durum (tek operand)

Tablo 9.

# A !A
1 true false
2 false true

Özet: ! yalnızca tek boolean değeri tersine çevirir. !oyunBitti ifadesi oyun bitmediyse true, bittiyse false döner; if (!oyunBitti) bloğu yalnızca oyun devam ederken çalışır.

Görsel 1. VE, VEYA ve DEĞİL için doğruluk tabloları
Görsel 1. VE, VEYA ve DEĞİL için doğruluk tabloları

Görsel 1 yukarıdaki VE, VEYA ve DEĞİL tablolarını yan yana özetler: iki operandlı operatörlerde 4 durum, ! için 2 durum.

Mantıksal operatörler ile şekil renklendirme

Aşağıdaki statik sketch bütün sonuçları tek çalıştırmada gösterir. Üst sırada &&, dört kenarlı ve eşit kenarlı olan kareyi vurgular; dikdörtgenin dört kenarı olsa da kenarları eşit değildir. Alt sırada ||, üçgen veya daire olan şekilleri vurgular; kare iki koşula da uymaz. Fare, klavye, animasyon veya kodda değer değiştirme gerekmez.

Bu örnekte iki yeni komut kullanılır:

Tablo 10.

Komut Açıklama
triangle(x1, y1, x2, y2, x3, y3) Verilen üç köşe noktasını birleştirerek üçgen çizer.
color(r, g, b) Bir RGB rengini değer olarak oluşturur; değişkende saklanıp fill, stroke gibi komutlarla kullanılabilir.

color() doğrudan çizim yapmaz: let secili = color(45, 110, 170); rengi saklar; fill(secili) veya stroke(secili) sonraki dolgu / kenar rengini ayarlar. Etiketler için text() Ana Başlık 1'de tanıtılmıştır; textSize ve textAlign bu sketch’te kullanılır, ayrıntıları 4.1’de verilir.

Kod bloğu: && ve || ile seçilen geometrik şekiller — tüm sonuçlar aynı tuvalde.

Kod 4.

javascript
function setup() {  createCanvas(760, 430);  noLoop();} function draw() {  background(245);  textAlign(CENTER);   fill(35);  textSize(16);  text("Mantıksal operatörler ile şekil renklendirme", 380, 30);  textSize(12);  text("Tüm sonuçlar tek statik tuvalde", 380, 52);   noStroke();   let secili = color(45, 110, 170);  let diger = color(195);   // && : dört kenarlı VE eşit kenarlı  fill(55);  textSize(13);  text("dört kenarlı && eşit kenarlı", 380, 82);   let dortKenar = true;  let esitKenar = true;  if (dortKenar && esitKenar) {    fill(secili);  } else {    fill(diger);  }  rect(125, 100, 110, 110);      // kare   dortKenar = true;  esitKenar = false;  if (dortKenar && esitKenar) {    fill(secili);  } else {    fill(diger);  }  rect(445, 125, 180, 60);       // dikdörtgen   fill(secili);  textSize(12);  text("true — kare seçildi", 180, 232);  fill(90);  text("false — kenarlar eşit değil", 535, 232);   // || : üçgen VEYA daire  stroke(210);  line(60, 255, 700, 255);  noStroke();  fill(55);  textSize(13);  text("üçgen || daire", 380, 282);   let ucgenMi = true;  let daireMi = false;  if (ucgenMi || daireMi) {    fill(secili);  } else {    fill(diger);  }  triangle(90, 395, 170, 295, 250, 395);   ucgenMi = false;  daireMi = false;  if (ucgenMi || daireMi) {    fill(secili);  } else {    fill(diger);  }  rect(330, 305, 100, 90);       // kare   ucgenMi = false;  daireMi = true;  if (ucgenMi || daireMi) {    fill(secili);  } else {    fill(diger);  }  ellipse(570, 350, 100, 100);   // daire   fill(secili);  text("true", 170, 418);  fill(90);  text("false", 380, 418);  fill(secili);  text("true", 570, 418);}

Üst sırada yalnız kare, alt sırada üçgen ile daire mavi görünür. Gri şekiller ilgili koşulun false sonucunu gösterir.

Görsel 2. Mantıksal operatörler ile şekil renklendirme — && ile kare, || ile üçgen veya daire
Görsel 2. Mantıksal operatörler ile şekil renklendirme — && ile kare, || ile üçgen veya daire

Görsel 2 && için iki koşulun birlikte, || için koşullardan en az birinin sağlanmasını tek tuvalde karşılaştırır.

İkiden fazla koşul birleştirmek

&& ve || zincirlenerek üç veya daha fazla koşul aynı ifadede birleştirilebilir. JavaScript ifadeyi soldan sağa değerlendirir; && || operatöründen önce işlenir. Başlangıç düzeyinde karışıklığı önlemek için parantez kullanmak önerilir.

Tablo 11.

Birleştirme biçimi Örnek Ne zaman true?
Üçlü VE (&&) skor >= 5 && can > 0 && !oyunBitti Üçü birden doğru
Üçlü VEYA (||) can === 0 || sure === 0 || skor >= 100 En az biri doğru
VE + VEYA (parantezli) (skor >= 10 && can > 0) || oyunBitti Skor ve can koşulu veya oyun bitmiş
Dört koşullu tuval sınırı x > 0 && x < 400 && y > 0 && y < 400 Fare tuvalin içinde

Örnek: x = 150, y = 200 iken dört koşul da true olduğundan tuvalIcinde true olur; x = 0 veya x = 500 iken zincir false döner (kısa devre ile sonraki koşullara bakılmayabilir). Karışık ifadede (skor >= 10 && can > 0) || oyunBitti için skor 10, can 2 ve oyun devam ediyorsa parantez içi true olduğundan sonuç true (kazanma); skor 7 iken parantez false kalır, oyunBitti de false ise tüm ifade false olur.

Dikkat: && ifadesinde ilk koşul false ise JavaScript ikinci koşula bakmadan sonucu false kabul eder. Örneğin can > 0 && skor === hedefSkor ifadesinde can 0 ise skor kontrolü yapılmaz. Bu, gereksiz karşılaştırmaları atladığı için performansı iyileştirir; ancak ikinci tarafta yan etki (ör. skor artırma veya fonksiyon çağrısı) varsa o kod hiç çalışmaz — dikkatsizlikte beklenmeyen hatalara yol açabilir.

Bilgi: Bu davranışa kısa devre (short-circuit) denir; && için short-circuit AND, || için short-circuit OR olarak da anılır. || için aynı mantık geçerlidir: ilk operand true ise ikinciye bakılmaz.

Kod bloğu: Karşılaştırma ve mantıksal operatör kullanımı — çalışır sketch.

Kod 5.

javascript
let x = 150;let y = 200;let skor = 7;let can = 2;let sure = 0;let oyunBitti = false; function setup() {  createCanvas(400, 280);} function draw() {  background(240);  fill(0);  textSize(14);   // Dört koşullu VE: nokta tuval içinde mi?  let tuvalIcinde = (x > 0 && x < 400 && y > 0 && y < 400); // true   // İkili VE: skor yeterli mi ve oyun bitmedi mi?  let kazandi = (skor >= 10 && !oyunBitti); // false — skor henüz 7   // Üçlü VE: oyun devam edebilir mi?  let oyunDevam = (can > 0 && skor < 10 && !oyunBitti); // true   // VEYA: oyun bitti mi? (can veya süre tükendi)  let oyunSonu = (can === 0 || sure === 0); // true — sure 0   // Parantezli karışım: kazanma veya zorunlu bitiş  let ekranMesaji = (skor >= 10 && can > 0) || oyunBitti; // false   text("tuvalIcinde: " + tuvalIcinde, 20, 40);  text("kazandi: " + kazandi, 20, 70);  text("oyunDevam: " + oyunDevam, 20, 100);  text("oyunSonu: " + oyunSonu, 20, 130);  text("ekranMesaji: " + ekranMesaji, 20, 160);}

3.3. if, else if ve else Yapıları

Tanım: Koşullu ifade (conditional statement) — Belirli bir koşul doğruysa (true) bir kod bloğunu, değilse başka bir bloğu çalıştıran yapıdır.

Temel sözdizimi:

Kod 6.

javascript
if (koşul) {  // koşul doğruysa çalışır} else if (baskaKoşul) {  // ilk koşul yanlış, bu doğruysa çalışır} else {  // hiçbiri doğru değilse çalışır}

Bilgi — girinti (indentation): Süslü parantez { } bloğun sınırını belirler; JavaScript sözdizimi açısından girinti zorunlu değildir (Python’daki gibi değildir). Yine de if / else gövdesindeki satırları içeri almak okunabilirliği ciddi biçimde artırır: hangi satırın hangi bloğa ait olduğu gözle hemen görülür. Bu kitaptaki tüm örneklerde blok gövdesi girintilidir. İngilizcede bu uygulamaya indentation denir.

Aşağıdaki üç örnekte sol taraftaki (girintisiz) ve sağdaki (girintili) kod JavaScript’te çoğu zaman aynı şekilde çalışır; fark okunabilirliktedir. Özellikle iç içe koşullarda girinti olmadan hangi satırın hangi bloğa ait olduğu hızla kaybolur.

Örnek 1 — tek if (girintisiz):

Kod 7.

javascript
if (skor >= 10) {fill(0, 200, 0);ellipse(200, 200, 80, 80);}

Girintili hali:

Kod 8.

javascript
if (skor >= 10) {  fill(0, 200, 0);  ellipse(200, 200, 80, 80);}

Örnek 2 — if / else (girintisiz):

Kod 9.

javascript
if (can > 0) {background(200, 230, 200);} else {background(230, 180, 180);}

Girintili hali:

Kod 10.

javascript
if (can > 0) {  background(200, 230, 200);} else {  background(230, 180, 180);}

Örnek 3 — iç içe koşul (girintisiz):

Kod 11.

javascript
if (!oyunBitti) {if (skor >= HEDEF_SKOR) {oyunBitti = true;}}

Girintili hali:

Kod 12.

javascript
if (!oyunBitti) {  if (skor >= HEDEF_SKOR) {    oyunBitti = true;  }}

Bilgi: Python’da girinti yalnızca görsel değil, sözdiziminin parçasıdır: yanlış veya eksik indentation programı çalıştırmaz (IndentationError). JavaScript / p5.js’te ise girinti bozulsa bile kod çoğu zaman çalışır; hata sessizce okunabilirlikte ve bakımdadır. Bu yüzden JS’te «çalışıyor» demek yeterli değildir — tutarlı indentation, ekip ve hata ayıklama için yine zorunlu iyi pratik sayılır.

Dikkat: Girinti için boşluk (space) veya sekme (Tab) kullanılabilir. Boşluk, klavyedeki uzun boşluk çubuğudur; sekme için ise çoğu klavyede Tab tuşuna basılır (genelde Q’nun solunda, Caps Lock’un üstünde; üzerinde iki ok veya ⇥ simgesi olabilir). İkisini aynı dosyada karıştırmak sürüm kontrolünde ve farklı editörlerde «yanlış hizalı» görünen satırlara yol açabilir. Birini seçip tutarlı kullanın; p5.js Web Editor ve birçok proje 2 veya 4 boşluk tercih eder. Tab tuşuna basınca editör çoğu zaman boşluk üretecek şekilde ayarlanabilir — önemli olan tutarlılıktır, karakterin «görünmez» olması okuyanı yanıltmasın diye.

Kod bloğu: Koşula göre renk değiştiren çizim.

Kod 13.

javascript
let sicaklik; // Değişken — draw dışında tanımlandı (setup'ta değer verilecek) function setup() {  createCanvas(400, 400);  sicaklik = 18; // Başlangıç değeri} function draw() {  background(240);   if (sicaklik > 25) {    fill(200, 80, 50);   // Sıcak — turuncu  } else {    fill(50, 100, 200);  // Serin — mavi  }   noStroke();  ellipse(200, 200, 100, 100);}

Bu örnekte koşul, fare veya mesafe yerine sayısal bir değişken (sicaklik) üzerinden kurulmuştur. sicaklik değeri setup() içinde bir kez atanır; draw() her frame'de aynı değerle koşulu değerlendirir. Fare ile etkileşimli sürüm, fare girdisi ve dist() tanıtıldıktan sonra 4.1’de verilecektir.

Aşağıdaki özet, draw() içindeki if/else dallanmasını gösterir. İlk akış şeması örneği olduğu için simgeler, döngü bölümündeki şemalarla aynı üç eleman üzerinden hatırlatılır: yuvarlak = başla/bitiş, elmas = koşul, dikdörtgen = işlem (oklar sırayı gösterir).

Tablo 12.

Simge Anlamı Bu örnekte
Yuvarlak Başla / bitiş Şemanın girişi ve çıkışı
Elmas Koşul sorusu sicaklik > 25
Dikdörtgen Yapılacak işlem draw(), fill, ellipse

Görsel 3. if/else dallanma akışı — koşula göre renk seçimi
Görsel 3. if/else dallanma akışı — koşula göre renk seçimi

Görsel 3 Başla → koşul → iki fill dalı → ortak ellipse → Bitir yolunu gösterir; sicaklik > 25 yalnızca rengi seçer.

if / else if / else ile görsel karar: Trafik ışığı

İkiden fazla alternatif için else if zinciri kullanılır. Trafik ışığı bunun en tanıdık örneğidir: tek bir durum değişkeni hangi lambanın yanacağını seçer; zincir yalnızca ilk uyan dalı çalıştırır. Aşağıdaki sketch üç olası durumu da tek çalıştırmada yan yana çizer; fare, klavye veya animasyon yoktur.

Kod bloğu: Üç durum değeri — üç trafik ışığı, tek tuval.

Kod 14.

javascript
function setup() {  createCanvas(620, 400);  noLoop();} function draw() {  background(255);  textAlign(CENTER);  textSize(15);  noStroke();   // —— if ——  let durum = "kirmizi";  fill(21, 101, 192);  text("if", 130, 78);  textSize(11);  fill(198, 40, 40);  text('durum = "kirmizi"', 130, 98);  fill(40);  rect(100, 110, 60, 230);  fill(90);  ellipse(130, 154, 40, 40);  ellipse(130, 224, 40, 40);  ellipse(130, 294, 40, 40);  if (durum === "kirmizi") {    fill(220, 60, 60);    ellipse(130, 154, 40, 40);  } else if (durum === "sari") {    fill(240, 200, 50);    ellipse(130, 224, 40, 40);  } else {    fill(70, 200, 90);    ellipse(130, 294, 40, 40);  }   // —— else if ——  durum = "sari";  textSize(15);  fill(21, 101, 192);  text("else if", 310, 78);  textSize(11);  fill(184, 134, 11);  text('durum = "sari"', 310, 98);  fill(40);  rect(280, 110, 60, 230);  fill(90);  ellipse(310, 154, 40, 40);  ellipse(310, 224, 40, 40);  ellipse(310, 294, 40, 40);  if (durum === "kirmizi") {    fill(220, 60, 60);    ellipse(310, 154, 40, 40);  } else if (durum === "sari") {    fill(240, 200, 50);    ellipse(310, 224, 40, 40);  } else {    fill(70, 200, 90);    ellipse(310, 294, 40, 40);  }   // —— else ——  durum = "yesil";  textSize(15);  fill(21, 101, 192);  text("else", 490, 78);  textSize(11);  fill(46, 125, 50);  text('durum = "yesil"', 490, 98);  fill(40);  rect(460, 110, 60, 230);  fill(90);  ellipse(490, 154, 40, 40);  ellipse(490, 224, 40, 40);  ellipse(490, 294, 40, 40);  if (durum === "kirmizi") {    fill(220, 60, 60);    ellipse(490, 154, 40, 40);  } else if (durum === "sari") {    fill(240, 200, 50);    ellipse(490, 224, 40, 40);  } else {    fill(70, 200, 90);    ellipse(490, 294, 40, 40);  }}

Önce üç lamba gri çizilir; if / else if / else yalnızca duruma uyan lambayı yeniden boyar. Soldan sağa üç sütun sırasıyla if, else if ve else dallarını gösterir.

Görsel 4. Trafik ışığı — soldan sağa if, else if, else
Görsel 4. Trafik ışığı — soldan sağa if, else if, else

Görsel 4 soldan sağa if ("kirmizi"), else if ("sari") ve else ("yesil") dallarını ayırır; her durumda yalnızca bir dal çalışır.

if/else oyunlarda neden bu kadar sık?

Oyunlar sürekli karar verir: can bitti mi, engelle çarpışma oldu mu, menü mü oyun içi mi, skor eşiği aşıldı mı? Bu kararların çoğu if / else if / else ile kodlanır. Tanıdık oyunlardan birkaç örnek:

Tablo 13.

Oyun (örnek) Koşul (kabaca) Sonuç
Super Mario 1-Up mantarı alındı Can bir artar
Pac-Man Hayalet ile çarpışma ve güç hapı aktif değil Bir can kaybedilir
Tetris Bir satır tamamen dolu Satır silinir, skor artar
Futbol / FIFA tarzı Top kale çizgisini geçti Gol; skor güncellenir
Candy Crush tarzı Üç veya daha fazla aynı renk komşu Taşlar patlar, puan gelir

Aynı iskelet ilerideki Daire Tıklama örneğinde de görünür: isabet varsa skor artar, hedef skora ulaşınca oyun biter.

Sıra Sizde: Bildiğiniz bir oyundan üç durum seçin (yukarıdaki gibi). Her birini kısa bir koşul cümlesi olarak yazın; ardından ya küçük bir if/else iskeleti ya da bir akış şeması çizin.

İç içe if / else ve mantıksal operatör eşdeğerliği

Bir if bloğunun içine başka bir if (ve isteğe bağlı else) yazmak iç içe koşul (nested conditional) adını alır: önce dış koşul, doğruysa iç koşul sorulur. Her düzeydeki koşul tek bir karşılaştırma olmak zorunda değildir; && / || / ! ile birleştirilmiş daha karmaşık ifadeler de yazılabilir (ör. can > 0 && skor < 10). else yalnızca gerçekten yapılacak bir iş varken eklenir; boş else { } bloğu gereksizdir.

Örnek 1

Skor yalnızca can varken ve oyun bitmemişken artsın. İç içe if ile tek if + && aynı kararı verir:

Kod 15.

javascript
if (can > 0) {  if (!oyunBitti) {    skor = skor + 1;  }}

Kod 16.

javascript
if (can > 0 && !oyunBitti) {  skor = skor + 1;}

Görsel 5. Örnek 1 — iç içe if ve tek if + &&
Görsel 5. Örnek 1 — iç içe if ve tek if + &&

Görsel 5 Örnek 1’in iki yazımını yan yana gösterir.

Örnek 2

else dallarında farklı mesajlar:

Kod 17.

javascript
if (can > 0) {  if (!oyunBitti) {    skor = skor + 1;    mesaj = "Devam";  } else {    mesaj = "Oyun bitti";  }} else {  mesaj = "Can yok";}

Görsel 6. Örnek 2 — iç içe if / else akışı
Görsel 6. Örnek 2 — iç içe if / else akışı

Görsel 6 üç yolu ayırır: devam, oyun bitti, can yok.

Örnek 3

Dış koşulda birden fazla ifade (&&); içeride skor eşiği. Her dal farklı işlem yapar:

Kod 18.

javascript
if (can > 0 && !oyunBitti) {  if (skor >= 10) {    mesaj = "Seviye atlandı";    oyunBitti = true;  } else {    mesaj = "Skor yetersiz";  }} else {  mesaj = "Oyuna devam edilemez";}

Görsel 7. Örnek 3 — birleşik koşulu olan iç içe if / else
Görsel 7. Örnek 3 — birleşik koşulu olan iç içe if / else

Görsel 7 önce can > 0 && !oyunBitti sorusunu, ardından skor eşiğini izler.

Bilgi: || için de benzer bir eşdeğerlik vardır. Örneğin “can bitti veya süre bitti → oyunu bitir” kuralı ardışık iflerle veya if (can === 0 || sure === 0) ile yazılabilir.

Sıra Sizde: Aşağıdaki kodu çalıştırmadan önce konsolda hangi satırların, hangi sırayla görüneceğini yazın. Karşılaştırma (>, <, ===, !==, >=) ve mantıksal (&&, ||, !) operatörler ile if / else if / else dallarını adım adım izleyin. Sonra p5.js Web Editor’de setup içine yapıştırıp konsoldan doğrulayın.

Kod 19.

javascript
let x = 15;let y = 8;let aktif = true;let seviye = 2; console.log("basla"); if (x > 10 && y < 10) {  console.log("bolge-icinde");} else {  console.log("bolge-disinda");} if (!aktif || seviye === 1) {  console.log("beklet");} else if (seviye >= 2 && x === 15) {  console.log("ilerle");} else {  console.log("bekle");} let sonuc = (x >= 10 && y !== 0) || !aktif;console.log(sonuc);

Yapay Zekâ Etkileşimi: Koşul Cümlesi Tasarlama

Amaç: if/else yapısını günlük dildeki koşullarla eşleştirerek pekiştirmek.

Adım 1: Üç kısa oyun kuralı yazın (ör. “can sıfırsa bitir”, “skor 10 olunca seviye atla”). Adım 2: Yapay zekâya bunları if/else if/else iskeletine çevirmesini söyleyin. Adım 3: Üretilen kodda = / === ve && kullanımını kontrol edin; hatalı atamaları düzeltin.

Yapay Zekâ Etkileşimi: Sketch Okunabilirliğini Gözden Geçirme Tahmini etkinliği tamamlama süresi: 15–20 dakika.

Amaç: Yazılan bir sketch’in okunabilirliğini (girinti, değişken adlandırma vb.) yapay zekâya kontrol ettirmek.

Adım 1: Bu ana başlıkta yazdığınız bir sketch’i (örneğin sıcaklık rengi) kopyalayın. Adım 2: Tercih ettiğiniz bir yapay zekâ sohbet robotunu açın. Adım 3: Aşağıdaki istemi girin.

Örnek İstem: "Bir p5.js sketch’im var. Okunabilirlik açısından incele: girinti (indentation) tutarlı mı, değişken adları anlamlı mı (camelCase), sabitler BÜYÜK_HARF mi, gereksiz karmaşık yerler var mı? Kısa madde madde öneri ver; kodun mantığını değiştirme. Kod: [sketch]"

Adım 4: Önerileri uygulayıp editörde tekrar çalıştırın. Davranış aynı kalmalı; yalnızca okunuş iyileşmeli.

Özet

Değişkenler, programın çalışma sırasında okuyup güncelleyebildiği isimlendirilmiş bellek alanlarıdır. let değişebilir, const değişmez bağlar kurar; örneklerde skor ve konum için let, tuval boyutu gibi sabitler için const tercih edilir. Number, string ve boolean temel türlerdir; string birleştirme ve .length kısa metin işlemlerinde yeterlidir.

Atama (=) değer yazar; karşılaştırma (===, <, >) ise doğru/yanlış üretir. Mantıksal operatörler birden fazla koşulu birleştirir: && tümünün doğru olmasını, || en az birinin doğru olmasını, ! ise değillemeyi sağlar. if / else if / else zinciri bu koşullara göre farklı kod yollarını seçer. İç içe if ile tek if + && çoğu zaman aynı kararı verir; ara adım yoksa birleşik koşul daha sadedir.

Oyun kodunda koşul çoğu zaman draw() veya olay fonksiyonu içinde okunur; yanlış yerde yazılan atama veya = / === karışıklığı sessiz hatalara yol açar. Bu ana başlığın çıktısı, bir sonraki adımda fare girdisi ve mesafe hesabıyla birleşecek sağlam bir karar verme iskeletidir.

Neler Öğrendik?

Soru 1 let skor = 0 ile const GENISLIK = 400 arasındaki temel fark nedir?

A) İkisi de sonradan değiştirilebilir

B) let değişebilir bağ, const yeniden atanamaz

C) const yalnızca string tutar

D) let yalnızca setup içinde çalışır

E) Fark yoktur

Soru 2 can > 0 && !oyunBitti ifadesi ne zaman true olur?

A) can sıfır ve oyun bitmişken

B) can pozitif ve oyun bitmemişken

C) Yalnızca can sıfırken

D) Yalnızca oyun bitmişken

E) Her frame zorunlu true

Soru 3 x = 5 ile x === 5 farkı nedir?

A) İkisi de karşılaştırır

B) = atar, === karşılaştırır

C) === atar, = karşılaştırır

D) İkisi de string birleştirir

E) Yalnızca = boolean üretir

Soru 4 else if ne zaman devreye girer?

A) Önceki if koşulları false ise ve kendi koşulu true ise

B) Her zaman if ile birlikte

C) Yalnızca setup içinde

D) draw hiç çağrılmazsa

E) Yalnızca fare tıklanınca

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

Yararlanılan Kaynaklar

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