قنوات الأخطاء والتبعيات
تتبّعوا الأخطاء محددة الأنواع والتبعيات المحقونة في التأثيرات
قنوات الأخطاء والتبعيات درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
قنوات الأخطاء والتبعيات
تجعل قناتان Effect قويًا: قناة الأخطاء المحددة النوع (E) وقناة المتطلبات (R). يوضح هذا الدرس كيفية الفشل باستخدام أخطاء محددة الأنواع، وكيفية توفير التبعيات عبر Context وLayer.
الأخطاء محددة الأنواع باستخدام Effect.fail
تضع Effect.fail قيمةً في قناة الأخطاء. وتجعل الأصناف ذات الوسوم تمييز الأخطاء أمرًا سهلًا.
import { Effect } from "effect";
class NotFound { readonly _tag = "NotFound"; }
class Forbidden { readonly _tag = "Forbidden"; }
const load = Effect.fail(new NotFound());
// Effect<never, NotFound, never>تتحد الأخطاء عند التركيب
يؤدي تسلسل التأثيرات ذات الأخطاء المختلفة إلى جمعها في قناة E، ولذلك يسرد النوع كل طريقة ممكنة للفشل.
// Effect<A, NotFound, never> then Effect<B, Forbidden, never>
// => Effect<B, NotFound | Forbidden, never>معالجة الأخطاء
تتولى Effect.catchAll أو catchTag معالجة الأخطاء، فتزيلها من القناة أو تستبدلها. وتؤدي معالجة NotFound إلى تضييق E.
import { Effect, pipe } from "effect";
const safe = pipe(
Effect.fail(new NotFound()),
Effect.catchTag("NotFound", () => Effect.succeed("default"))
);
// Effect<string, never, never> -- error handledالتعافي مقابل تمرير الخطأ
إذا لم تعالج خطأً، فإنه يبقى في E وينتقل إلى المستدعي، الذي يجب عليه عندئذٍ معالجته أو تمريره مرة أخرى. يضمن المصرّف ألا تُفقد الأخطاء بصمت.
التصريح عن تبعية
يُصرَّح عن الخدمة باعتبارها Context.Tag. وتكتسب التأثيرات التي تستخدمها هذه الخدمة في قناة R الخاصة بها.
import { Context, Effect } from "effect";
class Random extends Context.Tag("Random")<
Random,
{ readonly next: Effect.Effect<number> }
>() {}
const program = Effect.gen(function* () {
const random = yield* Random;
return yield* random.next;
});
// Effect<number, never, Random>تظهر المتطلبات في النوع
لاحظ أن قناة R تحتوي الآن على Random. لا يمكن تنفيذ التأثير حتى تُستوفى تلك المتطلبات؛ إذ يفرض المصرّف ذلك.
التوفير باستخدام طبقة
تصف Layer كيفية إنشاء خدمة. ويؤدي توفير طبقة إلى استيفاء المتطلب وإزالته من R.
import { Effect, Layer } from "effect";
const RandomLive = Layer.succeed(Random, {
next: Effect.sync(() => Math.random()),
});
const runnable = Effect.provide(program, RandomLive);
// Effect<number, never, never> -- R clearedتركيب الطبقات
يمكن للطبقات أن تعتمد على طبقات أخرى وأن تندمج معها، لتبني رسمًا بيانيًا كاملًا للتبعيات. ويصل Effect بينها بالترتيب الصحيح استنادًا إلى أنواعها.
import { Layer } from "effect";
// Layer.merge(DatabaseLive, LoggerLive)
// Layer that provides both servicesالاختبار عبر تبديل الطبقات
بما أن التبعيات صريحة، توفر الاختبارات طبقة مختلفة (مثل Random حتمي) من دون تعديل البرنامج قيد الاختبار، وهذه فائدة رئيسية لتتبع المتطلبات.
import { Layer, Effect } from "effect";
const RandomTest = Layer.succeed(Random, {
next: Effect.succeed(0.5),
});
// Effect.provide(program, RandomTest) -> deterministicلماذا يهم ذلك
تحوّل قناتا الأخطاء والمتطلبات الافتراضات غير المرئية إلى عقود يفحصها المصرّف: يجب التعامل مع كل فشل أو التصريح عنه، كما يجب توفير كل تبعية. وهذا ما يجعل برامج Effect الكبيرة متينة وسهلة الاختبار.
تحقق سريع
تحقق من فهمك لقنوات الأخطاء والتبعيات.
مراجعة
تتتبع قناة الأخطاء حالات الفشل محددة الأنواع (Effect.fail، التي يضيّقها catchTag/catchAll)، وتتحد هذه الحالات عند التركيب، بينما تتتبع قناة المتطلبات الخدمات المُعلن عنها عبر Context.Tag والمُستوفاة بواسطة Layer من خلال Effect.provide. وتجعل القناتان معًا حالات الفشل والتبعيات خاضعة لفحص المصرّف، كما تسهّلان الاختبار عبر تبديل الطبقات.
تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 101
- الدروس
- 352
الأسئلة الشائعة
هل درس «قنوات الأخطاء والتبعيات» مجاني؟
نعم — نص درس «قنوات الأخطاء والتبعيات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «قنوات الأخطاء والتبعيات»؟
تتبّعوا الأخطاء محددة الأنواع والتبعيات المحقونة في التأثيرات تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «قنوات الأخطاء والتبعيات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أهمية أنظمة التأثيرات
- نوع Effect
- تركيب التأثيرات
- قنوات الأخطاء والتبعيات