Category:Programming paradigm/Functional: Difference between revisions
Content added Content deleted
(Moved content from paradigms page) |
(tightened up language) |
||
Line 1: | Line 1: | ||
{{feature|Programming paradigm}}'''Functional programming''' treats functions as the fundamental first-class objects of the programming language. |
{{feature|Programming paradigm}}'''Functional programming''' treats functions as the fundamental first-class objects of the programming language. In addition: |
||
# State changes are encapsulated in function results, in this paradigm, rather than in side effects, as in [[imperative programming]] |
|||
# This makes dependencies explicit. |
|||
# This leads to [http://www.haskell.org/haskellwiki/Referential_transparency referential transparency] -- given the same arguments, a piece of code will always behave identically. |
|||
# Coding is '''compositional''' -- any two pieces of code with a matching 'interface', as specified by function domains, can be combined, because no hidden side-effects can intervene. (See [http://www.stanford.edu/class/cs242/readings/backus.pdf ''Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs''] by John Backus, 1977 Turing Award Lecture). |
|||
# It's easy to '''refactor''' similar pieces of code, because any subexpression can be replaced by a variable bound at the outside. |
|||
This leads to a coding style which is very different from more traditional languages. [[Iteration]] |
This leads to a coding style which is very different from more traditional languages. [[Iteration]] may be replaced by [[:Category:Recursion|tail-recursion]] or delegated to other functions. Lists become a very important datatype. Code often consists of a composition of simpler blocks, which makes it look similar to [[declarative programming]]. |
||
Most functional programming languages (FPLs) are related to the [[wp:Lambda_Calculus|lambda calculus]], which makes the specification of their formal semantics simpler. |
Most functional programming languages (FPLs) are related to the [[wp:Lambda_Calculus|lambda calculus]], which makes the specification of their formal semantics simpler. |