Pure Functions in Javascript

3 min read

A pure function in JavaScript is a function concept that always returns the same result given the same arguments and produces no side effects. In other words, a pure function is a function that is deterministic and does not modify any external state.

In this article, we will explore what pure functions are, how they work, and why they are valuable.

What is a Pure Function?

In JavaScript, a pure function is a function that always produces the same output for the same input and has no side effects. In other words, given the same arguments, a pure function will consistently return the same result, and it won’t modify anything outside of its scope, such as global variables or external state.

Let’s look at an example of a basic pure function:

function add(a, b) {
  return a + b;
}

The add function is pure because it only depends on its arguments a and b, and it doesn’t change any variables outside of its scope.

Here is an another example of a pure function in javascript:

function factorial(n) {
  if (n === 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

This function returns the factorial value of a given number. It is also a pure function because it always returns the same result given the same arguments and does not modify any external state

Impure Functions and Pure Functions in Contrast

To better understand pure functions, it’s essential to contrast them with impure functions. Impure functions are those that have side effects, modify global variables, or rely on external state. Let’s look at an example of an impure function:

let total = 0;

function impureAdd(num) {
  total += num;
  return total;
}

The impureAdd function is impure because it modifies the total variable outside its scope. Additionally, it relies on the external state of total to compute the result.

Characteristics of Pure Functions

  • Deterministic: As mentioned earlier, pure functions always produce the same output for the same set of inputs. This property makes them predictable and reliable.
  • No Side Effects: Pure functions don’t modify external states or variables. They only perform computations based on their inputs and return a new value.
  • Referential Transparency: Because of their deterministic nature and lack of side effects, pure functions are referentially transparent. This means that you can replace a function call with its result without changing the program’s behavior.
  • Independence: Pure functions do not rely on any hidden or global state. Their output depends solely on their inputs.

Why Use Pure Functions?

  • Predictability: Pure functions are predictable since they always produce the same output for the same input. This predictability makes debugging and testing easier.
  • No Side Effects: By avoiding side effects, pure functions contribute to writing cleaner and more maintainable code. Bugs related to state modifications are reduced.
  • Concurrency and Parallelism: Pure functions are ideal for concurrent and parallel execution, as they don’t have any dependencies on shared state. This makes them suitable for functional programming in multi-threaded environments.
  • Memoization: Pure functions can be easily memoized. Memoization is a technique that stores the results of expensive function calls and returns the cached result when the same inputs occur again. This optimization can significantly improve performance.

Conclusion

In conclusion, pure functions are a powerful concept in JavaScript and functional programming. They are functions that produce consistent results based solely on their inputs, instead of relying on external state.

If you are writing JavaScript code, you should consider using pure functions whenever possible. Pure functions can make your code more reliable, efficient, and reusable.

Here are some tips for writing pure functions in JavaScript:

  • Use only the input arguments to calculate the return value.
  • Do not modify any external state.
  • Avoid using global variables or objects.
  • Use functions to encapsulate complex logic.

Thank you for reading.