0Pricing
TypeScript Academy · درس

المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير

استخدم ReadonlyArray لمنع التعديلات غير المقصودة

المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مرحبًا

يمكن تعديل المصفوفات القابلة للتغيير عن طريق الخطأ من أي مكان في التعليمات البرمجية. ويساعدك كل من ReadonlyArray والمعدِّل readonly في TypeScript على فرض عدم قابلية التغيير.

المعدِّل readonly على المصفوفات

أضف المعدِّل `readonly` قبل نوع المصفوفة لمنع تعديلها. ويمكن قراءة المصفوفة، لكن لا يمكن تغييرها.
const ids: readonly number[] = [1, 2, 3];
// ids.push(4);   // Error
// ids[0] = 99;   // Error
console.log(ids[0]); // OK — reading is fine

الصيغة العامة ReadonlyArray<T>

تُعد `ReadonlyArray` المكافئ العام للصيغة `readonly T[]`. وتمنع الصيغتان استخدام push وpop وsplice وإسناد القيم إلى الفهارس.
const names: ReadonlyArray<string> = ['Alice', 'Bob'];
// names.push('Charlie'); // Error

إرجاع مصفوفات للقراءة فقط من الدوال

أعد مصفوفات للقراءة فقط من الدوال لإبلاغ المستدعين بأن النتيجة يجب ألا تُعدّل.
function getConfig(): readonly string[] {
  return ['host', 'port', 'db'];
}

معلمات الدوال غير القابلة للتغيير

حدّد معلمات المصفوفات على أنها readonly لمنع الدالة من تعديل مصفوفة المستدعي.
function sum(nums: readonly number[]): number {
  return nums.reduce((a, b) => a + b, 0);
  // nums.push(99); // Error inside function
}

استخدام as const للمصفوفات الحرفية

يجعل تأكيد `as const` المصفوفة للقراءة فقط، ويستنتج نوع tuple بأنواع عناصر حرفية بدلًا من الأنواع الموسعة.
const colors = ['red', 'green', 'blue'] as const;
// type: readonly ['red', 'green', 'blue']
// colors.push('yellow'); // Error

لا يجمّد readonly المصفوفة بعمق

يمنع readonly تعديل مرجع المصفوفة فقط. فإذا كانت العناصر كائنات، فلا يزال من الممكن تغيير خصائصها.
const users: readonly { name: string }[] = [{ name: 'Alice' }];
// users.push({}); // Error
users[0].name = 'Bob'; // Allowed — object itself is mutable

عدم القابلية العميقة للتغيير باستخدام Readonly<T>

لتحقيق عدم القابلية العميقة للتغيير في الكائنات، ادمج ReadonlyArray مع Readonly على العناصر. أو استخدم مكتبة مثل immer.
type ImmutableUser = Readonly<{ name: string; scores: readonly number[] }>;
const u: ImmutableUser = { name: 'Alice', scores: [90, 85] };
// u.name = 'Bob';       // Error
// u.scores.push(100);  // Error

الإسناد بين المصفوفات القابلة للتغيير والمصفوفات للقراءة فقط

لا يمكن إسناد مصفوفة للقراءة فقط إلى نوع مصفوفة قابلة للتغيير. ويحميك ذلك من تمرير مصفوفة غير قابلة للتغيير عن طريق الخطأ في موضع يُتوقع فيه التعديل.
const ro: readonly number[] = [1, 2];
const mutable: number[] = ro; // Error!

متى تستخدم المصفوفات للقراءة فقط

استخدم المصفوفات للقراءة فقط مع كائنات الإعدادات، والثوابت، ومعلمات الدوال التي تتعهد بعدم تعديلها، والقيم المعادة من الدوال النقية.

ينشئ النشر مصفوفة جديدة قابلة للتغيير

يؤدي نشر مصفوفة للقراءة فقط في مصفوفة حرفية جديدة إلى إنشاء نسخة قابلة للتغيير. وهذا نمط واضح لإجراء التغييرات من دون تعديل المصفوفة الأصلية.
const base: readonly number[] = [1, 2, 3];
const extended: number[] = [...base, 4]; // new mutable array

تحقق سريع

ما العملية غير المسموح بها على `readonly number[]` في TypeScript؟

مراجعة

استخدم `readonly T[]` أو `ReadonlyArray` لمنع تعديل المصفوفات. واستخدم `as const` للمصفوفات الثابتة الحرفية. وينشئ النشر نسخة قابلة للتغيير عندما تحتاج إلى توسيع مصفوفة للقراءة فقط.

الأسئلة الشائعة

هل درس «المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير» مجاني؟

نعم — نص درس «المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير»؟

استخدم ReadonlyArray لمنع التعديلات غير المقصودة تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المصفوفات ذات الأنواع: T[] وArray
  2. المصفوفات للقراءة فقط والبيانات غير القابلة للتغيير
  3. Tuples: مصفوفات ذات أنواع وطول ثابت
  4. التعدادات: الثوابت الرقمية والنصية
← العودة إلى TypeScript Academy