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,
class
lar 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,
class
lar 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.