تركيب التأثيرات
سلسلوا التأثيرات وادمجوها باستخدام pipe والمولّدات
تركيب التأثيرات درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
تركيب التأثيرات
التأثيرات قيم، ولذلك تبني البرامج عبر تركيبها. والأدوات الأساسية هي Effect.pipe وEffect.map وEffect.flatMap وبنية Effect.gen المعتمدة على المولّدات.
pipe: تمرير القيمة عبر الدوال
يمرر pipe تأثيرًا عبر سلسلة من التحويلات من اليسار إلى اليمين، متجنبًا التداخل العميق.
import { Effect, pipe } from "effect";
const program = pipe(
Effect.succeed(2),
Effect.map((n) => n + 1),
Effect.map((n) => n * 10)
);
// Effect<number, never, never> producing 30map: تحويل قيمة النجاح
تطبق Effect.map دالة نقية على قيمة النجاح، مع إبقاء قناتي الأخطاء والمتطلبات دون تغيير.
import { Effect } from "effect";
const doubled = Effect.map(Effect.succeed(21), (n) => n * 2);
// Effect<number, never, never>flatMap: تسلسل التأثيرات
عندما تكون الخطوة التالية تأثيرًا بحد ذاتها، استخدم flatMap، الذي يُسمى أيضًا chain. فهو يشغّل التأثير الأول، ثم يمرر قيمته إلى دالة تعيد تأثيرًا آخر.
import { Effect, pipe } from "effect";
const getId = Effect.succeed(1);
const loadUser = (id: number) => Effect.succeed({ id, name: "Ada" });
const program = pipe(getId, Effect.flatMap(loadUser));
// Effect<{ id: number; name: string }, never, never>map مقابل flatMap
استخدم map عندما تعيد دالتك قيمة عادية، واستخدم flatMap عندما تعيد تأثيرًا. فاستخدام map مع دالة تعيد تأثيرًا يترك لديك تأثيرًا متداخلًا.
تراكم القنوات
عند تسلسل التأثيرات، تتحد أنواع أخطائها في اتحاد واحد، وكذلك تتحد متطلباتها. ويعكس النوع المركب كل ما يمكن أن يفشل وكل ما هو مطلوب.
// Effect<A, E1, R1> then Effect<B, E2, R2>
// => Effect<B, E1 | E2, R1 | R2>Effect.gen: بنية المولّد
تتيح لك Effect.gen كتابة شيفرة تأثيرات متسلسلة تُقرأ مثل async/await، باستخدام yield* لفك تغليف كل تأثير.
import { Effect } from "effect";
const program = Effect.gen(function* () {
const id = yield* Effect.succeed(1);
const user = yield* Effect.succeed({ id, name: "Ada" });
return user.name;
});
// Effect<string, never, never>gen مقابل pipe
يكون gen أوضح في التدفقات الخطية متعددة الخطوات التي تتضمن متغيرات وسيطة، بينما يتألق pipe في سلاسل التحويل القصيرة. ويتكاملان بحرية.
دمج التأثيرات المستقلة
يشغّل Effect.all عدة تأثيرات ويجمع نتائجها، مع تجميع الأخطاء والمتطلبات من جميع هذه التأثيرات.
import { Effect } from "effect";
const both = Effect.all([Effect.succeed(1), Effect.succeed("x")]);
// Effect<[number, string], never, never>لا يزال كسولًا
كل ما سبق لا يصف البرنامج إلا وصفًا. ولا يُنفذ أي شيء حتى تشغله عند الحافة باستخدام Effect.runPromise أو Effect.runSync.
import { Effect } from "effect";
// const result = await Effect.runPromise(program);لماذا يهم ذلك
التركيب هو ما يجعل التأثيرات عملية: إذ تجمع أجزاء صغيرة محددة الأنواع في برامج كبيرة، بينما يتتبع المصرّف كل خطأ وكل تبعية. وتُعدّ map وflatMap وpipe وgen الأفعال اليومية في شيفرة Effect.
تحقق سريع
تحقق من فهمك لتركيب التأثيرات.
مراجعة
تُركّب التأثيرات باستخدام map (لتحويل قيم النجاح)، وflatMap (لتسلسل الخطوات التي تُعيد تأثيرًا)، وpipe (لتمرير القيمة عبر التحويلات)، وEffect.gen (لبنية المولّد الشبيهة بالانتظار). وتتراكم قناتا الأخطاء والمتطلبات على شكل اتحادات، ولا يُنفّذ أي شيء حتى تنفّذه عند نقطة التنفيذ النهائية.
الأسئلة الشائعة
هل درس «تركيب التأثيرات» مجاني؟
نعم — نص درس «تركيب التأثيرات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «تركيب التأثيرات»؟
سلسلوا التأثيرات وادمجوها باستخدام pipe والمولّدات تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «تركيب التأثيرات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أهمية أنظمة التأثيرات
- نوع Effect
- تركيب التأثيرات
- قنوات الأخطاء والتبعيات