البرمجة الوظيفية هي عملية بناء البرمجيات عن طريق تكوين **وظائف نقية** ، وتجنب **الحالة المشتركة** ، **والبيانات****القابلة****للتغيير** ، **والآثار الجانبية** . البرمجة الوظيفية هي **تعريفية** (تخبر الكمبيوتر بما تريد أن تفعله) بدلاً من **حتمية** (إخبار الكمبيوتر بالضبط كيف تفعل ذلك) ، وتتدفق حالة التطبيق من خلال وظائف نقية. قارنها بالبرمجة الموجهة للكائنات ، حيث تتم مشاركة حالة التطبيق عادة وتشترك مع طرق في الكائنات.
### لماذا البرمجة الوظيفية؟
* انها عموما أكثر إيجازا
* انها عموما أكثر قابلية للتنبؤ
* من السهل اختباره من الكود الموجه للكائن
### تبني لغات البرمجة
تدعم العديد من لغات البرمجة البرمجة الوظيفية مثل Haskell و F # و Common Lisp و Clojure و Erlang و OCaml. يحتوي JavaScript أيضًا على خصائص لغة وظيفية غير مقيدة.
### الاستخدامات
لطالما كانت البرمجة الوظيفية شائعة في الأوساط الأكاديمية ، ولكن مع عدد قليل من التطبيقات الصناعية. ومع ذلك ، فقد تم مؤخراً استخدام العديد من لغات البرمجة الوظيفية البارزة في الأنظمة التجارية أو الصناعية. على سبيل المثال ، يتم استخدام لغة برمجة Erlang ، التي طورتها شركة Ericsson السويدية في أواخر الثمانينات ، لبناء مجموعة من التطبيقات في شركات مثل T-Mobile و Nortel و Facebook و Électricité de France و WhatsApp.
### وظائف الترتيب العالي
وظائف الدرجة العليا هي جزء كبير من البرمجة الوظيفية. دالة الترتيب الأعلى هي دالة تقوم إما بدالة (وظائف) كمعلمة أو تقوم بإرجاع دالة.
### خريطة
`map` هي دالة ذات ترتيب أعلى تستدعي دالة لكل عنصر من عناصر القائمة ، وتقوم بإرجاع النتائج كقائمة _جديدة_ .