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.
Aritmetik Operatörler: Dijital Matematik
-
Toplama (+): Sayıları toplar, metinleri yan yana getirir.
-
Çıkarma (-): Bir değeri diğerinden çıkarır.
-
Çarpma (*) ve Bölme (/): Temel çarpma ve bölme işlemlerini yapar.
-
Mod Alma (%): Bir sayının diğerine bölümünden kalan sonucu verir. (Örneğin: Sayı çift mi tek mi anlamak için çok kullanışlıdır).
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.
Atama Operatörleri: Değeri Kutula
= sembolü aslında
bir
"eşittir" değil, bir atama operatörüdür.
-
puan = 50;dediğinde, 50 değerini alıp puan kutusunun içine koyarsın. -
Kısayollar:
puan += 10;yazarsan, mevcut puanına 10 ekleyip tekrar kutuya koyarsın. (Yanipuan = puan + 10;demenin kısa yoludur).
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: "Puan değişkeninin değerini al, üzerine 50 ekle ve sonucu tekrar puan değişkeninin içine koy."
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.
Karşılaştırma Operatörleri: Karar Verme Vakti
Boolean (true veya false) sonuç
verir:
-
Eşitlik (== ve ===): İki değer aynı mı? (Önemli Not:
===kullanmak her zaman daha güvenlidir çünkü sadece değere değil, veri tipine de bakar). -
Büyüktür / Küçüktür (>, <): Sayısal değerleri birbiriyle kıyaslar.
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: "18 yaşından büyük veya 18'e eşit mi?" 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.
Mantıksal Operatörler: Birden Fazla Karar
-
VE (&&): Tüm şartlar doğruysa
truedöner. (Örn: Hem kullanıcı adı hem şifre doğru mu?). -
VEYA (||): Şartlardan en az biri doğruysa
truedöner. (Örn: Kullanıcı ister e-posta ile ister telefonla giriş yapsın). -
DEĞİL (!): Bir kararı tersine çevirir. (Doğruyu yanlış, yanlışı doğru yapar).
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.
"Ehliyet yok mu?" (NOT ehliyetVar) gibi olumsuz sorgular yapmak istediğimizde bu operatörü kullanırız.
ByteOmi Hazırlığı: Perde Arkasındaki Kurallar
-
İşlem Önceliği (Precedence): Bilgisayar önce çarpmayı mı yapar yoksa toplamayı mı? Karışık formüllerde hata yapmamak için bu sıralamayı bilmek hayat kurtarır.
-
Tip Dönüşümü (Coercion): Bir sayıyla bir metni toplarsan ne olur? Operatörlerin veri tiplerini arka planda nasıl değiştirdiğini (ve bazen nasıl hatalara yol açtığını) detaylıca inceleyeceğiz.
-
Mantıksal Kısa Devre (Short-Circuit): JavaScript, ilk şart yanlışsa ikinci şarta bakmadan karar verebilir. Bu, büyük projelerde performans artırmak için kullandığımız bir "yazılım mimarisi" hilesidir.
Operatörler İş Başında: Bir Senaryo
-
Adım 1 (Aritmetik):
puan + 10(Kullanıcı bir görevi tamamladı, 10 puan kazandı). -
Adım 2 (Karşılaştırma):
puan >= 100(Puanı 100 veya daha fazla mı? Eğer öyleyse ödül kazandı!). -
Adım 3 (Mantıksal):
puan >= 100 && yeniUye === true(Puanı 100'den büyük VE kullanıcı sitemize yeni mi katılmış? Sadece iki şart da doğruysa özel "Hoş Geldin" indirimi tanımla).
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ı.
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.