# functional programming: domains and ranges

2021-09-22

|

|

359 words

The domain of a function is the set of inputs for which a function is defined.

The range of a function is the set of values that are mapped to the function’s domain.

Total functions have a few attributes related to domains and ranges:

1. For every value in the domain, there’s a value in the range.
2. For every value in the domain, there is a unique match in the range.

## Complete

Let’s look at some examples:

``const add = (x: number, y: number): number => x + y``

The `add` function’s domain is all numbers and that maps to a range which includes all numbers.

This variation of add is total.

On the other hand, we could have `addSome`:

``const addSome = (x: 1 | 2 | 3, y: 1 | 2 | 3): 2 | 3 | 4 | 5 | 6 => x + y``

This is also a total function. Every member of the domain maps to a value in the range. It could also be written as:

``const addSome = (x: 1 | 2 | 3, y: 1 | 2 | 3): number => x + y``

``````const addSome = (x: number, y: number): number => {
if (1 <= x && x <= 3) {
return x + y
}
}``````

This is partial because the domain is any number, but there are values within the domain for which there’s no return value.

## Unique

The other attribute of a total function is that the domain maps to a unique value in the range.

This means that every time you use a set of inputs, you get the same output.

In other words, this won’t qualify as a function:

random
``const random = (x: number): number => (Math.random() ? 1 : 2)``

## Wrap Up

This is not meant to be an exhaustive review of domains, ranges, and set theory, but a primer. Hopefully it helps clarify some ideas!

If you’d like more, MathIsFun.com has a good write up on Domains, Ranges, and Codomains which is worth a look.

Hi there and thanks for reading! My name's Stephen. I live in Chicago with my wife, Kate, and dog, Finn. Want more? See about and get in touch!