| id | predicate |
|---|---|
| lesson | 24 |
| title | Reactive Programming - Operators and functions (Part 1) |
| layout | default |
| class | post |
| preview_image | predicate/content_preview.jpg |
| preview_image_alt | project function vs predicate function |
In Reactive Programming, operators take one or several input streams and return a new stream. Some operators may accept additional arguments, such as functions:
- project function,
- predicate function,
- accumulator function, etc.
These functions don't have to work with the input or the output stream: they usually just transform, compare or combine values. The operators do work with the streams, in conjunction with these functions.
How you label a function (eg. "project" or "predicate" function) depends on how you use it.
A function that:
- takes several
values - and returns one
new valueof any type
may be used as a project function on combining operators (eg. combineLatest or zip).
A function that:
- takes one
value - and returns one
new valueof any type
may be used as a project function with map.
A function that:
- takes one
value - and returns one
new valueof typeboolean(✔ trueor✘ false)
may be used as a predicate function on filtering operators (eg. filter, takeWhile or skipWhile)
As you may have noticed, a function used as a predicate can also be used as project function on a map operator:
In this example, the function n ⟶ n == 1, that returns ✔ true or ✘ false, is used both as an argument for map as a project and for filter as a predicate. As a result:
- map returns a new stream of
booleanvalues, according to the result of this project function - filter returns a new stream of filtered values, where the values can pass only if this predicate returns
✔ true
- Some operators may accept functions as arguments. These functions don't have to work with the input or the output stream. The operators do.
- How you label a function (eg. "project" or "predicate" function) depends on how you use it. A function is not a project or predicate function in itself.

{:.w300}
{:.w300}