هل يمكنني استخدام البرمجة الوظيفية في لغتي؟

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

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

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


في كثير من الأحيان ، يسألني المطوّرون المتمرسون: "ما الذي يمكن أن تعطيني البرمجة الوظيفية أنه ليس لديّ؟ هل يمكنني فقط البدء في استخدام لغة FP بلغتي؟" هذا سؤال كبير ، آمل أن أتمكن من تقديم إجابة مناسبة عليه.


أنا أفهم تماما مظهر هذه المسألة. جافا سكريبت لديها map ، filter reduce . يحتوي Java 8 على تدفقات ( قررت استخدام اللغة الإنجليزية بدلاً من كلمة "دفق" - مترجم تقريبًا ). يبدو أن كل لغة تتلقى ميزات وظيفية أكثر وأكثر ، بما في ذلك هياكل البيانات غير الثابتة ، وظائف من الدرجة الأولى ، تكوين الوظائف ، التدمير والكتابة الجيدة.


وأنا أوافق: يمكنك استخدام FP بأي لغة .


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


انتظر لحظة هذا هو الجواب على السؤال. ولكن هل هذا بسيط؟


اسأل نفسك: هل يمكنني استخدام OOP في C؟ وفقا لما قلته أعلاه ، الجواب هو نعم. علاوة على ذلك ، لقد صنعت بالفعل أنظمة الكائنات الصغيرة في C في وقت سابق. لكن لماذا أحتاج إلى لغة موجهة للكائنات إذا كان بإمكاني استخدام كائنات في C؟ لقد بدا لي أن نظام الكائنات الخاص بي قد زودني بكل الميزات اللازمة لـ OOP. ولكن هنا سؤال آخر: هل يمكنني استخدام OOP في C دون معرفة OOP؟ أنا أشك في ذلك.


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


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


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


اسمحوا لي أن أقدم بيانًا أكثر إثارة للجدل: خارج اللغات الوظيفية (Clojure ، Haskell ، Elm ، Scala ، Erlang ، إلخ) ، لا يتم استخدام العديد من FPs. باستثناء ما إذا كان المطورون على دراية بالأسلوب الوظيفي ، فبفضل التجربة الغنية ، يستخدمون فتات فقط لما يقدمه النموذج. ويفتقدون أهم شيء: الفرصة للنظر إلى المهمة من زاوية مختلفة.


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


الخاتمة


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

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


All Articles