İşlevsel programlama, hesaplama tabanının ifadelerin değerlendirilmesi olduğu bir programlama paradigmasıdır. Bazı özellikler, üst düzey işlevlerin kullanılması, referans şeffaflığı ve tembel değerlendirmedir. Programlama stilinin avantajları, programların okunması kolay, çok güvenilir ve bileşenlere ayrılabilmesini içerir. Dezavantajları, hesaplamaların yavaş olabileceği ve stil ve sözdiziminin diğer genel programlama stillerinden tamamen farklı olmasıdır. İşlevsel programlama stili, bilgisayar bilimi uzmanlarından çok akademisyenler tarafından benimsendi.
Adından da anlaşılacağı gibi, fonksiyonlar bu programlama paradigmasının temel bir parçasıdır. İşlevler, üst düzey işlevler olarak adlandırılan diğer işlevler içinde yuvalanabilir ve her üst düzey işlev, anlaşılması ve hata ayıklanması kolay yapı taşı işlevlerine bölünebilir. Bazı yüksek dereceli fonksiyonların örnekleri Harita ve Yuva'dır. Map fonksiyonu F fonksiyonunu ve değişkenlerin listesini alır, örneğin (x, y, z) ve sonucu bir listede verir: Map [F, (x, y, z)] = (F (x), F (y), F (z)). Nest, F işlevini, x değişkenini ve yineleme sayısını alır: Nest [F, x, 3] = F (F (F (x))).
Saf fonksiyonel programlama bir girdi alır ve bir değişkenin durumunu değiştirmeden bir çıktı döndürür. Başka bir deyişle, aynı girişe sahip bir fonksiyon, programda daha önce ne olduğuna bakmaksızın, her zaman aynı sonuçları verecektir. Buna referans şeffaflığı denir. Matematiksel fonksiyonlar referans olarak saydam olduğundan, işlevsel programlama birçok matematikçi, mühendis ve bilim insanı için sezgiseldir.
İşlevlerin referans saydamlığı, işlev değerlendirme sırasının önemli olmadığı anlamına gelir. Bu nedenle, sonuçlara ihtiyaç duyulmadığı sürece tembel değerlendirme olarak adlandırılan fonksiyonların değerlendirilmesi gerekmez. Bu, bir programın ilk komutla başladığı ve listenin en son komutuna kadar çalıştığı zorunlu programlama ile tamamen çelişmektedir. Tembel değerlendirme, programın mantıksal olarak izlenmeyen veya gereksiz olduğu bölümleri atlar, bu da programı otomatik olarak optimize eder ve hesaplama süresini kısaltabilir.
İşlevsel programlama, diğer programlama paradigmalarına göre birçok avantaja sahiptir. Net giriş ve çıkışlara sahip fonksiyonların okunması ve anlaşılması kolaydır. Bir fonksiyon tamamen hata ayıklandıktan sonra, diğer uygulamalarda güvenle kullanılabilir. Çok çekirdekli makineler, paralel olarak bağımsız olarak değerlendirilen ve programların performansını önemli ölçüde artıran işlevleri hesaplayabilir.
Ne yazık ki, tüm programlar paralel hesaplamaya kendilerini ödünç vermez ve bilgisayar kullanımı işlevsel programları oldukça yavaş olabilir. İşlevsel programlar, büyük ölçüde özyinelemeye dayanır; bu, geleneksel döngüler veya yineleme yöntemlerini kullanmaktan daha az etkilidir. Aslında, işlevsel programlama, nesne yönelimli programlama gibi diğer daha yaygın paradigmalara benzemediğinden, oldukça beceriksiz ve öğrenmesi zor olabilir.
Akademisyenler, karmaşık gerçek dünya problemlerini programlamanın net ve anlaşılır bir yolunu sağladığı için fonksiyonel programlamayı tercih ederler. Bazı saf diller Haskell ve Erlang'dır. Mathematica sembolik matematikte uzmanlaşmıştır, R istatistikte uzmanlaşmıştır ve J finansal analizde uzmanlaşmıştır. Scala ve F # gibi çoklu paradigma dilleri hem işlevsel programlama hem de diğer programlama stillerini destekler.


