Programowanie funkcyjne
Programowanie funkcyjne – filozofia i metodyka programowania będąca odmianą programowania deklaratywnego, w której wykorzystuje się to, że funkcje należą do typów pierwszoklasowych. Kładzie się nacisk na obliczanie wartości funkcji (często rekurencyjnych), ich kompozycje oraz funkcje wyższego rzędu.
W czystym programowaniu funkcyjnym, raz zdefiniowana funkcja zwraca zawsze tę samą wartość dla określonych wartości argumentów, tak jak funkcje matematyczne. Duży nacisk kładzie się także na niezmienność danych[1].
Historia
[edytuj | edytuj kod]Podstawą teoretyczną programowania funkcyjnego jest rachunek lambda (a dokładnie rachunek lambda z typami). Został on opracowany w latach 30. XX wieku przez Alonzo Churcha.
Nazwa paradygmatu po raz pierwszy pojawiła się w pracy Johna Backusa „Can Programming Be Liberated From the von Neumann Style? A Functional Style and Its Algebra of Programs” w roku 1977, dzięki której Backus dostał nagrodę Turinga, mimo że programowanie funkcyjne było znane już wcześniej[2].
Pierwszym funkcyjnym językiem programowania był Information Processing Language (IPL) opracowany przez Allena Newella, Cliffa Shawa i Herberta Simona w połowie lat 50. XX wieku dla maszyny JOHNNIAC. Jednakże przełom dla programowania funkcyjnego stanowiło opracowanie przez Johna McCarthy pod koniec lat pięćdziesiątych języka LISP dla maszyn IBM 700/7000. LISP wprowadził wiele cech spotykanych we współczesnych językach programowania. Opracowany w latach 70. język Scheme miał za zadanie uproszczenie i poprawienie języka LISP.
W latach 70. powstały dwa kolejne funkcyjne języki programowania: język ML opracowany przez Robina Milnera na Uniwersytecie w Edynburgu oraz język Miranda opracowany przez Davida Turnera na Uniwersytecie w Kent. Język ML dał początek kilku dialektom, z których najpopularniejsze obecnie to Objective Caml oraz Standard ML. Pod koniec lat 80. został opracowany i ustandaryzowany język programowania Haskell, wywodzący się z języka Miranda.
Jednym z najnowszych języków funkcyjnych jest rozwijany przez firmę Microsoft język F#. Jest to przeniesienie języka Objective Caml na platformę .NET.
Podział języków funkcyjnych
[edytuj | edytuj kod]Języki funkcyjne można podzielić na dwie grupy:
Języki czysto funkcyjne
[edytuj | edytuj kod]Do tej grupy należą języki, w których nie występują zmienne ani efekty uboczne.
Wejście/wyjście w takich językach musi się odbywać jakimś alternatywnym mechanizmem, np. za pomocą monad.
Przedstawiciele tej podgrupy to Haskell oraz Clean.
Języki mieszane
[edytuj | edytuj kod]Języki tej grupy są popularniejsze niż języki czysto funkcyjne. Umożliwiają one stosowanie zmiennych, pozwalają na efekty uboczne, tradycyjne wejście/wyjście i mieszanie stylu funkcyjnego z imperatywnym bądź obiektowym. Wartościowanie w nich jest przeważnie zachłanne.
Do grupy tej należą Lisp z wszystkimi pochodnymi (np. Clojure, Scheme), Erlang, Scala, języki grupy ML (Standard ML, OCaml, więc i bazujący na nim F#), tworzony przez polskich studentów język Nemerle. Ponadto elementy programowania funkcyjnego występują również w językach takich jak Java (od wersji 8), Python, Ruby, a nawet do pewnego stopnia Perl, JavaScript, D.
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Caya 2019 ↓, s. 168.
- ↑ Backfield 2014 ↓, s. 16.
Bibliografia
[edytuj | edytuj kod]- Joshua Backfield: Becoming Functional. O’Reilly Media, 2014. ISBN 978-1-4493-6817-3. (ang.).
- Andrew Caya: Szybsza sieć z językami PHP, MySQL i JavaScript. Gliwice: Grupa Wydawnicza Helion, 2019. ISBN 978-83-283-5521-7.
Linki zewnętrzne
[edytuj | edytuj kod]Strony w języku polskim:
- Programowanie funkcyjne (materiały dydaktyczne Uniwersytetu Warszawskiego na studia informatyczne II stopnia)
- Strona prostego funkcyjnego języka programowania
Strony w języku angielskim: