87- دروس جافا سكربت – الكلاسات او الفئات – JS Class Intro

مقدمة إلى الكلاسات في جافاسكربت

تعتبر الكلاسات في جافاسكربت مفهومًا هامًا يسهم في تنظيم الكود وتحسين قابلية إعادة الاستخدام. على الرغم من أن جافاسكربت كانت تُعتبر لغة برمجة وظيفية في الأساس، إلا أن إدخال الكلاسات في ECMAScript 6 (ES6) جعلها تدعم البرمجة الكائنية بشكل أكثر سلاسة. في هذا المقال، سنستعرض مفهوم الكلاسات في جافاسكربت بشكل مفصل ونتناول أمثلة متعددة لتوضيح كيفية استخدامها.

### ما هي الكلاسات؟

الكلاسات هي قوالب لإنشاء الكائنات (Objects). توفر الكلاسات وسيلة لتعريف أنواع البيانات مع وظائفها (Methods) التي يمكن استخدامها لإنشاء كائنات جديدة. هذا يسهل تنظيم الكود وجعله أكثر نمطية. الكلاسات في جافاسكربت ليست سوى “سكر برمجي” (syntactic sugar) حول النموذج القائم على البروتوتايب، مما يجعل كتابة الكود الكائني الطابع أكثر وضوحًا وسهولة.

### إنشاء كلاس في جافاسكربت

لإنشاء كلاس في جافاسكربت، نستخدم الكلمة المفتاحية `class` متبوعة باسم الكلاس. يتضمن الكلاس عادة دالة constructor لتعيين قيم الخصائص عند إنشاء الكائنات. لنلقِ نظرة على مثال بسيط:

class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }

    greet() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    }
}

const person1 = new Person('Alice', 30);
person1.greet();  // Output: Hello, my name is Alice and I am 30 years old.

في هذا المثال، قمنا بتعريف كلاس جديد يسمى `Person` يحتوي على دالة constructor لتعيين الاسم والعمر، ودالة greet لطباعة رسالة ترحيب.

### الوراثة في الكلاسات

الوراثة هي أحد المفاهيم الأساسية في البرمجة الكائنية، وتسمح لك بإعادة استخدام الكود بين الكلاسات. يمكنك إنشاء كلاس يرث من كلاس آخر باستخدام الكلمة المفتاحية `extends`. إليك مثال:

class Employee extends Person {
    constructor(name, age, jobTitle) {
        super(name, age);
        this.jobTitle = jobTitle;
    }

    describeJob() {
        console.log(`I am a ${this.jobTitle}.`);
    }
}

const employee1 = new Employee('Bob', 25, 'Developer');
employee1.greet();  // Output: Hello, my name is Bob and I am 25 years old.
employee1.describeJob();  // Output: I am a Developer.

في هذا المثال، قمنا بإنشاء كلاس `Employee` الذي يرث من `Person`. يستخدم الكلاس Employee دالة `super` لاستدعاء دالة constructor الخاصة بالكلاس الأب.

### الخصائص والوظائف الساكنة

يمكنك أيضًا تعريف خصائص ووظائف ساكنة (Static) في الكلاسات، وهي ترتبط بالكلاس نفسه وليس بأي كائن محدد. يتم تعريفها باستخدام الكلمة المفتاحية `static`.

class MathUtils {
    static add(a, b) {
        return a + b;
    }
}

console.log(MathUtils.add(5, 3));  // Output: 8

في هذا المثال، `add` هي وظيفة ساكنة [شركة برمجة مصرية] يمكن استدعاؤها مباشرة عبر الكلاس دون الحاجة لإنشاء كائن.

### الخصائص الخاصة

بدءًا من ECMAScript 2022، يمكنك تعريف خصائص خاصة [شركة برمجة مصرية] في الكلاسات باستخدام علامة المربع `#`. هذه الخصائص لا يمكن الوصول إليها إلا من داخل الكلاس نفسه.

class BankAccount {
    #balance = 0;

    deposit(amount) {
        this.#balance += amount;
        console.log(`Deposited: ${amount}`);
    }

    getBalance() {
        return this.#balance;
    }
}

const account = new BankAccount();
account.deposit(100);
console.log(account.getBalance());  // Output: 100

في هذا المثال، `#balance` هي خاصية خاصة لا يمكن الوصول إليها إلا من داخل كلاس `BankAccount`.

### خاتمة

تقدم الكلاسات في جافاسكربت طريقة قوية ومرنة لتنظيم الكود وتحسين قابلية إعادة استخدامه. من خلال فهم كيفية إنشاء الكلاسات واستخدام الوراثة والخصائص الساكنة والخاصة، يمكنك كتابة كود أكثر تنظيمًا وكفاءة. نأمل أن يكون هذا الشرح قد قدم لك فهمًا واضحًا لكيفية استخدام الكلاسات في جافاسكربت وكيفية الاستفادة منها في مشاريعك البرمجية.