في البرمجة الوظيفية يشبه البرنامج سلسلة من التحويلات: تدخل البيانات إلى دالة فتتحول، ثم تدخل الدالة التالية، وفي النهاية تعطي النتيجة. وبدلاً من تغيير القيم، تُنشئ قيماً جديدة.

الأفكار الرئيسية#

  • الدالة النقية (Pure): تعطي دائماً المخرج نفسه للمدخل نفسه ولا تغيّر شيئاً خارج نفسها.
  • عدم قابلية التغيير (Immutability): لا تتغير البيانات بعد إنشائها؛ تُنشأ نسخة جديدة.
  • الدالة عالية الرتبة (Higher-order): دالة تأخذ دالة أخرى مدخلاً أو تُرجعها.

مثال#

JavaScript
const prices = [100, 250, 80];
const total = prices
  .filter(p => p > 90)
  .map(p => p * 1.1)
  .reduce((a, b) => a + b, 0);

هنا أُنجزت التصفية والتحويل والجمع بلا حلقة يدوية ودون تغيير المصفوفة الأصلية.

لماذا لها أنصار#

الدوال النقية سهلة الاختبار وسلوكها سهل التوقع. وعندما لا يتغير شيء من الخارج تقلّ الأخطاء الغريبة المرتبطة بترتيب التنفيذ. وهذا أنفع في البرامج المتزامنة.

أين تراها#

حتى لو لم تستخدم لغة وظيفية خالصة كهاسكل، فإن دوالاً مثل map وfilter في جافا سكريبت وبايثون مبنية على الفكرة نفسها.

خطأ شائع#

الظن بأن عليك الاختيار بين الوظيفية وكائنية التوجه. عملياً تستفيد معظم المشاريع من الاثنين.