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