WPML

تُعد البرمجة الوظيفية موضوعاً ساخناً بين المطورين هذه الأيام، وليس من فراغ. كان الإصدار 4.5 من WPML مشروعاً واسع النطاق قدّم خيار ترجمة موقعك تلقائياً. بالنسبة لنا، كانت هذه أيضاً اللحظة المناسبة للانتقال إلى البرمجة الوظيفية. إليك ما تعلمناه خلال هذه العملية.

ما هي البرمجة الوظيفية؟

ربما سمعت أن البرمجة الوظيفية تجعل شيفرتك البرمجية أكثر قابلية للقراءة وأسهل في الاختبار. ولكن لكي تستوعب البرمجة الوظيفية بالكامل، من المهم أن تفهم المفاهيم المتعلقة بها.

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

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

ببساطة، في البرمجة الوظيفية يعتمد المُخرَج على المُدخَل.

لماذا البرمجة الوظيفية؟

يُعد WPML مشروعاً كبيراً ومعقداً. حتى وقت قريب، كنا نستخدم البرمجة كائنية التوجه (OOP) لمحاولة إدارة هذا التعقيد. من التحديات الرئيسية كتابة شيفرات الاختبار (اختبارات الوحدة) لجميع مشاريعنا. عند كتابة شيفرة قابلة للاختبار، نحتاج إلى ضمان أن أي تغييرات نجريها لا تؤدي إلى تعطل الشيفرة الحالية.

لا يمكن أن يصل بك اختبار الوحدة لشيفرة OOP إلا إلى حد معين. يجب محاكاة تبعيات الشيفرة حتى يمكن اختبار الفئات بشكل مستقل. ونتيجة لذلك، ينتهي الأمر بأن تكون الاختبارات كبيرة ومعقدة.

يُقال إن التركيز الرئيسي للبرمجة الوظيفية هو «ما الذي يجب حله». في المقابل، تتبنى البرمجة كائنية التوجه نهج «كيفية الحل». مع وضع هذا في الاعتبار، بدا أن البرمجة الوظيفية يمكن أن تساعدنا في التغلب على بعض تحدياتنا.

ما الذي فعلناه

عندما نتحدث عن البرمجة الوظيفية، فإن PHP ليست اللغة الأولى التي تتبادر إلى الذهن - على الرغم من أنها تتيح لنا إدخال أسلوب وظيفي. على سبيل المثال، تستخدم الخطّافات والمرشِّحات التي تتيح توسيع WordPress الدوال لتجاوز وظائف WordPress.

لسوء الحظ، لا توجد مكتبة قياسية لاستخدام نموذج وظيفي أكثر في PHP. لقد راجعنا العديد من المكتبات ولكن لم تحتوِ أي منها بالضبط على ما نحتاجه لكتابة شيفرة معبرة بأسلوب وظيفي. لذلك بدلاً من ذلك، قررنا كتابة مكتبتنا الخاصة. استلهمنا من مصادر مختلفة، ولكن الكثير منها كان من مكتبات Javascript، والتي وجدنا أنها أكثر نضجاً.

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

هل نجح الأمر؟

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

  • بنية الشيفرة أصبحت أفضل
  • الشيفرة أصبحت أكثر تعبيراً وإيجازاً
  • تقليل تكرار الشيفرة
  • الدوال أصغر حجماً وبالتالي أسهل في الاختبار وإعادة الاستخدام
  • يمكن تركيب الدوال معاً
  • محاكاة أقل في الاختبارات
  • تم تطوير مكتبات محاكاة قابلة لإعادة الاستخدام

ولكن بالطبع، لا يوجد شيء مثالي. في حين أن البرمجة الوظيفية أكثر إيجازاً وقابلية للتنبؤ، إلا أن لها عيوباً، خاصة إذا لم تكن معتاداً عليها:

  • أصعب في تصحيح الأخطاء
  • أصعب في التغيير - على الرغم من أنه يمكن اعتبار ذلك ميزة أيضاً، لأنه يتطلب منك التفكير في التغييرات بدلاً من إدخال تغييرات سريعة
  • منحنى التعلم حاد

لا تخف من المحاولة

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

إذا كنت مهتماً بمعرفة المزيد، نقترح البدء بـ سلسلة مقالات مدونة Composing Software.

بمجرد أن تصبح مستعداً للتعمق أكثر، ألقِ نظرة على مستودع مشروع FP الخاص بنا.

هل البرمجة هي شغفك؟ انضم إلينا.

نحن نبحث دائماً عن مطورين استثنائيين للانضمام إلى فريقنا. إذا كان هذا الوصف ينطبق عليك، فلا تنتظر أكثر - قدّم طلبك اليوم.

هل وجدت هذا مفيداً؟ شارك هذه المقالة: