0Pricing
TypeScript Academy · درس

السلسلة الاختيارية باستخدام ?.

يمكنوا من الوصول بأمان إلى الخصائص المتداخلة بعمق التي قد تكون null

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

معامل السلسلة الاختيارية

تتيح لكم السلسلة الاختيارية (?.) الوصول بأمان إلى خاصية قد تكون موجودة في قيمة null أو undefined. وإذا كانت القيمة منعدمة، تُوقَف العملية بالكامل وتُرجع undefined بدلًا من إلقاء استثناء.

type User = { profile?: { bio?: string } };
const u: User = {};
const bio = u.profile?.bio;
console.log(bio); // undefined, no crash

الإيقاف المبكر عند القيم المنعدمة

عندما يكون المعامل السابق لـ ?. هو null أو undefined، يتوقف التقييم فورًا ويُرجع undefined. ولا تُنفذ بقية السلسلة مطلقًا.

const data: { value?: number } | null = null;
console.log(data?.value); // undefined, did not throw

تسلسل مستويات متعددة

يمكنكم وضع ?. عند كل خطوة غير مؤكدة من عملية وصول متعمقة. فأي رابط منعدم يوقف السلسلة بأكملها، ويحميكم من أخطاء «تعذّرت قراءة خاصية من undefined».

type Company = { ceo?: { contact?: { email?: string } } };
const c: Company = { ceo: {} };
console.log(c.ceo?.contact?.email); // undefined

يتضمن نوع النتيجة undefined

بما أن السلسلة قد تُرجع undefined، يضيف TypeScript القيمة undefined إلى نوع النتيجة. فإذا كان نوع الخاصية هو string، أصبحت نتيجة السلسلة string | undefined.

type Settings = { theme?: { name: string } };
const s: Settings = { theme: { name: 'dark' } };
const name = s.theme?.name; // type: string | undefined
console.log(name);

التعامل مع نتيجة undefined

بما أن النتيجة قد تكون undefined، فعادةً ما تتحققون منها أو توفرون قيمة بديلة. ويذكّركم نظام الأنواع بالتعامل مع حالة غياب القيمة.

type Settings = { theme?: { name: string } };
const s: Settings = {};
const name = s.theme?.name;
if (name === undefined) console.log('using default');
else console.log(name);

مقارنة بسلاسل &&

قبل ظهور ?.، كان المطورون يكتبون سلاسل طويلة من &&: a && a.b && a.b.c. وتعبّر السلسلة الاختيارية عن القصد نفسه بإيجاز أكبر بكثير، كما تُقرأ من الأعلى إلى الأسفل.

type A = { b?: { c?: number } };
const a: A = { b: { c: 5 } };
const oldWay = a && a.b && a.b.c;
const newWay = a?.b?.c;
console.log(oldWay, newWay);

لماذا تُعد ?. أفضل من &&

يتعامل أسلوب && مع أي قيمة زائفة (0 و'' وfalse) على أنها نقطة توقف، وقد يسبب ذلك خطأً. أما السلسلة الاختيارية فتتوقف فقط عند null أو undefined، وهو ما تريدونه عادةً.

type Box = { count?: number };
const b: Box = { count: 0 };
console.log(b && b.count); // 0... but && stops on falsy in longer chains
console.log(b?.count); // 0, cleanly

السلسلة الاختيارية مع مصفوفات الكائنات

تعمل السلسلة الاختيارية مع أي وصول إلى خاصية. وبدمجها مع الوصول إلى العناصر، يمكنكم الوصول بأمان إلى مصفوفات متداخلة من الكائنات.

type Team = { members?: Array<{ name: string }> };
const t: Team = { members: [{ name: 'Ada' }] };
console.log(t.members?.[0]?.name);

يوقف الإيقاف المبكر التعبير بالكامل

بمجرد إيقاف السلسلة مبكرًا، يتم تجاوز حتى عمليات الوصول إلى الخصائص المكتوبة بعدها (من دون ?.). ويُقيَّم التعبير بأكمله على أنه undefined دفعة واحدة.

type Deep = { a?: { b: { c: number } } };
const d: Deep = {};
// a is undefined, so b.c is never evaluated
console.log(d.a?.b.c); // undefined

السلسلة الاختيارية مع قيم الدوال المُرجعة

يمكنكم متابعة السلسلة انطلاقًا من نتيجة استدعاء دالة. فإذا أعادت الدالة قيمة منعدمة، فسيُوقَف الوصول التالي بأمان.

function findUser(): { name: string } | null {
  return null;
}
console.log(findUser()?.name); // undefined

مثال عملي على الإعدادات

تتألق السلسلة الاختيارية عند قراءة إعدادات جزئية أو استجابات API قد تفتقد إلى حقول متداخلة. فهي تحافظ على سهولة قراءة الوصول وتمنع الانهيارات.

type Response = { user?: { address?: { city?: string } } };
const res: Response = { user: { address: {} } };
console.log(res.user?.address?.city ?? 'unknown city');

اختبار سريع

اختبروا مدى فهمكم للسلسلة الاختيارية.

مراجعة: السلسلة الاختيارية

لقد تعلمتم أن ?.:

  • تصل بأمان إلى الخصائص في القيم التي قد تكون null/undefined.
  • توقف التعبير بالكامل وتجعله undefined عند وجود رابط منعدم.
  • تضيف undefined إلى نوع النتيجة.
  • تحسّن سلاسل && من خلال التوقف عند القيم المنعدمة فقط، لا عند جميع القيم الزائفة.

بعد ذلك، سنتناول معامل دمج القيم المنعدمة.

type Cfg = { db?: { host?: string } };
const c: Cfg = {};
console.log(c.db?.host);

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

هل درس «السلسلة الاختيارية باستخدام ?.» مجاني؟

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

ماذا ستتعلم في «السلسلة الاختيارية باستخدام ?.»؟

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

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

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

كم من الوقت يستغرق درس «السلسلة الاختيارية باستخدام ?.»؟

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

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

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

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

  1. السلسلة الاختيارية باستخدام ?.
  2. الدمج مع nullish باستخدام ??
  3. دمج ?. و??
  4. الاستدعاءات الاختيارية والوصول إلى العناصر
← العودة إلى TypeScript Academy