لماذا يجب أن تفكر في البرمجة الوظيفية

مرحبا يا هبر! أقدم إليكم ترجمة مقالتي "لماذا يجب أن تفكر في البرمجة الوظيفية" ، المكرسة للبرمجة الوظيفية.

الصورة

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

  • هل مشاريعك دائما في الوقت المحدد؟
  • هل لدى المستخدمين أي شكاوى؟
  • هل استغرق دعم المشروع وقتًا طويلاً؟
  • هل تتلاءم الوظائف الجديدة دائمًا مع البنية الحالية؟

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

النظرة الأولى


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

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

لذلك ، إذا كان يمكن حل أي مشكلة من خلال الجمع بين المكالمات إلى العديد من الوظائف ، ثم:

  1. كيفية تنفيذ شروط if- آخر؟
  2. كيفية حل الحيل مع استثناء Null؟
  3. كيف تتأكد من أن الوظيفة "قابلة لإعادة الاستخدام" حقًا ويمكن استخدامها في أي مكان؟
  4. كيفية التأكد من تغيير البيانات المنقولة إلى وظائفنا ويمكن استخدامها في أماكن أخرى؟
  5. إذا كانت إحدى الوظائف تأخذ عدة قيم ، ولكن عندما يتم دمجها في سلسلة ، يمكنك فقط تمرير وظيفة واحدة ، فكيف نجعل هذه الوظيفة جزءًا من السلسلة؟

لحل جميع هذه المشكلات ، توفر اللغات الوظيفية أدوات وحلولًا من الرياضيات ، مثل monads و functor وما إلى ذلك.

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

إذن لماذا يغفل الخبراء البرمجة الوظيفية لفترة طويلة؟ ولماذا أصبحت شائعة اليوم؟

أين تستخدم البرمجة الوظيفية في العالم الحقيقي؟


نظرًا لأن البرمجة الوظيفية هي أساسًا طريقة كتابة التعليمات البرمجية ، يمكنك استخدام مبادئها بأي لغة. ومع ذلك ، هناك لغات شحذ خصيصا من خلال نهج وظيفي. تكتسب اللغات الوظيفية الأكثر حداثة مثل Elm و Elixir ، وفقًا لـ GitHub و Stack Overflow ، شعبية وثقة بشكل تدريجي. زادت شعبية جافا سكريبت أيضًا من الاهتمام بمفاهيم البرمجة الوظيفية لاستخدامها في هذه اللغة. بالإضافة إلى ذلك ، بدأ المطورون ذوو الخبرة في مجال البرمجة الوظيفية في وقت لاحق العمل على بيئات تطبيق الويب الواحد - SPA ، ونتيجة لذلك لدينا مكتبات Redux و React و MobX وغيرها من المكتبات التي يستخدمها ملايين الأشخاص.

الصورة

أمثلة الحياة الحقيقية:

  • اباتشي شرارة
  • السمط (من Twitter)
  • أباتشي كافكا
  • Finagle (من Twitter)
  • اكا
  • أوتوكاد
  • emacs (LISP)

فما هي البرمجة الوظيفية ، من أين أتت هذه الطفرة ولماذا يجب أخذها في الاعتبار؟ دعونا معرفة ذلك.

حول البرمجة الوظيفية


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

  • البرمجة الوظيفية تتيح لك كتابة رمز أكثر إيجازاً ويمكن التنبؤ به
  • من السهل التحقق (على الرغم من أن التعلم من الصفر ليس سهلاً)

الملامح الرئيسية لتطوير البرمجيات باستخدام البرمجة الوظيفية


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

    البرمجة الوظيفية تساعدنا على كتابة تعليمات برمجية موجهة.
  • مدى انتشار النهج التصريحي أكثر منه إلزاميًا.

تكوين وظيفة


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

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

الصورة

فوائد البرمجة الوظيفية


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

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

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

عيوب البرمجة الوظيفية


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

الخاتمة


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

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

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

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

الصورة

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

رومان تاليف
Quasarbyte مطور برامج

Source: https://habr.com/ru/post/ar438396/


All Articles