نوع Effect
افهموا Effect
نوع Effect درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
نوع التأثير
النوع المحوري هو Effect<Success, Error, Requirements>. وتصف معاملات الأنواع الثلاثة كل ما يمكن أن تفعله العملية الحسابية: ما تنتجه، وكيف يمكن أن تفشل، وما تحتاج إليه.
import { Effect } from "effect";
// Effect<A, E, R>
// A = success value type
// E = error type
// R = required services (dependencies)قناة النجاح (A)
المعامل الأول هو القيمة الناتجة عند النجاح. تنشئ Effect.succeed تأثيرًا ينتج قيمة دائمًا، من دون أخطاء أو متطلبات.
import { Effect } from "effect";
const ok = Effect.succeed(42);
// Effect<number, never, never>قناة الخطأ (E)
المعامل الثاني هو الخطأ المحدد نوعيًا. ويعني never أن التأثير لا يمكن أن يفشل. أما وجود نوع خطأ فعلي فيعني أن على المستدعين أخذه في الحسبان.
import { Effect } from "effect";
class NotFound { readonly _tag = "NotFound"; }
const failing = Effect.fail(new NotFound());
// Effect<never, NotFound, never>قناة المتطلبات (R)
يسرد المعامل الثالث الخدمات التي يعتمد عليها التأثير. يعني never أن التأثير مكتفٍ بذاته؛ وإلا فلن يمكن تشغيله حتى توفير تلك الخدمات.
// Conceptually:
// Effect<User, NotFound, Database>
// produces a User, may fail with NotFound, needs a Databaseقراءة توقيع
يمكنك قراءة نوع التأثير كجملة: "ينتج A، أو يفشل بالخطأ E، عند تزويده بـ R". ويستبدل هذا النوع الواحد Promise، والاستثناءات الضمنية، والمتغيرات العامة المخفية.
never بوصفه قيمة محايدة
يُعد never القيمة المحايدة لقناتي E وR: فلا يوجد خطأ محتمل ولا تبعية مطلوبة. ومع التركيب، تتراكم أنواع الأخطاء والمتطلبات باعتبارها اتحادات.
إنشاء التأثيرات من القيم
المنشئات الشائعة هي: succeed (قيمة نقية)، وfail (خطأ محدد نوعيًا)، وsync (تغليف أثر جانبي متزامن).
import { Effect } from "effect";
const now = Effect.sync(() => Date.now());
// Effect<number, never, never>تغليف العمل غير المتزامن
ترفع Effect.promise وEffect.tryPromise الوعود إلى مستوى التأثيرات؛ وتتيح لك tryPromise تحويل الرفض إلى خطأ محدد نوعيًا في قناة E.
import { Effect } from "effect";
const fetchUser = Effect.tryPromise({
try: () => fetch("/user").then((r) => r.json()),
catch: (e) => new Error("fetch failed: " + String(e)),
});
// Effect<any, Error, never>الأسماء المستعارة لقنوات النوع
بالنسبة إلى الخدمات، يوفر Effect الاسم الكامل Effect.Effect<A, E, R>. والقنوات مستقلة: يمكنك امتلاك أخطاء من دون متطلبات، أو متطلبات من دون أخطاء.
لماذا توجد ثلاث قنوات
تلتقط القنوات الثلاث الأمور التي تجعل فهم الشيفرة صعبًا: النتيجة، وأنماط الفشل، والسياق الذي تعمل فيه. وإظهار هذه الأمور الثلاثة في نوع واحد هو ما يمنح Effect ضمانات الأمان الخاصة به.
لماذا يهم هذا
إن فهم Effect<A, E, R> هو مفتاح كل ما يأتي بعده: فالتركيب يجمع هذه القنوات، ومعالجة الأخطاء تضيق E، وتوفير التبعيات يزيل R. اقرأ النوع وستعرف بالضبط ما تفعله العملية الحسابية.
اختبار سريع
تأكد من فهمك لنوع Effect.
مراجعة
يشفّر Effect<A, E, R> قيمة النجاح والخطأ المحدد نوعيًا والتبعيات المطلوبة في نوع واحد. ويُعد never القيمة المحايدة لـ E وR. وتنشئ منشئات مثل succeed وfail وsync وtryPromise تأثيرات بالقنوات المناسبة.
الأسئلة الشائعة
هل درس «نوع Effect» مجاني؟
نعم — نص درس «نوع Effect» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «نوع Effect»؟
افهموا Effect تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «نوع Effect»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.