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

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

كما يوحي الاسم ، تعد الوظائف جزءًا أساسيًا من نموذج البرمجة هذا. قد تتداخل الوظائف مع وظائف أخرى ، تسمى وظائف الترتيب الأعلى ، ويمكن تقسيم كل وظيفة ذات ترتيب أعلى إلى وظائف كتل إنشائية يسهل فهمها وتصحيحها. أمثلة على بعض وظائف الترتيب الأعلى هي Map و Nest. تأخذ خريطة الوظيفة الدالة F وقائمة المتغيرات ، على سبيل المثال (x ، y ، z) وتعطي النتيجة في قائمة: Map [F، (x، y، z)] = (F (x)، F (ذ) ، و (ض)). يأخذ Nest الوظيفة F والمتغير x وعدد التكرارات: Nest [F، x، 3] = F (F (F (x))).

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

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

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

لسوء الحظ ، لا تصلح جميع البرامج للحوسبة المتوازية ، وقد تكون البرامج الوظيفية للحوسبة بطيئة نوعًا ما. تعتمد البرامج الوظيفية بشكل كبير على العودية ، والتي غالبًا ما تكون أقل كفاءة من استخدام الحلقات التقليدية أو طرق التكرار. في الواقع ، يمكن أن تكون البرمجة الوظيفية خرقاء للغاية ويصعب تعلمها لأنها لا تشبه النماذج الأخرى الأكثر شيوعًا مثل البرمجة الموجهة للكائنات.
يميل الأكاديميون إلى تفضيل البرمجة الوظيفية لأنها توفر طريقة واضحة ومفهومة لبرمجة مشاكل العالم الحقيقي المعقدة. بعض اللغات النقية هي Haskell و Erlang. Mathematica متخصصة في الرياضيات الرمزية ، R متخصصة في الإحصاء و J متخصصة في التحليل المالي. تدعم لغات Multiparadigm مثل Scala و F # كلاً من البرمجة الوظيفية وأنماط البرمجة الأخرى.