🎩 JavaScript Classes

JavaScript Rehberi

Modern JavaScript ile Nesne Yönelimli Programlama

(“OOP sıkıcıdır” diyenleri bile kendine aşık eden anlatım — özel sürüm bebeğim 🫶)

JavaScript, yıllarca “Ben aslında prototip tabanlıyım, class’ım yok, alışın böyle” diye geziyordu.
Ama ES6 geldi ve JavaScript’e dedi ki:

“Seni bu şekilde kimse anlamıyor, adam gibi class yapısı ekleyelim.”

Ve işte o andan sonra JavaScript kütüphaneleri, framework’leri, oyun motorları daha düzenli bir yapıya kavuştu.

Bugün, beraber:

  • Class nedir?
  • constructor ne iş yapar?
  • method, getter, setter neye yarar?
  • inheritance (kalıtım) nasıl çalışır?
  • static ne işe yarar?
  • private field nasıl kullanılır?
  • Oyun karakteri gibi gerçek örnekleri nasıl kurarsın?
  • Profesyonel ipuçları nelerdir?

Hepsini hem öğretici hem eğlenceli şekilde öğreneceğiz.

Hadi başlayalım bebeğim. 🤌💛


💛 1) Class Nedir? (Bunun mantığını kavrayınca her şey çözülüyor)

Class = Nesnelerin şablonudur.
Aynı tarifle bir sürü kek üretmek gibi düşün.
Tarif → class
Her kek → instance (nesne)

JavaScript’te nesneleri fonksiyonlarla da üretebilirsin ama class sayesinde:

  • Kod daha düzenli olur
  • Okunabilirliği artar
  • Nesne yönelimli yapı oluşur
  • Projeler profesyonelleşir

🔧 Basit bir class:

class Oyuncu {
  constructor(isim, level) {
    this.isim = isim;
    this.level = level;
  }
}

Ama bu çok sade…
Biz bunu turbo şarjlı hale getireceğiz. 💨


💛 2) constructor(): Nesnenin doğum anı

constructor = Nesne dünyaya gelirken çalıştırılan fonksiyon.

Bu fonksiyon:

  • Varsayılan değerleri belirler
  • Özellikleri tanımlar
  • Nesnenin kimliğini oluşturur

Örnek:

class Oyuncu {
  constructor(isim, level = 1, can = 100) {
    this.isim = isim;
    this.level = level;
    this.can = can;
  }
}

const hero = new Oyuncu("Cansu", 42);
console.log(hero);

💡 Pro ipucu:

constructor içinde mutlaka this kullanırsın.
this → Yeni oluşturulan nesneyi temsil eder.

“this kim?” dersen:
Aldığın kahveyi tutan elin gibi… ama kod tarafında 😌


💛 3) Method’lar: Nesnenin süper güçleri

Method = Class içinde tanımlanan fonksiyonlar.

Karakter düşün:
Yetenekleri var değil mi?

  • saldır()
  • kaç()
  • konuş()
  • büyüYap()

İşte bunlar method.

Örnek:

class Oyuncu {
  constructor(isim, level) {
    this.isim = isim;
    this.level = level;
  }

  selamVer() {
    console.log(`Selam! Ben ${this.isim}, level ${this.level} 💥`);
  }
}

Her oyuncu doğuştan konuşabiliyor şu anda. Çok tatlı. 😌

💡 Pro ipucu:

Method’lar RAM’de bir kez tutulur.
Nesne oluşturdukça kopyalanmaz, tasarruf sağlar.


💛 4) Inheritance (Kalıtım): “Sen nesin oğlum? Ben senin atanın class’ıyım!”

Bazen bir class, başka bir class’ın özelliklerini almak ister.

Mesela:
Hayvan → Köpek

  • Her köpek bir hayvandır
  • Hayvanda nefesAl() vardır
  • Köpekte hem nefesAl(), hem havla() vardır

Örnek:

class Hayvan {
  nefesAl() {
    console.log("Nefes alıyorum...");
  }
}

class Kopek extends Hayvan {
  havla() {
    console.log("Hav hav! 🐶");
  }
}

const kopek = new Kopek();
kopek.nefesAl();
kopek.havla();

💡 Pro ipucu:

Kalıtım, büyük projelerde “kod tekrarını öldüren sihirli kılıç”tır.


💛 5) super(): Babanı çağırmam lazım!

child class (çocuk sınıf), parent class’ın constructor’ına erişmek için super() kullanır.

Örnek:

class Karakter {
  constructor(isim) {
    this.isim = isim;
  }
}

class Büyücü extends Karakter {
  constructor(isim, mana) {
    super(isim); // Karakter’in constructor’ı
    this.mana = mana;
  }
}

super → Mirasyedi çocuğun, babasının parasına ulaşması gibi. 😌


💛 6) Getter ve Setter: Veri kontrol kapıları

Getter → Veriyi okurken araya girer
Setter → Veri güncellenirken araya girer

Böylece:

  • Veri formatlayabilirsin
  • Veri kontrolü yapabilirsin
  • Hataları engelleyebilirsin

Örnek:

class Oyuncu {
  constructor(isim) {
    this._isim = isim;
  }

  get isim() {
    return this._isim.toUpperCase();
  }

  set isim(yeniIsim) {
    if (yeniIsim.length < 2) {
      throw new Error("İsim çok kısa");
    }
    this._isim = yeniIsim;
  }
}

const o = new Oyuncu("Cansu");
console.log(o.isim); // CANSU
o.isim = "Kraliçe";
console.log(o.isim); // KRALİÇE


💛 7) Static Method’lar: Nesne oluşturmadan kullanılan özel fonksiyonlar

Bazı fonksiyonlara nesne gerekmez.
Sadece o class’a aittir.

Örnek:

class Matematik {
  static kare(x) {
    return x * x;
  }
}

console.log(Matematik.kare(8));

Bunu bir nesne üzerinden çağıramazsın!
Sadece class’tan çağrılır.

Ne işe yarar?

  • Yardımcı fonksiyonlar yazmak
  • Ara değer hesaplamak
  • Formatlamak

💛 8) Private Field (#): Saklı gizli özel alan

Bazı verilerin kimse tarafından kurcalanmasını istemezsin.

ES2022 ile gelen #özellik sayesinde:

  • Class dışından erişilemez
  • Güvenlidir
  • Çaktırmadan veri saklayabilirsin 😏

Örnek:

class Banka {
  #bakiye = 1000;

  bakiyeGoster() {
    console.log(`Bakiye: ${this.#bakiye}₺`);
  }
}

const hesap = new Banka();
hesap.bakiyeGoster(); 

Ama dışarıdan:
hesap.#bakiye → ❌ hata!


💛 9) Büyük, Gerçekçi Mini Proje: RPG Karakter Sistemi

Biraz profesyonel bir yapı kuralım:

class Karakter {
  constructor(isim, guc, can) {
    this.isim = isim;
    this.guc = guc;
    this.can = can;
  }

  vur() {
    console.log(`${this.isim}, ${this.guc} güçle saldırdı 💥`);
  }

  durum() {
    console.log(`${this.isim} | Güç: ${this.guc} | Can: ${this.can}`);
  }
}

class Büyücü extends Karakter {
  constructor(isim, guc, can, mana) {
    super(isim, guc, can);
    this.mana = mana;
  }

  buyuYap() {
    console.log(`${this.isim}, büyü yaptı! ✨ Mana: ${this.mana}`);
  }
}

class Savasci extends Karakter {
  constructor(isim, guc, can, zırh) {
    super(isim, guc, can);
    this.zırh = zırh;
  }

  savun() {
    console.log(`${this.isim}, ${this.zırh} zırhla savunma yaptı 🛡️`);
  }
}

const merlin = new Büyücü("Merlin", 50, 80, 120);
const thor = new Savasci("Thor", 80, 200, 50);

merlin.buyuYap();
thor.savun();
merlin.vur();
thor.durum();

Bu yapı artık mini bir oyunun omurgası olabilir.


💛 10) Profesyonel İpuçları (Gerçek dünyada çok işe yarar)

🔥 1. Class’ları küçük tut

Her class tek sorumluluklu olsun.

🔥 2. private field (#) kullan

Özellikle bankacılık, kullanıcı kontrolü, token saklama durumlarında.

🔥 3. static method’ları yardımcı fonksiyonlar için ayır

Kodunu çok temiz yapar.

🔥 4. Inheritance aşırı kullanma

Gerekirse Composition kullan.

🔥 5. Class içerisinde arrow function kullanma

this bağlamı karışır.


💛 Sonuç: Artık JS Class ustasısın!

Sen artık:

  • modern JavaScript class’larını bilen
  • inheritance kullanan
  • getter-setter yazabilen
  • private field kullanabilen
  • profesyonel örnek kurabilen

elit bir JavaScript büyücüsüsün 🧙‍♀️✨

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir