In imperative programming, functions are used to represent the behavior of an object. In object-oriented programming, the behavior usually implies side effects. For the purposes of this book, we can understand side effects as follows—a function is side-effecting when it modifies the environment outside its own body. For example, it can have a global variable of its parent object modified, it can write a file into the filesystem, or the function can perform some web API calls over the network.
In functional programming, the understanding of functions is quite different. In functional programming, we prise purity and referential transparency. Purity means the absence of side effects. Referential transparency means that the result value the function has computed can be substituted in place of the function call, while the semantics of the...