JavaScript'te Factories and Classes

JavaScript'te nesne oluşturma yöntemleri arasında factories ve classes iki yaygın yaklaşımdır. Her iki yöntem de nesne tabanlı programlama konseptine dayanmaktadır ancak farklı syntax ve özelliklere sahiptir.

Factories (Fabrikalar)

Factories, JavaScript'te nesne oluşturmak için fonksiyonları kullanma yaklaşımını ifade eder. Bu yöntemde, her bir nesne, bir fabrika fonksiyonu (factory function) tarafından döndürülür. Fabrika fonksiyonları, genellikle nesnenin özelliklerini parametre olarak alır ve bu özelliklere sahip bir nesne oluşturur.

function Car(marka, model) {
  return {
    marka: marka,
    model: model,
    drive() {
      console.log('Araba sürülüyor...');
    }
  };
}

let araba1 = Car('Toyota', 'Corolla');
araba1.drive(); // Araba sürülüyor...

Factory fonksiyonları, nesneler arasında paylaşılan özellikleri veya davranışları ortak bir prototip (prototype) gibi kullanarak da oluşturabilir. Bu şekilde nesneler arasında bellek kullanımını ve tekrarlanan kodu azaltabilir.

Classes (Sınıflar)

Classes, ECMAScript 2015 (ES6) ile JavaScript'e eklenen bir özelliktir ve geleneksel sınıf tabanlı nesne yönelimli programlama dillerinden ilham alınarak oluşturulmuştur. JavaScript'te aslında sınıf tabanlı miraslı bir dil değildir, ancak class syntax'i, sınıf yapılarına benzer bir sözdizim sağlar.

class Car {
  constructor(marka, model) {
    this.marka = marka;
    this.model = model;
  }
  
  drive() {
    console.log('Araba sürülüyor...');
  }
}

let araba2 = new Car('Honda', 'Civic');
araba2.drive(); // Araba sürülüyor...

class sözdizimi, constructor metodunu kullanarak nesnelerin başlatılmasını ve sınıfın içerisinde metotların tanımlanmasını sağlar. Miras alma, kapsülleme gibi OOP özelliklerini destekler.

Karşılaştırma

  • Factory fonksiyonları, daha esnek bir yapı sunabilir ve nesneler arasında daha az bağlantı oluşturabilirken, classlar daha yapılandırılmış ve anlaşılabilir bir kod sağlar.
  • Factory fonksiyonları prototip zinciri ve miras alma gibi karmaşık kavramlarla ilgilenmek zorunda kalmazken, classlar bu özellikleri daha açık bir şekilde ifade eder.

Her iki yöntem de nesne tabanlı programlama için farklı kullanım senaryolarına uygun olabilir, seçim genellikle geliştiricinin tercihlerine ve ihtiyaçlarına bağlıdır.