0Pricing
TypeScript Academy · درس

أنواع Option وMaybe

نمذجوا وجود القيمة أو غيابها صراحةً

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

نمذجة الغياب

قد تكون القيمة غائبة ببساطة أحياناً، من دون وجود خطأ للإبلاغ عنه. ويمثّل Option، الذي يُسمّى أيضاً Maybe، الحضور أو الغياب صراحةً، بوصفه بديلاً عن null وundefined.

تعريف Option

إن Option اتحاد مميّز يحتوي على وسم some. عندما تكون قيمة some صحيحة، توجد قيمة؛ وعندما تكون خاطئة، لا توجد أي قيمة.

type Option<T> =
  | { some: true; value: T }
  | { some: false };

دوال الإنشاء

تجعل الدالتان المساعدتان some وnone إنشاء قيم Option سهلاً، على غرار ok/err في Result.

const some = <T>(value: T): Option<T> => ({ some: true, value });
const none: Option<never> = { some: false };

إرجاع Option

تُعيد عملية البحث التي قد لا تجد شيئاً قيمة Option بدلاً من T | undefined. وتكون قابلية الغياب مقصودةً بوضوح في النوع.

function find<T>(arr: T[], pred: (x: T) => boolean): Option<T> {
  const hit = arr.find(pred);
  return hit === undefined ? none : some(hit);
}

تضييق النوع باستخدام some

تحقّق من opt.some للوصول إلى القيمة بأمان. ولا يسمح المترجم بقراءة value إلا داخل فرع الحضور.

const r = find([1, 2, 3], n => n > 1);
if (r.some) console.log(r.value); // 2
else console.log("not found");

لماذا لا نستخدم null فقط؟

من السهل نسيان null وundefined، كما أنهما يندمجان مع الأنواع الأخرى. أما Option الصريح فيفرض معالجة حالة الغياب، ويُظهر أنها مقصودة.

Option مقابل T | undefined

يمكن لكليهما نمذجة الغياب، لكن Option بنية مقصودة ومسمّاة يمكنك إرفاق دوال مساعدة بها، مثل map وgetOrElse، مما يشجّع على معالجة متسقة في جميع أجزاء قاعدة الشفرة.

// undefined is implicit and easy to ignore;
// Option is explicit and self-documenting.

دالة getOrElse المساعدة

لتحويل Option إلى قيمة ملموسة، وفّر قيمة بديلة لحالة الغياب. وبذلك تبقى معالجة الغياب في موضع واضح واحد.

function getOrElse<T>(o: Option<T>, fallback: T): T {
  return o.some ? o.value : fallback;
}
console.log(getOrElse(none, 0)); // 0

تطبيق map على Option

تحوّل map القيمة الداخلية عندما تكون موجودة فقط، وتُبقي الغياب كما هو. ويتيح لك ذلك تسلسل التحويلات دون تكرار عمليات التحقق.

function mapOpt<T, U>(o: Option<T>, f: (t: T) => U): Option<U> {
  return o.some ? some(f(o.value)) : none;
}
console.log(mapOpt(some(5), n => n * 2)); // { some: true, value: 10 }

Option مقابل Result

استخدم Option عندما لا يحمل الغياب سبباً، كما في عدم العثور على نتيجة في عملية بحث. واستخدم Result عندما يكون للفشل خطأ يفسّره. اختر بناءً على حاجتك إلى توضيح السبب.

تركيب قيم Option

لأن Option يحتوي على map وgetOrElse، تبقى سلاسل الخطوات الاختيارية سهلة القراءة، إذ يوقف الغياب السلسلة تلقائياً.

const out = getOrElse(mapOpt(find([1,2], n => n > 1), n => n + 100), -1);
console.log(out); // 102

مراجعة سريعة

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

مراجعة

إن Option<T> إما { some: true; value } أو { some: false }، وهو ينمذج الغياب صراحةً بدلاً من null. أنشئه باستخدام some/none، وضيّق النوع على some، واستخدم دوالاً مساعدة مثل getOrElse وmap. فضّل Option عندما لا يحتاج الغياب إلى سبب، وResult عندما يحتاج الفشل إلى سبب.

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

هل درس «أنواع Option وMaybe» مجاني؟

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

ماذا ستتعلم في «أنواع Option وMaybe»؟

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

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

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

كم من الوقت يستغرق درس «أنواع Option وMaybe»؟

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

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

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

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

  1. مشكلة طرح الأخطاء
  2. نمذجة أنواع Result
  3. أنواع Option وMaybe
  4. البرمجة الموجّهة بالمسار
← العودة إلى TypeScript Academy