JavaScript Sınıfları (Classes) Kullanım Rehberi
JavaScript, ES6 (ECMAScript 2015) ile birlikte nesne yönelimli programlama (OOP) ilkelerini daha net ve tanıdık bir sözdizimi ile uygulamak için sınıfları (classes) tanıttı. Sınıflar, prototip tabanlı kalıtım üzerine inşa edilmiş sentaktik bir şeker (syntactic sugar) olup, nesne oluşturmak ve kalıtımı yönetmek için daha anlaşılır bir yapı sunar. Bu makale, JavaScript sınıflarının temel kullanımını, sözdizimini ve pratik uygulamalarını detaylı bir şekilde ele alacaktır.
Temel Sözdizimi
class SınıfAdı {
  constructor(parametre1, parametre2) {
    this.özellik1 = parametre1;
    this.özellik2 = parametre2;
  }
  metotAdı(argüman) {
    // Metot içeriği
    return this.özellik1 + argüman;
  }
  get getterAdı() {
    return this.özellik1;
  }
  set setterAdı(yeniDeğer) {
    this.özellik1 = yeniDeğer;
  }
  static statikMetot() {
    return "Bu bir statik metottur.";
  }
}
Detaylı Açıklama
JavaScript sınıfları, bir nesnenin nasıl oluşturulacağını tanımlayan bir şablon görevi görür. Temel bileşenleri şunlardır:
classAnahtar Kelimesi: Bir sınıf tanımlamak için kullanılır. Sınıf adı genellikle büyük harfle başlar (PascalCase).constructor()Metodu: Bir sınıfın özel bir metodudur. Sınıftan yeni bir nesne (instance) oluşturulduğunda otomatik olarak çağrılır. Nesnenin başlangıç durumunu (özelliklerini) ayarlamak için kullanılır. Eğer bir sınıf için açıkça birconstructortanımlanmazsa, JavaScript varsayılan, boş birconstructorekler.Özellikler (Properties): Sınıf örneklerinin sahip olduğu verilerdir.
constructoriçindethis.özellikAdı = değer;şeklinde tanımlanır ve her örnek için benzersiz olabilir.Metotlar (Methods): Sınıf örneklerinin gerçekleştirebileceği eylemleri tanımlayan fonksiyonlardır.
metotAdı(argümanlar) { ... }şeklinde tanımlanır ve sınıfın prototipine eklenir.Getter ve Setter Metotları: Özelliklerin değerlerine kontrollü erişim sağlamak için kullanılırlar. Bir özelliğin değerini okumak için
get, değiştirmek içinsetanahtar kelimeleriyle tanımlanırlar. Bunlar aslında birer fonksiyon olmasına rağmen, özellik gibi erişilirler.Statik Metotlar (Static Methods): Bir sınıfın kendisine ait olan, ancak sınıfın örneklerine ait olmayan metotlardır. Bu metotlar, sınıfın adıyla doğrudan çağrılır ve genellikle sınıfın örneklerine özgü olmayan yardımcı fonksiyonlar veya fabrika metotları için kullanılır.
staticanahtar kelimesiyle tanımlanır.
Pratik Kullanım Örnekleri
Örnek 1: Temel Sınıf Tanımlama ve Kullanımı
Aşağıdaki örnek, bir Kişi sınıfının nasıl tanımlandığını ve bu sınıftan nasıl nesneler oluşturulduğunu göstermektedir. Ayrıca sınıfın metotlarının nasıl çağrıldığını da içerir.
class Kişi {
  constructor(ad, soyad, yaş) {
    this.ad = ad;
    this.soyad = soyad;
    this.yaş = yaş;
  }
  tamAdGetir() {
    return `${this.ad} ${this.soyad}`;
  }
  yaşınıArtır() {
    this.yaş++;
    console.log(`${this.tamAdGetir()} şimdi ${this.yaş} yaşında.`);
  }
}
// Sınıftan yeni bir nesne oluşturma
const kişi1 = new Kişi("Ali", "Can", 30);
console.log(kişi1.tamAdGetir()); // Çıktı: Ali Can
const kişi2 = new Kişi("Ayşe", "Yılmaz", 25);
kişi2.yaşınıArtır(); // Çıktı: Ayşe Yılmaz şimdi 26 yaşında.
Örnek 2: Kalıtım (Inheritance) Kullanımı
Sınıflar, extends anahtar kelimesiyle başka bir sınıftan kalıtım alabilir. Bu, alt sınıfın üst sınıfın özelliklerini ve metotlarını miras almasını sağlar.
class Çalışan extends Kişi {
  constructor(ad, soyad, yaş, pozisyon) {
    super(ad, soyad, yaş); // Üst sınıfın constructor'ını çağırır
    this.pozisyon = pozisyon;
  }
  çalışmaDurumu() {
    return `${this.tamAdGetir()} ${this.pozisyon} pozisyonunda çalışmaktadır.`;
  }
}
const çalışan1 = new Çalışan("Deniz", "Ak", 35, "Yazılımcı");
console.log(çalışan1.tamAdGetir()); // Çıktı: Deniz Ak (Kişi sınıfından miras alındı)
console.log(çalışan1.çalışmaDurumu()); // Çıktı: Deniz Ak Yazılımcı pozisyonunda çalışmaktadır.
çalışan1.yaşınıArtır(); // Çıktı: Deniz Ak şimdi 36 yaşında. (Kişi sınıfından miras alındı)
Örnek 3: Getter, Setter ve Statik Metot Kullanımı
Bu örnek, bir sınıf içinde getter, setter ve statik metotların nasıl tanımlanıp kullanılacağını göstermektedir.
class Ayarlar {
  constructor(tema) {
    this._tema = tema; // Özel bir özellik gibi davranır
  }
  get tema() {
    return this._tema;
  }
  set tema(yeniTema) {
    if (yeniTema === "açık" || yeniTema === "koyu") {
      this._tema = yeniTema;
      console.log(`Tema ${yeniTema} olarak ayarlandı.`);
    } else {
      console.warn("Geçersiz tema değeri. 'açık' veya 'koyu' kullanın.");
    }
  }
  static uygulamaBilgisi() {
    return "Uygulama Adı: MyWebApp v1.0";
  }
}
const kullanıcıAyarları = new Ayarlar("koyu");
console.log(kullanıcıAyarları.tema); // Çıktı: koyu (getter çağrıldı)
kullanıcıAyarları.tema = "açık"; // setter çağrıldı
console.log(kullanıcıAyarları.tema); // Çıktı: açık
kullanıcıAyarları.tema = "mavi"; // Geçersiz tema uyarısı
console.log(Ayarlar.uygulamaBilgisi()); // Çıktı: Uygulama Adı: MyWebApp v1.0 (statik metot çağrıldı)
Önemli Notlar ve İpuçları
Hoisting Yok: Fonksiyon bildirimlerinin aksine, JavaScript sınıfları "hoist" edilmezler. Yani, bir sınıfı tanımlamadan önce kullanamazsınız. Önce sınıfı tanımlamalı, sonra örneğini oluşturmalısınız.
Tek Sorumluluk Prensibi: Her sınıfın tek bir sorumluluğu olmaya özen gösterin. Bu, kodunuzu daha okunabilir, sürdürülebilir ve test edilebilir hale getirir.
thisAnahtar Kelimesi: Sınıf metotları içindethisanahtar kelimesi, o metodu çağıran sınıf örneğine (instance) referans verir.this'in bağlamı (context) fonksiyonun nasıl çağrıldığına bağlı olarak değişebilir, bu nedenle özellikle callback fonksiyonlarında dikkatli olun (gerekirse arrow fonksiyonları veya.bind()kullanın).super()Kullanımı: Alt sınıflarınconstructormetodunda, üst sınıfınconstructormetodunu çağırmak içinsuper()kullanılmalıdır.super()çağrılmadan öncethisanahtar kelimesine erişilemez.Sınıflar Fonksiyondur: JavaScript sınıfları aslında özel bir tür fonksiyondur.
typeof SınıfAdıifadesi"function"döndürür. Bu, JavaScript'in prototip tabanlı doğasının bir yansımasıdır.
        
                
            
            
Yorum yap
Yorumlar