Classes
Classes
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 أبسط وأكثر شيوعاً في قواعد الكود الحالية.
مثال عملي
الدالة increment تغير الحالة، وcurrent تقرأها. الأسماء تجعل السلوك واضحاً.
class أم function؟
إذا كان السلوك لا يحتاج حالة داخلية، دالة كافية. إذا احتجت lifecycle أو state خاصاً، class قد تكون مناسبة.