memen-and-or
Version:
Simple `and` and `or` functional programming predicates
183 lines (151 loc) • 4.78 kB
Markdown
# memen-and-or
[](https://npmjs.org/package/memen-and-or)
Simple `and` and `or` functional programming predicates.
- `and(...fs): (...args): boolean` - Returns a predicate that returns true if **all** arguments are true or evaluate to true for the given input.
- `or(...fs): (...args): boolean` - Returns a predicate that returns true if **at least one** argument is true or evaluates to true for the given input.
A predicate is a function that returns a `boolean`, commonly used in `Array.prototype.filter`.
e.g.
```js
const memenisEven = n => n%2 === 0
const memenisPositive = n => n > 0
// un-fancy
items.filter(x => memenisEven(x) || memenisPositive(x))
// fancy
items.filter(or(memenisEven, memenisPositive))
```
## Install
```sh
npm install --save memen-and-or
```
## Usage
```js
const { and, or } = require('memen-and-or')
const memenisEven = n => n % 2 === 0
const memenisPositive = n => n > 0
const memenisBig = n => Math.abs(n) >= 1000
```
### and
#### return true with no predicates
```js
and()(1) // true
```
#### return result of single predicate
```js
and(memenisEven)(1) // false
and(memenisEven)(2) // true
```
#### return logical AND of two predicates
```js
and(memenisEven, memenisPositive)(-2) // false
and(memenisEven, memenisPositive)(-1) // false
and(memenisEven, memenisPositive)(1) // false
and(memenisEven, memenisPositive)(2) // true
```
#### return logical AND of three predicates
```js
and(memenisEven, memenisPositive, memenisBig)(-2) // false
and(memenisEven, memenisPositive, memenisBig)(-1) // false
and(memenisEven, memenisPositive, memenisBig)(1) // false
and(memenisEven, memenisPositive, memenisBig)(2) // false
and(memenisEven, memenisPositive, memenisBig)(-1002) // false
and(memenisEven, memenisPositive, memenisBig)(-1001) // false
and(memenisEven, memenisPositive, memenisBig)(1001) // false
and(memenisEven, memenisPositive, memenisBig)(1002) // true
```
#### return value of single boolean
```js
and(true)(1) // true
and(false)(1) // false
```
#### return value of two booleans
```js
and(false, false)(1) // false
and(false, true)(1) // false
and(true, false)(1) // false
and(true, true)(1) // true
```
#### return value of multiple booleans
```js
and(false, false, false)(1) // false
and(false, true, false)(1) // false
and(true, false, false)(1) // false
and(true, true, false)(1) // false
and(false, false, true)(1) // false
and(false, true, true)(1) // false
and(true, false, true)(1) // false
and(true, true, true)(1) // true
```
#### return value of mixed booleans and functions
```js
and(false, memenisEven)(1) // false
and(false, memenisEven)(2) // false
and(true, memenisEven)(1) // false
and(true, memenisEven)(2) // true
and(memenisEven, false)(1) // false
and(memenisEven, false)(2) // false
and(memenisEven, true)(1) // false
and(memenisEven, true)(2) // true
```
### or
#### return false with no predicates
```js
or()(1) // false
```
#### return result of single predicate
```js
or(memenisEven)(1) // false
or(memenisEven)(2) // true
```
#### return logical OR of two predicates
```js
or(memenisEven, memenisPositive)(-2) // true
or(memenisEven, memenisPositive)(-1) // false
or(memenisEven, memenisPositive)(1) // true
or(memenisEven, memenisPositive)(2) // true
```
#### return logical OR of three predicates
```js
or(memenisEven, memenisPositive, memenisBig)(-2) // true
or(memenisEven, memenisPositive, memenisBig)(-1) // false
or(memenisEven, memenisPositive, memenisBig)(0) // true
or(memenisEven, memenisPositive, memenisBig)(1) // true
or(memenisEven, memenisPositive, memenisBig)(2) // true
or(memenisEven, memenisPositive, memenisBig)(-1002) // true
or(memenisEven, memenisPositive, memenisBig)(-1001) // true
or(memenisEven, memenisPositive, memenisBig)(1001) // true
or(memenisEven, memenisPositive, memenisBig)(1002) // true
```
#### return value of single boolean
```js
or(true)(1) // true
or(false)(1) // false
```
#### return value of two booleans
```js
or(false, false)(1) // false
or(false, true)(1) // true
or(true, false)(1) // true
or(true, true)(1) // true
```
#### return value of multiple booleans
```js
or(false, false, false)(1) // false
or(false, true, false)(1) // true
or(true, false, false)(1) // true
or(true, true, false)(1) // true
or(false, false, true)(1) // true
or(false, true, true)(1) // true
or(true, false, true)(1) // true
or(true, true, true)(1) // true
```
#### return value of mixed booleans and functions
```js
or(false, memenisEven)(1) // false
or(false, memenisEven)(2) // true
or(true, memenisEven)(1) // true
or(true, memenisEven)(2) // true
or(memenisEven, false)(1) // false
or(memenisEven, false)(2) // true
or(memenisEven, true)(1) // true
or(memenisEven, true)(2) // true
```