0Pricing
JavaScript Academy · درس

تركيب الدوال

اجمعوا الدوال الصغيرة في مسارات معالجة.

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

ما تركيب الدوال؟

يجمع تركيب الدوال الدوال الصغيرة في دالة واحدة. ويؤدي تركيب f وg إلى إنشاء دالة يصبح فيها ناتج g هو مدخل f.

رياضيًا: compose(f, g)(x) = f(g(x)). تتدفق البيانات من اليمين إلى اليسار.

دالتان صغيرتان

يبدأ تركيب الدوال بدوال بسيطة مخصصة لغرض واحد. إليك تحويلين سنجمع بينهما.

const double = x => x * 2;
const increment = x => x + 1;

console.log(double(5));
console.log(increment(5));

تركيب الدوال يدويًا

إن أوضح صورة لتركيب الدوال هي ببساطة استدعاء إحدى الدوال على ناتج دالة أخرى. اقرأ التعبير من الداخل إلى الخارج: تُنفَّذ increment أولًا، ثم double.

const double = x => x * 2;
const increment = x => x + 1;

const result = double(increment(5));
console.log(result);

دالة compose لدالتين

ضع هذا النمط داخل دالة compose قابلة لإعادة الاستخدام. فهي تأخذ f وg وتُعيد دالة جديدة تطبّق g أولًا، ثم f.

const compose = (f, g) => x => f(g(x));

const double = x => x * 2;
const increment = x => x + 1;

const doubleThenAfterIncrement = compose(double, increment);
console.log(doubleThenAfterIncrement(5));

الترتيب مهم

تركيب الدوال غير تبادلي. يختلف compose(f, g) عن compose(g, f) لأن الدالة الموجودة على اليمين تُنفَّذ أولًا.

const compose = (f, g) => x => f(g(x));

const double = x => x * 2;
const increment = x => x + 1;

console.log(compose(double, increment)(5));
console.log(compose(increment, double)(5));

القراءة من اليمين إلى اليسار

في compose(a, b, c)(x) يُقيَّم الاستدعاء على الصورة a(b(c(x))). وتتعامل الدالة الموجودة في أقصى اليمين مع الإدخال أولًا. تذكّر هذا الاتجاه لتجنب الأخطاء.

const compose = (f, g) => x => f(g(x));

const shout = s => s.toUpperCase();
const exclaim = s => s + '!';

const loud = compose(shout, exclaim);
console.log(loud('hello'));

تركيب تحويلات السلاسل النصية

يُعد تركيب الدوال مناسبًا جدًا لمعالجة النصوص: إزالة المسافات الزائدة، ثم تحويل الأحرف إلى صغيرة، ثم استبدال المسافات، بحيث تكون كل خطوة دالة صغيرة.

const compose = (f, g) => x => f(g(x));

const trim = s => s.trim();
const lower = s => s.toLowerCase();

const clean = compose(lower, trim);
console.log(clean('   HELLO World  '));

تركيب الدوال مع الأرقام

يُعد تسلسل العمليات الحسابية مثالًا كلاسيكيًا. وتظل كل دالة سهلة الاختبار بمفردها.

const compose = (f, g) => x => f(g(x));

const square = x => x * x;
const negate = x => -x;

const negativeSquare = compose(negate, square);
console.log(negativeSquare(4));

لماذا نستخدم compose؟

يحافظ تركيب الدوال على تركيز كل دالة وقابليتها لإعادة الاستخدام، ويزيل فوضى الاستدعاءات المتداخلة. فبدلًا من توزيع f(g(h(x))) في أنحاء الشيفرة، تنشئ خط أنابيب مُسمّى مرة واحدة ثم تعيد استخدامه.

const compose = (f, g) => x => f(g(x));

const toCents = d => Math.round(d * 100);
const addLabel = c => c + ' cents';

const priceLabel = compose(addLabel, toCents);
console.log(priceLabel(2.5));

تركيب الدوال وCurrying معًا

تُركَّب الدوال المطبَّقة بأسلوب Currying بصورة رائعة، لأن كل واحدة منها تنتج دالة ذات وسيط واحد، وهو بالضبط ما يتوقعه تركيب الدوال.

const compose = (f, g) => x => f(g(x));
const add = a => b => a + b;
const multiply = a => b => a * b;

const addThenDouble = compose(multiply(2), add(3));
console.log(addThenDouble(5));

نحو استخدام دوال متعددة

حتى الآن، كانت compose تتعامل مع دالتين. أما تركيب الدوال الحقيقي فيدعم أي عدد من الدوال. في الدرس التالي ستبني دالة compose عامة وشبيهةَها التي تعمل من اليسار إلى اليمين، وهي pipe، باستخدام reduce.

const compose = (f, g) => x => f(g(x));
const a = x => x + 1;
const b = x => x * 2;
const c = x => x - 3;

const combined = compose(a, compose(b, c));
console.log(combined(10));

اختبار سريع

إذا كانت compose = (f, g) => x => f(g(x))، فما الناتج الذي تُعيده compose(double, increment)(5) عندما تضرب double في 2 وتضيف increment مقدار 1؟

مراجعة: تركيب الدوال

لقد تعلمت الجمع بين الدوال:

  • تساوي compose(f, g)(x) القيمة f(g(x))، وتُقيَّم من اليمين إلى اليسار.
  • الترتيب مهم: تركيب الدوال غير تبادلي.
  • يحافظ تركيب الدوال على صغر الدوال وتسميتها وقابليتها لإعادة الاستخدام.
  • يمكن تركيب الدوال المطبَّقة بأسلوب Currying بسهولة. وستعمّم ذلك لاحقًا ليشمل أي عدد من الدوال.

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

هل درس «تركيب الدوال» مجاني؟

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

ماذا ستتعلم في «تركيب الدوال»؟

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

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

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

كم من الوقت يستغرق درس «تركيب الدوال»؟

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

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

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

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

  1. التطبيق الجزئي
  2. تحويل الدوال إلى دوال متسلسلة
  3. تركيب الدوال
  4. بناء pipe وcompose
← العودة إلى JavaScript Academy