Funtional Programming
In computer science, functional programming is a programming paradigm where
programs are constructed by applying and composing functions. It is a declarative
programming paradigm in which function definitions are trees of expressions that map
values to other values, rather than a sequence of imperative statements which update the
running state of the program.
In functional programming, functions are treated as first-class citizens, meaning that they
can be bound to names (including local identifiers), passed as arguments, and returned
from other functions, just as any other data type can. This allows programs to be written
in a declarative and composable style, where small functions are combined in a modular
manner.
Functional programming is sometimes treated as synonymous with purely functional
programming, a subset of functional programming which treats all functions as
deterministic mathematical functions, or pure functions. When a pure function is called
with some given arguments, it will always return the same result, and cannot be affected
by any mutable state or other side effects. This is in contrast with impure procedures,
common in imperative programming, which can have side effects (such as modifying the
program's state or taking input from a user). Proponents of purely functional
programming claim that by restricting side effects, programs can have fewer bugs, be
easier to debug and test, and be more suited to formal verification.[1][2]