كيفية استخدام فئات TypeScript مع أمثلة بسيطة

يضيف TypeScript ميزات قوية إلى JavaScript، بما في ذلك مفهوم الفئات، الذي يسمح بالبرمجة الموجهة للكائنات. توفر الفئات مخططًا لإنشاء الكائنات وتغليف البيانات وتحديد السلوكيات. سيرشدك هذا الدليل خلال أساسيات فئات TypeScript بأمثلة بسيطة.

ما هو الفصل؟

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

تعريف الفئة الأساسية

لتحديد فئة في TypeScript، استخدم الكلمة الأساسية class متبوعة باسم الفئة ومجموعة من الأقواس المتعرجة التي تحتوي على الخصائص والطرق.

مثال للفئة الأساسية

فيما يلي مثال لفئة Person بسيطة تحتوي على خصائص وطريقة:

class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): void {
    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 على خاصيتين: name وage. تقوم طريقة المنشئ بتهيئة هذه الخاصيتين، وتقوم طريقة greet بإخراج رسالة تحية.

تعديلات الوصول

يوفر TypeScript ثلاثة معدِّلات وصول للتحكم في رؤية أعضاء الفصل:

  • public: يمكن الوصول إلى الأعضاء من أي مكان (افتراضي).
  • private: يمكن الوصول إلى الأعضاء داخل الفصل فقط.
  • protected: يمكن الوصول إلى الأعضاء داخل الفصل وفئاته الفرعية.

استخدام مُعدِّلات الوصول

إليك كيفية استخدام معدِّلات الوصول في فئة TypeScript:

class Animal {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getAge(): number {
    return this.age;
  }
}

const dog = new Animal("Buddy", 5);
console.log(dog.name); // Output: Buddy
console.log(dog.getAge()); // Output: 5
// console.log(dog.age); // Error: 'age' is private and only accessible within class 'Animal'.

في هذا المثال، name هي خاصية عامة، يمكن الوصول إليها من خارج الفصل، بينما age هي خاصية خاصة، يمكن الوصول إليها فقط داخل الفصل.

الميراث في TypeScript

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

مثال على الميراث

فيما يلي مثال لفئة Dog ترث من فئة أساسية Animal:

class Animal {
  constructor(public name: string) {}

  makeSound(): void {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // Call the constructor of the base class
  }

  makeSound(): void {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Output: Buddy barks.

في هذا المثال، تمتد فئة Dog إلى فئة Animal وتتجاوز طريقة makeSound.

المحصلات والمحددات

يتيح لك TypeScript تعريف معاملات الحصول والتعيين للخصائص، مما يوفر وصولاً خاضعًا للرقابة إلى أعضاء الفصل.

أمثلة على المحصلات والمحددات

class Person {
  private _name: string;

  constructor(name: string) {
    this._name = name;
  }

  get name(): string {
    return this._name;
  }

  set name(newName: string) {
    if (newName) {
      this._name = newName;
    } else {
      console.log("Name cannot be empty.");
    }
  }
}

const person = new Person("Alice");
console.log(person.name); // Output: Alice
person.name = "Bob";
console.log(person.name); // Output: Bob

في هذا المثال، يتم الوصول إلى الخاصية name وتعديلها باستخدام طريقتي getter وsetter.

خاتمة

تُعد فئات TypeScript طريقة فعّالة لكتابة أكواد موجهة للكائنات بطريقة نظيفة وفعّالة. فهي توفر طريقة منظمة لتحديد الخصائص والأساليب ومعدلات الوصول والوراثة والمزيد. من خلال فهم كيفية استخدام فئات TypeScript، يمكنك كتابة أكواد أكثر قوة وقابلية للصيانة لتطبيقاتك.