Programowanie funkcyjne: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
m WP:SK, poprawa łącza
Linia 1:
'''Programowanie funkcyjne''' (lub '''programowanie funkcjonalne''') - filozofia i metodologia [[programowanie|programowania]] będąca odmianą [[programowanie deklaratywne|programowania deklaratywnego]], w której funkcje należą do wartości podstawowych, a nacisk kładzie się na [[wartościowanie]] (często [[rekurencja|rekurencyjnych]]) funkcji, a nie na wykonywanie poleceń.
 
W czystym programowaniu funkcyjnym, raz zdefiniowana funkcja zwraca zawsze tą samą wartość dla danych wartości argumentów, tak jak prawdziwe funkcje matematyczne.
 
== Historia ==
Podstawą teoretyczną programowania funkcyjnego jest opracowany w latach 30. XX wieku przez [[Alonzo Church]]a [[rachunek lambda]], a dokładnie [[rachunek lambda z typami]].
 
Pierwszym funkcyjnym językiem programowania był [[IPL|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]].
Linia 18:
Do tej grupy należą języki, w których nie występują zmienne ani [[Skutek uboczny (informatyka)|efekty uboczne]], a wartościowanie jest [[wartościowanie leniwe|leniwe]].
 
Wejście/wyjście w takich językach musi się odbywać jakimś alternatywnym mechanizmem, np. za pomocą [[monadymonada (informatyka)|monad]].
 
Przedstawiciele tej podgrupy to [[Haskell]] oraz [[Clean]].
Linia 25:
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 [[programowanie imperatywne|imperatywnym]] bądź [[programowanie obiektowe|obiektowym]]. Wartościowanie w nich jest przeważnie [[wartościowanie zachłanne|zachłanne]].
 
Do grupy tej należą [[Lisp|LISP]] z wszystkimi pochodnymi (np. [[Clojure]], [[Scheme]]), [[Erlang (język programowania)|Erlang]], [[Scala_Scala (j%C4%99zyk_programowaniajęzyk programowania)|Scala]], języki grupy [[Meta Language|ML]] ([[Standard ML]], [[ocaml]], więc i bazujący na nim [[F sharp|F#]], tworzony przez polskich studentów język [[Nemerle]], a także języki, w których elementy funkcyjne nie są aż tak ważne, jak [[Python]], [[Ruby (język programowania)|Ruby]], a nawet do pewnego stopnia [[Perl]], [[JavaScript]], [[D (język programowania)|D]].
 
== Linki zewnętrzne ==