0Pricing
TypeScript Academy · درس

أهمية أنظمة التأثيرات

اجعلوا الآثار الجانبية وحالات الفشل صريحة وقابلة للتركيب

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

لماذا تهم أنظمة التأثيرات

يجعل نظام التأثيرات الآثار الجانبية والإخفاقات والتبعيات صريحة وقابلة للتركيب في نظام الأنواع. وبدلًا من الاستثناءات المخفية وعمليات الإدخال والإخراج الضمنية، يصبح كل تأثير قيمة يمكنك تمريرها وتحويلها ودمجها.

مشكلات async/throw الخام

يخفي استخدام async/await مع throw معلومات مهمة: فتوقيع الدالة لا يوضح الأخطاء التي يمكن أن ترميها أو الموارد التي تحتاج إليها.

async function getUser(id: number): Promise<User> {
  // may throw NotFoundError, may throw NetworkError
  // needs a database connection from... somewhere
  // none of this is in the type
  return await db.users.find(id);
}

الأخطاء غير مرئية

لا يخبرك Promise<User> بأي شيء عن حالات الفشل. ولا يستطيع المستدعون معرفة الأخطاء التي ينبغي معالجتها، فيعالجون أخطاء أكثر من اللازم أو ينسون حالات بالكامل.

التبعيات ضمنية

تعتمد الدالة السابقة بصمت على قاعدة بيانات. وتُجلب هذه التبعية من متغير عام أو من عملية استيراد، مما يجعل الاختبار والاستبدال صعبين ويخفي العقد الحقيقي.

ما هي قيمة التأثير

التأثير هو وصف لعملية حسابية، وليس العملية نفسها. لا يفعل إنشاؤه شيئًا؛ بل تشغله لاحقًا. وهذا يجعل التأثيرات قيمًا نقية يمكنك تركيبها كما تركب البيانات.

import { Effect } from "effect";

// A description: produces number, no errors, no requirements
const program = Effect.succeed(42);
// Nothing has run yet.

الإخفاقات الصريحة

تحمل التأثيرات أخطاءها المحتملة ضمن النوع، لذا يجبرك المترجم على معالجتها أو تمريرها بوعي.

import { Effect } from "effect";

const risky = Effect.fail(new Error("boom"));
// type encodes that this can fail with Error

التبعيات الصريحة

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

قابلية التركيب

بما أن التأثيرات قيم، فإنك تجمعها باستخدام المعاملات (map وflatMap وzip) تمامًا كما تفعل مع المصفوفات أو الوعود، مع تمرير قنوات الأخطاء والتبعيات تلقائيًا.

التنفيذ المؤجل

لا يحدث شيء حتى تشغّل التأثير صراحةً، مثلًا باستخدام Effect.runPromise. ويتيح هذا الفصل بين الوصف والتنفيذ إعادة المحاولة والمقاطعة والاختبار دون إعادة تشغيل الآثار الجانبية.

import { Effect } from "effect";

const program = Effect.succeed(1);
// Run at the edge of your app:
// const result = await Effect.runPromise(program);

مقارنة بالوعود

إن Promise متلهف، ويُنفذ فورًا، ولا يحدد الأخطاء نوعيًا، كما أنه لا يعرف شيئًا عن التبعيات. أما Effect فهو كسول، ومحدد الأخطاء نوعيًا، وواعٍ بالتبعيات، ويوفر مجموعة أشمل من المعلومات.

لماذا يهم هذا

إن جعل التأثيرات والأخطاء والتبعيات صريحة يعني أن المترجم يفرض المعالجة الصحيحة، وأن الشيفرة تصبح قابلة للاختبار عبر استبدال التبعيات، وأن التدفقات غير المتزامنة المعقدة تُركب بصورة موثوقة؛ وهذا هو الدافع وراء مكتبات مثل Effect-TS.

اختبار سريع

اختبر فهمك لأهمية أنظمة التأثيرات.

مراجعة

تجعل أنظمة التأثيرات الآثار الجانبية والإخفاقات والتبعيات صريحة. وعلى خلاف الوعود المتلهفة، العمياء عن الأخطاء، والمخفية للتبعيات، فإن التأثير هو وصف كسول وقابل للتركيب لعملية حسابية، ويحمل نوعه معلومات النجاح والخطأ والمتطلبات، مما يتيح تركيبًا موثوقًا وقابلية للاختبار.

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

هل درس «أهمية أنظمة التأثيرات» مجاني؟

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

ماذا ستتعلم في «أهمية أنظمة التأثيرات»؟

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

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

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

كم من الوقت يستغرق درس «أهمية أنظمة التأثيرات»؟

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

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

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

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

  1. أهمية أنظمة التأثيرات
  2. نوع Effect
  3. تركيب التأثيرات
  4. قنوات الأخطاء والتبعيات
← العودة إلى TypeScript Academy