𝗙𝗮𝗰𝘁𝗼𝗿𝘆 𝗙𝘂𝗻𝗰𝘁𝗶𝗼𝗻𝘀 𝗮𝗻𝗱 𝗖𝗼𝗻𝘀𝘁𝗿𝘂𝗰𝘁𝗼𝗿 𝗙𝘂𝗻𝗰𝘁𝗶𝗼𝗻𝘀 𝗶𝗻 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁
Nesneleri tek tek oluşturmak bir hatadır.
Her kullanıcı veya sınıf arkadaşı için manuel bir nesne yazarsanız, kodu tekrar etmiş olursunuz. Eğer 100 kullanıcınız varsa, aynı mantığı 100 kez yazarsınız. Bu da hatalara (bug) yol açar. Daha sonra yanlışlıkla bir özelliği değiştirip uygulamanızı bozabilirsiniz.
Temiz kod yazmak için bunun yerine şu iki deseni (pattern) kullanın.
- Factory Function'lar
Gerçek bir fabrika düşünün. Hammaddeler girer, bitmiş bir ürün çıkar.
Bir factory function parametreler alır ve yeni bir nesne döndürür.
Örnek:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
Avantajları:
- Mantığı bir kez yazarsınız.
- Fonksiyonu her yeni nesne için yeniden kullanırsınız.
- Veriler güvende kalır. İsim, fonksiyon kapsamı (scope) içinde kalır. Dışarıdan yanlışlıkla üzerine yazamazsınız.
- Constructor Function'lar
Constructor function'lar da nesne oluşturur. "new" anahtar kelimesini ve "this" anahtar kelimesini kullanırlar. Geleneksel olarak (convention), bunlar büyük harfle başlatılır.
Örnek:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
"new" kullandığınızda, JavaScript işi sizin yerinize yapar:
- Yeni bir nesne oluşturur.
- Onu "this" ifadesine atar.
- Nesneyi otomatik olarak döndürür.
Bir "return" ifadesine ihtiyacınız yoktur.
Kodunuzu ölçeklendirmek
Büyük miktarda veriyi işlemek için bu desenleri dizilerle (arrays) birleştirebilirsiniz. Her ismi tek tek yazmak yerine bir map fonksiyonu kullanın.
Örnek:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
Artık kullanıma hazır bir nesne listeniz var.
Özet:
- Tekrardan kaçınmak için manuel nesne oluşturmaktan kaçının.
- Mantığı kapsüllemek (encapsulate) ve verileri korumak için Factory Function'ları kullanın.
- Otomatik nesne oluşturma için "new" anahtar kelimesinden yararlanmak üzere Constructor Function'ları kullanın.
- Mantığınızı her zaman bir kez yazın ve her yerde yeniden kullanın.
Kaynak: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb