Functional Programming Introduction and Resources

While most programming languages consist of inputs, outputs and external variables that can be set or used from inside its functions, functional programming avoids this.

The idea behind functional programming is that every time a function is called with the same parameters, it should return the same value.

What Makes Functional Programming "Functional"?

Consider a function that returns the current temperature. It is passed only one variable that indicates whether the temperature should be returned in degrees Celsius or Fahrenheit.

The function then uses internal logic to return the current temperature — perhaps by reading a temperature sensor. This is not considered to be functional programming because each time the function is used, it has the potential to return a different value, even when the function inputs are the same.

Function Parameters

Functional programming languages have first-class functions. This means the function can be used as if it were the value that it is returning.

For example, consider the function, double(x), which returns twice the value of its input parameter. So double(2) would return 4. Given that it is a first class function, the code, double(double(2)), would be the same as the code, double(4).

As with the example, this allows nesting one function as a parameter of another and so on.

Functional programming languages also allow functions to take functions as passed variables. Note that this involves the function itself being passed, rather than just the results of the function.

Common uses

Functional programming excels at implementing complex mathematical modeling; for this reason, one of the main uses of functional languages has traditionally been academic.

Many functional languages also excel when implementing parallel processing. This is due to their ability to take advantage of pure functions always returning the same value regardless of the order they are run.

Other languages need to worry about race conditions — where one function is run before the variable it uses is set to the expected value.

Functional Methodology

Many programming languages that are not functional can be used with functional programming methodology.

This developmental approach can give most of the benefits of imperative programming and functional programming. Some of the benefits that you tend to lose are the built-in abilities to help maintain purity leaving the developer with that responsibility.

Some languages are actually designed with a hybrid of methodologies along with functional programming removing some or all of these drawbacks.

History

Lambda Calculus is arguably the first computer language, and it is a functional language. It was first developed by Alonzo Church.

Interestingly, this language was first created in the 1930s — well before programmable computers existed. In 1958 John McCarthy, a professor at the Massachusetts Institute of Technology's (MIT), created LISP, which was modeled after lambda calculus and is one of the most important functional languages.

There are still many versions of LISP being used today — some more functional than others.

Languages That Support Functional Programming

  • D was designed after C++ to get all the benefits while removing the perceived weaknesses of being backward compatible with C.

  • Elixir was derived and sits on top of Erlang using its ability to create h

    ighly concurrent applications while making the language easier to write and maintain.
  • Erlang is highly-scalable and concurrent making it ideal for telecommunication and other applications that receive massive amounts of data in an unpredictable order.

  • F# is an open source multi-paradigm language that is often used within the

    .NET framework. It is commonly used for rapid development of analytical software.
  • Haskell is a pure functional language which uses Lambda Calculus.

  • ML is used in mathematical, scientific, financial, analytical and other types of applications. One of its strengths is for making software for manipulating other programs.

  • OCaml or Objective Caml, is a free, open sourced language which was based on Caml. It tends to create very light weight programs which helps them load and run more quickly than those created in other languages.

  • Scala was designed to be easily integrated into Java and other object oriented languages. Scala takes advantage of functional programming, allowing it to be used in distributed and concurrent applications.

  • Scheme was based on the syntax of LISP and the structure of ALGOL. Due to its simplicity, Scheme is used as an introduction to program design in many computer science courses to show some of computer programming fundamentals.

  • Swift was designed with the goal of being fault tolerant, quick to develop in, and expressive.

Resources

Functional programming resources are usually focused on a particular language, like Scala. But even when they are, they provide valuable information. So don't be shy just because an article or book uses a language that you don't use.

Tutorials

Books

Summary

Although functional programming is very good for some applications, many programmers find the ease of imperative languages, much easier to wrap their heads around.

But for mathematical and more formal coding, functional programming is a good choice. And understanding the principles of functional programming can be of great use to all programmers.


Further Reading and Resources

We have more guides, tutorials, and infographics related to coding and development:

What Code Should You Learn?

Confused about what programming language you should learn to code in? Check out our infographic, What Code Should You Learn?

It not only discusses different aspects of the languages, it answers important questions such as, "How much money will I make programming Java for a living?"