Bölüm 1 · Sunum 4
Programın bir şeyi aklında tutmasını ve doğru mu yanlış mı diye sormasını öğreneceğiz.
draw her frame baştan çalışıyor. Bir sonraki frame’de skorun 7 olduğunu nereden bilecek?
skor.letYeni bir kutu aç.skorKutunun adı.=İçine şunu koy.0İlk değer.skor = skor + 1 nasıl okunur?Önce sağ taraf hesaplanır: kutunun içindekine 1 ekle. Sonra sonuç aynı kutuya geri yazılır. Bu bir denklem değil, bir komut.Kutu en üstte, bir kez açılıyor. draw her frame aynı kutuya bakıp içini 1 artırıyor.
let skor = 0; satırını draw’ın içine taşırsak ne görürüz?Sayı yine artar mı? Tahmininizi söyleyin, sonra deneyelim.
draw içinde açılan kutu, frame bitince çöpe gider. Oyun boyunca yaşaması gereken değerleri setup ve draw’ın dışında, en üstte tanımlayın.letİçi sonradan değişebilen kutu. Skor, konum, can.constKilitli kutu. Bir kez değer verilir, sonra değiştirilemez. Hedef skor, tuval ölçüsü.varEski sözdizimi. Beklenmedik davranışlara yol açabilir. Bu derste kullanmıyoruz.let ve const blok kapsamlıdır: süslü parantez { } içinde tanımlanırsa dışarıdan erişilemez. var ise fonksiyon kapsamlıdır.
| Tür | Ne tutar? | Örnek | Oyunda nerede? |
|---|---|---|---|
| number | Tam ya da ondalıklı sayı | 42, 3.14, -7 | Konum, boyut, skor, can |
| string | Metin (tırnak içinde) | "Merhaba", 'p5.js' | Skor yazısı, “Kazandın!” mesajı |
| boolean | Doğru ya da yanlış | true, false | oyunBitti, hedefVuruldu |
JavaScript’te undefined, null, object gibi başka türler de var. Şimdilik bu üçü yeterli.
hedefX, topHizi, kalanSurea, b, temp1: kodu izlemeyi zorlaştırır.x ve y gibi tek harfli adlar koordinat için yaygındır.
HEDEF_SKOR, MAKS_CAN.İkisi de dilin zorunlu kuralı değil, topluluğun benimsediği bir örf (convention). Örneklerimizde hep bu düzeni kullanacağız.
x = 5 ile x === 5 aynı şey mi?Biri bir şey yapıyor, diğeri bir şey soruyor. Hangisi hangisi?
x = 5Atama“x kutusuna 5 koy.” Kutunun içi değişir.x === 5Karşılaştırma“x’in içindeki 5 mi?” Kutu değişmez; cevap true ya da false olur.== de vardır ama tür dönüşümü yapar: "5" == 5 sonucu true çıkar. Örneklerimizde hem değeri hem türü kontrol eden === kullanıyoruz.| İşlem | Yazımı | Ö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 ya da false |
Mini oyunlarımız çoğunlukla sayı ve boolean ile ilerler. Yine de skor yazısı, seviye adı ya da “Kazandın!” gibi mesajlar string’dir.
number olarak tutulur; ekrana yazarken metinle birleştirilir. Metnin rengi fill ile ayarlanır.String(skor) ya da skor + "". Tersi (Number("10"), parseInt) şimdilik gerekmiyor.Her karşılaştırmanın sonucu bir boolean’dır: true ya da false.
| Operatör | Sorduğu soru | Örnek | Sonuç |
|---|---|---|---|
=== | Tam eşit mi? (değer + tür) | skor === 10 | skor 10 ise true; 7 ise false |
!== | Eşit değil mi? | durum !== "bitti" | durum "oynuyor" ise true |
< | Küçük mü? | x < 100 | x 50 ise true; 150 ise false |
> | Büyük mü? | y > 200 | y 250 ise true; 100 ise false |
<= | Küçük ya da eşit mi? | skor <= 5 | skor 5 ise true; 7 ise false |
>= | Büyük ya da eşit mi? | can >= 1 | can 1 ise true; 0 ise false |
== ile === farkı: tür dönüşümü"10" bir string, 10 ise bir number. Görünüşte aynılar ama türleri farklı.
== karşılaştırmadan önce türleri birbirine çevirmeye çalışır (type coercion).=== hem değere hem türe bakar.!= dönüştürür, !== dönüştürmez.| İfade | Sonuç |
|---|---|
"10" == 10 | true |
"10" === 10 | false |
10 === 10 | true |
"10" != 10 | false |
"10" !== 10 | true |
Sürpriz eşleşmeleri önlemek için örneklerimizde === ve !== kullanıyoruz.
Burada iki ayrı soru var. İkisini tek bir soruda nasıl birleştiririz?
Karşılaştırmaların ürettiği true / false değerlerini birleştirirler. Sonuç yine bir boolean’dır.
| Operatör | Anlamı | Örnek | Sonuç |
|---|---|---|---|
&& | VE: iki koşul da doğru olmalı | x > 0 && x < 400 | x 150 iken true; 500 iken false |
|| | VEYA: en az biri doğru yeter | can === 0 || sure === 0 | can 0, sure 30 iken true |
! | DEĞİL: değeri tersine çevirir | !oyunBitti | oyunBitti false ise true |
Sorunun cevabı: can > 0 && !oyunBitti
skor === 10: operatör ===; operandlar skor ve 10.x > 0 && x < 400: &&’nin operandları iki koşul.!oyunBitti: ! tek operand alır.true mu false mu olduğunu satır satır gösteren tablodur.
&& (VE): ikisi de doğru olmalı| A | B | A && B |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
Oyunda: can > 0 && !oyunBitti
| can | oyunBitti | can > 0 | !oyunBitti | Sonuç |
|---|---|---|---|---|
| 3 | false | true | true | true |
| 0 | false | false | true | false |
| 3 | true | true | false | false |
|| (VEYA): en az biri doğru yeter| A | B | A || B |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
Oyunda: can === 0 || sure === 0
| can | sure | can === 0 | sure === 0 | Sonuç |
|---|---|---|---|---|
| 0 | 45 | true | false | true |
| 2 | 0 | false | true | true |
| 2 | 45 | false | false | false |
! (DEĞİL): tersine çevir| A | !A |
|---|---|
| true | false |
| false | true |
! tek bir boolean değeri tersine çevirir.!oyunBitti: oyun bitmediyse true, bittiyse false.
! için 2 durum.20 < x < 60 yazarız. JavaScript’te de çalışır mı?x = 70 olsun. 70, 20 ile 60 arasında değil. Sizce sonuç ne çıkar?
20 < 70 sorusunu çözer: true.true < 60 sorusunu sorar.true. Oysa 70 aralıkta değil!&& ile yazılırTuvalin içinde mi? x > 0 && x < width&&||| Komut | Ne yapar? |
|---|---|
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ır; fill ve stroke ile kullanılır. |
Rengi bir kez tanımlayıp birçok yerde kullanabilirsiniz. Değiştirmek istediğinizde tek satır değişir.
| Biçim | Örnek | Ne zaman true? |
|---|---|---|
| Üçlü VE | skor >= 5 && can > 0 && !oyunBitti | Üçü birden doğruysa |
| Üçlü VEYA | can === 0 || sure === 0 || skor >= 100 | En az biri doğruysa |
| VE + VEYA | (skor >= 10 && can > 0) || oyunBitti | Skor ve can koşulu tutarsa ya da oyun bitmişse |
| Tuval sınırı | x > 0 && x < 400 && y > 0 && y < 400 | Nokta tuvalin içindeyse |
&&, ||’den önce işlenir. Karışıklığı önlemek için parantez kullanın.&&İlk koşul false ise sonuç zaten false. İkinciye bakılmaz.can > 0 && skor === hedefSkor: can 0 ise skor kontrol edilmez.||İlk koşul true ise sonuç zaten true. İkinciye bakılmaz.let, doğum yılınızı başka bir let ile tutun. Tuvale “Ada, 2006” gibi tek satır yazdırın.let x = 0; tanımlayın. Her frame 2 artsın ve bir daire o konumda dursun. Tuvalin sonuna gelince başa dönsün.const HIZ = 2; tanımlayıp 2 yerine onu kullanın. Sonra draw içinde HIZ = 5; yazmayı deneyin. Konsol ne diyor?| a | b | !(a && b) | !a || !b |
|---|---|---|---|
| true | true | ? | ? |
| true | false | ? | ? |
| false | true | ? | ? |
| false | false | ? | ? |
text ile ekrana yazdırarak doğrulayın.b kaç olur?b = a, a’nın o andaki değerini b kutusuna kopyalar. Kutular birbirine bağlanmaz.
"Skor: " + 3 + 4 ifadesinin sonucu ne?"Skor: 7""Skor: 34"7Soldan sağa: önce "Skor: " + 3 bir metin olur, sonra ona 4 eklenir. Toplamak istiyorsanız parantez: "Skor: " + (3 + 4).
&& önce işlenir: sure > 0 && !oyunBitti → true. Sonra false || true → true. Parantez yazsaydık tartışmaya gerek kalmazdı.
let değişebilir, const değişmez.setup ve draw’ın dışında tanımlanır.= atar; === sorar. Karşılaştırmanın sonucu hep boolean’dır.&& ikisi de, || en az biri, ! tersi.20 < x && x < 60 diye yazılır; zincir yazılmaz.Sıradaki ders
if, else if ve else.