Fonksiyonel Programlama
Fonksiyonel programlama, hesaplamayı matematiksel fonksiyonların değerlendirilmesi olarak ele alan, değişebilir durumdan kaçınan ve üst düzey fonksiyonları, değişmezliği ve denklemsel akıl yürütmeyi vurgulayan bir yaklaşımdır.
Tanım
Fonksiyonel programlama, programların değişmez veriler üzerinde saf fonksiyonlar birleştirilerek inşa edildiği, böylece bir ifadenin değerlendirilmesinin yalnızca girdilerine bağlı olduğu ve gözlemlenebilir yan etki üretmediği bir paradigmadır.
Kapsam
Bu konu, lambda kalkülüsüne dayanan fonksiyonel paradigmayı kapsamaktadır: birinci sınıf ve üst düzey fonksiyonlar, değişmezlik ve referans şeffaflığı, özyineleme, tembel değerlendirme, cebirsel veri tipleri ve örüntü eşleştirme ile etkileri yapılandırmak için monadların ve diğer soyutlamaların kullanımı. Saf fonksiyonların birleştirme, akıl yürütme ve paralelleştirmeye neden yardımcı olduğunu ele almaktadır.
Temel sorular
- Üst düzey fonksiyonlar ve tembel değerlendirme modülerliği nasıl iyileştirir?
- Referans şeffaflığı, akıl yürütme ve optimizasyon açısından ne gibi faydalar sağlar?
- Yan etkiler, tamamen fonksiyonel bir ortamda nasıl modellenir?
- Fonksiyonel kod, lambda kalkülüsü ve tip teorisi ile nasıl ilişkilidir?
Temel kuramlar
- Üst Düzey Fonksiyonlar ve Tembellikten Gelen Yapıştırıcı
- Hughes, fonksiyonel programlamanın modülerlik avantajının, küçük, yeniden kullanılabilir program parçalarını birleştirmek için 'yapıştırıcı' görevi gören üst düzey fonksiyonlardan ve tembel değerlendirmeden geldiğini savunmaktadır.
- Etkileri Yapılandırmak için Monadlar
- Wadler, monadların, aksi takdirde saf olan fonksiyonel programlar aracılığıyla durumu, istisnaları ve diğer etkileri geçirmek için tekdüze, birleştirilebilir bir yol sağladığını göstermiştir.
- Fonksiyonel Programların Cebiri
- Backus'un fonksiyon düzeyinde programlaması, programlar hakkında akıl yürütmeyi ve onları dönüştürmeyi destekleyen denklemsel yasalarla birlikte kombinatörlerin bir cebirini sunmaktadır.
Klinik önem
Değişmezlik ve saf fonksiyonlar gibi fonksiyonel teknikler, paylaşılan değişebilir duruma bağlı hata sınıflarını azaltmakta ve kodu test etmeyi ve paralelleştirmeyi kolaylaştırmaktadır. Bu fikirler, lambda ifadeleri, değişmez koleksiyonlar ve akış/harita-indirgeme (stream/map-reduce) soyutlamaları aracılığıyla ana akım dillere geniş ölçüde yayılmıştır.
Tarihçe
Fonksiyonel programlama, Church'ün lambda kalkülüsüne ve McCarthy'nin Lisp'ine (1958) dayanmaktadır. 1970'ler ve 1980'ler ML, Miranda ve Scheme dillerini ortaya çıkarmıştır; Backus'un 1977 Turing dersi, zorunlu (imperative) programlama stiline yönelik fonksiyonel eleştiriyi ilerletmiştir. Haskell, 1990 civarında tembel, tamamen fonksiyonel programlamayı standartlaştırmış ve Wadler'ın monad tabanlı etki yönetimi, saf fonksiyonel programlamayı gerçek dünya görevleri için pratik hale getirmiştir.
Tartışmalar
- Tembel ve Katı Değerlendirme
- Fonksiyonel dil tasarımcıları, zarif sonsuz yapılar ve modülerlik sağlayan tembel (ihtiyaç anında çağırma) değerlendirmenin, katı değerlendirmeye kıyasla alan ve performans hakkında akıl yürütme maliyetlerine değip değmediğini tartışmaktadır.
Öne çıkan isimler
- John Hughes
- Philip Wadler
- John Backus
- Richard Bird
- Simon Peyton Jones
İlgili konular
Temel eserler
- hughes1989
- wadler1992
- backus1978
- bird1998
Sıkça sorulan sorular
- Referans şeffaflığı nedir?
- Bir ifade, programın davranışını değiştirmeden değeriyle değiştirilebiliyorsa referans şeffaftır; bu durum, fonksiyonlar saf ve veriler değişmez olduğunda geçerlidir.
- Fonksiyonel programlama, girdi/çıktı ve durumu nasıl ele alır?
- Etkiler genellikle, örneğin monadlar veya etki sistemleri aracılığıyla açıkça modellenmektedir; böylece yan etkilerin sırası ve varlığı, mutasyondan dolaylı olarak ortaya çıkmak yerine tiplerde yakalanmaktadır.