AzLearn

Classes

Classes

مفهوم ~18 دقيقة

Classes

TypeScript تدعم classes مثل JavaScript، وتضيف أنواعاً للخصائص والمعاملات. استخدم class عندما يكون لديك كيان يجمع حالة وسلوكاً بوضوح. لا تستخدمها لمجرد أن اللغة تسمح بذلك. أحياناً type مع دوال منفصلة أبسط وأوضح.

الـ constructor يستقبل القيم الأولية. يمكنك كتابة public, private, وreadonly لتحديد الوصول. لكن لا تعتمد على private وحدها كأمان runtime مطلق؛ فكر فيها كحد تصميم داخل TypeScript.

private مقابل #private

private في TypeScript هو حد وقت compiler فقط. بعد التحويل إلى JavaScript، الخاصية تبقى قابلة للوصول من خارج الكائن. أما #name (Private Fields بمعيار ECMAScript) فهو حد حقيقي في runtime:

class BankAccount {
  #balanceHalalas = 0; // مخفي فعلياً في JS runtime

  deposit(amount: number): void {
    this.#balanceHalalas += amount;
  }

  balance(): number {
    return this.#balanceHalalas;
  }
}

const acc = new BankAccount();
// acc.#balanceHalalas; // خطأ في TypeScript وفي JavaScript runtime

استخدم #private في الكلاسات التي تتعامل مع بيانات حساسة أو عندما تريد ضماناً حقيقياً لا مجرد اتفاق. private الـ TypeScript أبسط وأكثر شيوعاً في قواعد الكود الحالية.

مثال عملي

index.ts

الدالة increment تغير الحالة، وcurrent تقرأها. الأسماء تجعل السلوك واضحاً.

class أم function؟

إذا كان السلوك لا يحتاج حالة داخلية، دالة كافية. إذا احتجت lifecycle أو state خاصاً، class قد تكون مناسبة.

تحدي — Challenge