السبت، يونيو 13، 2009

لماذا البرمجة الوظيفية (الجزء 1)

إبتداءا أرى أن الترجمة للمصطلح "functional programming" بـ "البرمجة الوظيفية" غير موفقة. إذ و حسب ويكيبيديا، فإن إشتقاق المسمى جاء من المعنى المستخدم في علم الرياضيات "Function" المعرب بأسم "الدالة". و لهذا المعنى دلالته التى لا تنتقل باستخدام الترجمة الحالية.

إذا رجعنا إلى تاريخ علم الحوسبة فإنا نجد أن اللبنة الأساس لـ "البرمجة الوظيفية" أو "طريقة البرمجة بالدوال" (من الان و خلال الموضوع سوف أستخدم التسمية الثانية) هي "نظرية حساب الامبدا λ" أو "lambda calculus" و هي نظرية رياضية تجريدية لا تهمنا تفاصيلها في فهم الموضوع.

أول لغة أستخدمت هذا الأساس النظري هي لغة LISP و هي ثاني أقدم لغة برمجة من المستوى الرفيع بعد لغة الـ FORTRAN، و تأسست عام 1958.
من اللغات المعروفة بهذا النوع أيضا (للمثال و ليس الحصر):
و قريبا سوف تصدر Microsoft ضمن Visual Studio 2010 لغة مبنية على نسق لغة Ocaml ل إطار .NET أسمتها بـ #F.

من تتبع أخبار البرمجة يلاحظ تنامي أهمية هذه الطريقة في البرمجة, خصوصا في زمن المعالجات المتعددة النوى. و حتى إن لم و لن تستخدم ايا من هذه اللغات للبرمجة، فإن فهم الطريقة سيوسع من أفق الرؤية في البرمجة عموما.

حسنا، بعد هذه المقدمة، ما يلي هي ترجمة بتصرف لورقة بحث صدرت عام 1984 معنونة بـ "لماذا البرمجة بالدوال تهم" "Why Functional Programming Matters" :

"
المقدمة


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

الأمثلة في هذه الورقة ستستخدم لغة Miranda و لكنها ستكون بسيطة بحيث أنها لا تتطلب معرفة باللغة لفهمها.

الخواص المميزة للبرمجة بالدوال يمكن اختصارها بالتالي. البرامج ليس فيها جمل تعيين "assignment statements" , لذلك فإن المتغيرات لا تتغير قيمتها أبدا. و بمعنى أعم فإن البرمجة بالدوال ليس فيها "أثار جانبية" "side-effects" . استدعاء دالة لا يؤدي إلى أي تغيير عدا حساب نتيجة الدالة. هذه الخاصية تلغي تماما مصدرا رئيسيا من مصادر الأخطاء "bugs" و تجعل ترتيب التشغيل "order of execution" غير مهم، حيث أنه ليس هناك تأثير جانبي لأي دالة فإن نتيجة الدوال مربوطة بمعطياتها فقط و ليس للترتيب أي أثر. هذا يزيل عن كاهل المبرمج العمل على التحكم في سير البرنامج. و من فوائد انعدام التأثيرات الجانبية، إمكانية التبديل بين أي "تعبير" "expression" و قيمته أو العكس و هذا ما يسمى بـ "الشفافية المرجعية" "referential transparency" . هذه الحرية تجعل المعالجة الرياضية للبرنامج أسهل من غيرها.

حسنا، بعد كل هذا كل ما عرفناه هو ما ليس موجود في البرمجة بالدوال (لا تعيين، لا أثار جانبية، لا تحكم بالسير) لكن ما هي البرمجة بالدوال؟

- يتبع ...

هناك تعليق واحد:

Yassine Abouzia يقول...
أزال المؤلف هذا التعليق.