سؤال

ما رأيك في فوائد البرمجة الوظيفية؟وكيف تنطبق على المبرمجين اليوم؟

ما هي أكبر الاختلافات بين البرمجة الوظيفية و OOP؟

هل كانت مفيدة؟

المحلول

أسلوب البرمجة الوظيفية هو وصف ما تريد، وليس كيفية الحصول عليه.أي:بدلاً من إنشاء حلقة for-loop باستخدام متغير مكرر والسير عبر مصفوفة للقيام بشيء ما لكل خلية، ستقول ما يعادل "يشير هذا التصنيف إلى إصدار من هذا المصفوفة حيث تم تنفيذ هذه الوظيفة على جميع العناصر. "

تنقل البرمجة الوظيفية المزيد من أفكار البرمجة الأساسية إلى المترجم، أفكار مثل فهم القائمة والتخزين المؤقت.

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

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

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

نصائح أخرى

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

لماذا تعتبر البرمجة الوظيفية مهمة؟
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

لذلك فإن نقطة البداية الجيدة هي محاولة فهم بعض الأشياء غير الممكنة في اللغات الأمرية ولكنها ممكنة في اللغات الوظيفية.

إذا كنت تتحدث عن قابلية الحساب، فلا يوجد بالطبع شيء ممكن في البرمجة الوظيفية ولكن ليست الحتمية (أو العكس).

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

تهدف البرمجة الوظيفية إلى السماح لك بكتابة برامج موجزة وخالية من الأخطاء وقابلة للتوازي بسهولة أكبر.

وليس من الضروري أن يكون أحدهما أو الآخر:يتيح لك استخدام لغة مثل C#3.0 مزج أفضل العناصر في كل لغة.يمكن استخدام OO للبنية واسعة النطاق على مستوى الفصل وما فوق، والأسلوب الوظيفي للبنية صغيرة الحجم على مستوى الطريقة.

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

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

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

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

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

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

إذا كنت لا تعرف البرمجة الوظيفية بالفعل، فإن تعلمها يمنحك المزيد من الطرق لحل المشكلات.

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

توفر العديد من اللغات كلا من FP وOOP، بما في ذلك OCaml وC# 3.0 وF#.

هتاف ، جون هاروب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top