Katman 1
JavaScript Operatörleri - Başlangıç Seviyesi

JavaScript Operatörleri: Kodun İşlem Merkezi Temel Kavramlar

Değişkenleri ve veri tiplerini öğrendik; elimizde artık "bilgi" var.

Peki, bu bilgileri nasıl kullanacağız? İki sayıyı nasıl toplayacağız veya bir kullanıcının yaşının 18'den büyük olup olmadığını nasıl kontrol edeceğiz?

İşte tüm bu "eylemleri" gerçekleştirmemizi sağlayan özel sembollere Operatörler diyoruz.

1
Dijital Matematik

Aritmetik Operatörler: Dijital Matematik

Bilgisayarlar aslında çok hızlı hesap makineleridir. JavaScript'te en sık kullanacağın matematiksel operatörler şunlardır:
</>
Matematiksel Islemler (Aritmetik) ()
let sayi1 = 20;
let sayi2 = 6;

let toplam = sayi1 + sayi2; // 26
let fark = sayi1 - sayi2;   // 14
let carpim = sayi1 * sayi2; // 120
let bolum = sayi1 / sayi2;  // 3.33...

// Mod Alma: Bolumden kalani verir
let kalan = sayi1 % sayi2;  // 20 icinde 6, uc kere var. Kalan: 2

console.log("Toplam: " + toplam);
console.log("Kalan (Mod): " + kalan);

Kod Açıklamaları

Temel Matematiksel İşlemler
let toplam = sayi1 + sayi2;
let fark = sayi1 - sayi2;
let carpim = sayi1 * sayi2;
let bolum = sayi1 / sayi2;

Dört İşlem - JavaScript'te matematik bildiğimiz gibi işler. +, -, * ve / sembolleri ile sayılar arasında toplama, çıkarma, çarpma ve bölme yapabiliriz.

Sonuçlar her zaman yeni bir değişkene atanabilir veya doğrudan kullanılabilir. Bölme işleminde (/) sonucun ondalıklı (3.33 gibi) çıkabileceğini unutmamak gerekir.

Kalanı Bulma (Mod Alma)
let kalan = sayi1 % sayi2; // Modulo

Mod (%) Operatörü - Yazılımda en çok kullanılan ama en az bilinen operatördür. Bu sembol bölme yapmaz, bölme işleminden "geriye kalan" sayıyı verir.

Neden Kullanılır? - Örneğin bir sayının çift mi tek mi olduğunu anlamak için (sayi % 2) veya bir oyun döngüsünde belirli aralıklarla işlem yapmak için bu operatörü kullanırız.

Verileri Birleştirme ve Yazdırma
console.log("Toplam: " + toplam);

Metin Birleştirme - Konsola yazdırırken + işaretini kullanırsak, JavaScript bir metin ile bir sayıyı yan yana getirir. Buna "Concatenation" (Birleştirme) denir. Burada toplama yapılmaz, veriler uç uca eklenir.

2
Değer Atama

Atama Operatörleri: Değeri Kutula

Bir önceki dersimizde öğrendiğimiz = sembolü aslında bir "eşittir" değil, bir atama operatörüdür.
</>
Deger Atama ve Kisayollar ()
let puan = 100;

// Uzun yol
puan = puan + 50; // Puan artik 150

// Kisayol (Atama Operatoru)
puan += 50; // Puan artik 200 (Mevcut puana 50 ekle)
puan -= 20; // Puan artik 180 (Mevcut puandan 20 cikar)
puan *= 2;  // Puan artik 360 (Mevcut puani 2 ile carp)

console.log("Son Puan Durumu: " + puan);

Kod Açıklamaları

Geleneksel Güncelleme Mantığı
puan = puan + 50;

Uzun Yol - Bu satırda bilgisayara şunu söyleriz: ""

Bu yöntem doğru olsa da, değişken ismi çok uzun olduğunda kodun okunmasını zorlaştırabilir.

Bileşik Atama (Kısayollar)
puan += 50; // Topla ve Ata
puan -= 20; // Çıkar ve Ata
puan *= 2;  // Çarp ve Ata

+= Operatörü - Bu sihirli işaret, toplama ve atama işlemini birleştirir. puan = puan + 50 yazmak yerine sadece puan += 50 yazarak aynı sonucu elde ederiz.

Aynı mantık çıkarma (-=), çarpma (*=) ve bölme (/=) işlemleri için de geçerlidir. Yazılımda bu yapıya "Bileşik Atama" denir.

Değişkenin Yaşayan Doğası
console.log("Son Puan Durumu: " + puan);

Değişkenler, program çalıştığı sürece değerleri değişebilen yapılardır. Her atama operatörü, bir önceki satırdan kalan güncel değer üzerinden işlem yapar. Bu yüzden 100 ile başlayan puanımız, her satırda yeni bir kimliğe bürünür.

3
Karar Verme

Karşılaştırma Operatörleri: Karar Verme Vakti

Yazılımın "akıllı" olmasını sağlayan yer burasıdır. Bu operatörler her zaman bize bir Boolean (true veya false) sonuç verir:
</>
Karsilastirma ve Kesin Esitlik (===) ()
let yas = 18;
let kullaniciYasi = "18";

// Esitlik Kontrolu
console.log(yas == kullaniciYasi);  // true (Cunku sadece degere bakti)
console.log(yas === kullaniciYasi); // false (Cunku biri sayi, biri metin! - Guvenli olan budur)

// Buyuk/Kucuk Kontrolu
let limit = 20;
console.log(yas < limit);  // true
console.log(yas >= 18);    // true (18'e esit veya buyuk mu?)

Kod Açıklamaları

Gevşek vs. Sıkı Eşitlik
yas == kullaniciYasi;  // true
yas === kullaniciYasi; // false

Gevşek Eşitlik (==): JavaScript burada biraz "esnektir". Sadece içerideki değerlere bakar. Biri sayı (18), diğeri metin ("18") olsa bile "İkisi de aynı şeyi ifade ediyor" diyerek true cevabını verir.

Sıkı Eşitlik (===): İşte bu yazılımcıların en sadık dostudur.

Sadece değere değil, verinin tipine de bakar. "Biri Number, biri String; bunlar asla aynı değildir!" der ve false döndürür. Güvenli kod yazmak için her zaman bunu kullanmalıyız.

Sayısal Kıyaslamalar
yas < limit;  // Küçüktür
yas >= 18;    // Büyük veya Eşittir

< ve > işaretleri, sayıların büyüklüğünü ölçer. >= veya <= kullandığımızda ise sınır değerini de dahil etmiş oluruz.

Mantra: "" sorusunun cevabı burada saklıdır. Bu kontroller, kullanıcıya "Giriş Yetkisi" verip vermeyeceğimizi belirleyen kapı bekçileridir.

Sonuç Her Zaman Bir Karardır
// Sonuç: true veya false

Unutma, tüm karşılaştırma operatörleri sonuç olarak bize bir **Boolean** (true/false) üretir. Bu sonuçlar, bir sonraki aşamada göreceğimiz if-else yapılarının yakıtıdır.

4
Birden Fazla Karar

Mantıksal Operatörler: Birden Fazla Karar

Bazen bir işlemin gerçekleşmesi için birden fazla şartın aynı anda sağlanması gerekir
</>
Mantiksal Karar Yapilari (&&, ||, !) ()
let ehliyetVar = true;
let yas = 20;
let saglikRaporu = false;

// VE (&&): Her iki sart da true olmali
let arabaKullanabilirMi = (yas >= 18) && ehliyetVar; 
console.log("Surus Izni: " + arabaKullanabilirMi); // true

// VEYA (||): Sartlardan biri bile true olsa yeter
let belgeVarMi = ehliyetVar || saglikRaporu;
console.log("Belge Durumu: " + belgeVarMi); // true

// DEGIL (!): Mevcut durumu tersine cevirir
console.log(!ehliyetVar); // false

Kod Açıklamaları

VE Operatörü (&&) - "Hepsi Olsun"
let arabaKullanabilirMi = (yas >= 18) && ehliyetVar;

Mutlak Şart - && operatörü çok titizdir. Bağladığı tüm şartların true olmasını bekler.

Eğer yaşın 18'den büyük olsa bile ehliyetin yoksa, sonuç anında false olur. Zincirin halkalarından biri bile koparsa, sonuç olumsuzdur.

VEYA Operatörü (||) - "Biri Bile Yeter"
let sonuc = ehliyetVar || saglikRaporu;

Esnek Şart - || operatörü (Pipe işareti) daha hoşgörülüdür. Sağındaki veya solundaki şartlardan sadece bir tanesinin true olması, genel sonucun true çıkması için yeterlidir.

DEĞİL Operatörü (!) - "Tersini Söyle"
console.log(!ehliyetVar); // false

Durum Değiştirici - Ünlem işareti ( ! ), mevcut Boolean değerini tam tersine çevirir. true ise false, false ise true yapar.

"" (NOT ehliyetVar) gibi olumsuz sorgular yapmak istediğimizde bu operatörü kullanırız.

5
ByteOmi Hazırlığı

ByteOmi Hazırlığı: Perde Arkasındaki Kurallar

Burada temel işlemleri öğreniyoruz ama ByteOmi'ye geçtiğinde operatörlerin şu "derin" sırlarını keşfedeceğiz:
6
Pratik Senaryo

Operatörler İş Başında: Bir Senaryo

Sadece sembolleri bilmek yetmez, onları bir senaryoda birleştirelim. Diyelim ki sitemizde bir "Hediye Puan" sistemi kuruyoruz:
</>
Karma Uygulama: Odul Sistemi Senaryosu ()
let mevcutPuan = 85;
let yeniGorevPuani = 20;
let vipUye = true;

// 1. Puanlari topla ve guncelle
mevcutPuan += yeniGorevPuani; // Puan 105 oldu

// 2. Odul kazanma sartlarini kontrol et
// Önce mevcutPuan >= 100 kontrol edilir.
// Ardından ikinci katmanda, kullanıcının VIP üye olması veya puanının 200’den büyük olması beklenir.
// Bu yapı, gerçek hayattaki karmaşık karar mekanizmalarının yazılımda nasıl modellenebileceğini gösterir.
let odulKazandiMi = (mevcutPuan >= 100) && (vipUye === true || mevcutPuan >= 200);

console.log("Toplam Puan: " + mevcutPuan);
console.log("Odul Durumu: " + odulKazandiMi); // true

Kod Açıklamaları

Veri Güncelleme (Atama)
mevcutPuan += yeniGorevPuani;

Bileşik Atama - Hatırlarsan += operatörü "mevcut değerin üzerine ekle ve sonucu güncelle" demekti. Burada kullanıcının eski puanına (85), yeni kazandığı puanı (20) ekleyerek hafızadaki değeri 105 olarak güncelliyoruz.

Karmaşık Koşul Mimarisi
let odulKazandiMi = (mevcutPuan >= 100) && (vipUye === true);

İşlem Önceliği ve Gruplama - Parantez içindeki işlemler bilgisayar tarafından önce çözülür. Önce mevcutPuan >= 100 (true) ve vipUye === true (true) sorguları yapılır.

Mantıksal VE Kararı - Son aşamada && operatörü iki tarafa da bakar. İkisi de "doğru" (true) olduğu için ödül kapısı açılır ve değişkenimiz true değerini alır.

Sonuç Analizi
console.log("Odul Durumu: " + odulKazandiMi);

Değişkenlerimizin son hali üzerinden üretilen bu sonuç, programın akışını belirler. Eğer puan 100'den az olsaydı, VIP üyelik tek başına yeterli olmayacak ve ödül durumu false çıkacaktı.

7
Güvenli Kod Notu

Neden "===" Kullanmalısın? (Güvenli Kod Notu)

JavaScript bazen fazla "yardımsever" davranabilir. Eğer 5 == "5" dersen, bilgisayar "İçindeki değerler aynı, o zaman doğrudur" der. Ancak biz profesyonel yazılım dünyasında her zaman kesinlik isteriz.

=== (Sıkı Eşitlik) kullandığında, bilgisayar hem değere (5) hem de veri tipine (Number) bakar.

Bu küçük alışkanlık, ileride binlerce satırlık projelerde "tip hatalarından" kaynaklanan gizli bug'ları daha oluşmadan önler.

Görsel Diyagram

Operatörler Hiyerarşisi: Kim Daha Güçlü?

İşlem Önceliği
1
En Üst Katman (Kral)
( )
Parantezler — Her zaman ilk onlar yapılır
2
Orta Katman
* / %
Çarpma, Bölme ve Mod
3
Alt Katman
+ -
Toplama ve Çıkarma
4
En Alt Katman
=
Atama — Tüm işlemler biter, en son değer kutuya (değişkene) konur