জাভাস্ক্রিপ্টে Factory Functions এবং Constructor Functions

একটি একটি করে অবজেক্ট তৈরি করা একটি ভুল।

আপনার যদি ১০০ জন সহপাঠী থাকে এবং প্রত্যেকের জন্য একটি করে অবজেক্ট তৈরি করার প্রয়োজন হয়, তবে আলাদা আলাদা ভাবে অবজেক্ট লিখলে সমস্যা তৈরি হবে। এতে আপনাকে একই লজিক বারবার লিখতে হবে। এছাড়া এতে বাগ (bug) হওয়ার ঝুঁকিও থাকে। উদাহরণস্বরূপ, আপনি হয়তো পরে কোডের অন্য কোথাও ভুলবশত কোনো প্রপার্টির নাম ওভাররাইট করে ফেলতে পারেন।

লজিক পুনরায় ব্যবহার করার জন্য আপনার একটি উন্নত পদ্ধতির প্রয়োজন।

Factory Functions একটি কারখানার কথা ভাবুন। আপনি সেখানে কাঁচামাল দেন এবং একটি তৈরি পণ্য পান। একটি factory function ঠিক একইভাবে কাজ করে। এটি প্যারামিটার গ্রহণ করে এবং একটি নতুন অবজেক্ট রিটার্ন করে।

Example:

function classFactory(name) {
    return {
        reply() {
            return `${name} is present`
        }
    }
}

এই পদ্ধতিটি নামটিকে সুরক্ষিত রাখে। আপনি ভুলবশত নাম পরিবর্তন করতে পারবেন না কারণ এটি ফাংশন স্কোপের (function scope) ভেতরে থাকে। আপনি একবার লজিক লিখবেন এবং এটি বারবার ব্যবহার করতে পারবেন।

Constructor Functions Constructor functions-ও অবজেক্ট তৈরি করে। এগুলো this এবং new কিওয়ার্ড ব্যবহার করে। প্রচলিত নিয়ম অনুযায়ী, এই ফাংশনগুলোর নাম বড় হাতের অক্ষর (capital letter) দিয়ে শুরু হয়।

Example:

function Classmate(name) {
    this.name = name
    this.reply = function() {
        return `${this.name} is present`
    }
}

যখন আপনি new কিওয়ার্ড ব্যবহার করেন, জাভাস্ক্রিপ্ট আপনার হয়ে কাজটি করে দেয়। এটি একটি নতুন অবজেক্ট তৈরি করে, সেটিকে this-এর সাথে অ্যাসাইন করে এবং স্বয়ংক্রিয়ভাবে রিটার্ন করে। আপনার আলাদা করে return স্টেটমেন্ট লেখার প্রয়োজন নেই।

Scaling your code প্রচুর পরিমাণে ডেটা হ্যান্ডেল করার জন্য আপনি এই পদ্ধতিগুলোকে অ্যারের (array) সাথে যুক্ত করতে পারেন।

const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))

classmates.forEach(c => console.log(c.reply()))

এটি আপনার কোডকে পরিচ্ছন্ন এবং স্কেলেবল (scalable) করে তোলে।

মূল লক্ষ্যটি সহজ:

Source: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb