1.0.9 • Published 5 years ago

z v1.0.9

Weekly downloads
327
License
Apache-2.0
Repository
github
Last release
5 years ago

z Native pattern matching for Javascript.

Build Status Coverage Status Dependency Status NPM version

Usage

  • Install via npm: npm install z
  • Require z in your code and use the matches function: const { matches } = require('z')

Avaiable Patterns

  • Matches by value: (x = 1) =>, (x = null) =>, (x = 'true') =>
  • Matches by object or array: (x = {a: 1}) =>, (x = [1, 2]) =>
  • Matches by type: (x = String) =>, (x = Boolean) =>
  • Matches by instance: (x = Date) =>, (x = Person) =>
  • Matches by splitting array into elements and tail (head, tail) => , (a, b, c, tail) =>, etc…

Examples

  • Example: Matches by Object property
const { matches } = require('z')

const person = { name: 'Maria' }
matches(person)(
  (x = { name: 'John' }) => console.log('John you are not welcome!'),
  (x)                    => console.log(`Hey ${x.name}, you are welcome!`)
)

//output: `Hey Maria, you are welcome!`
  • Example: Matches by type or instances
const { matches } = require('z')

const result = matches(1)(
  (x = 2)      => 'number 2 is the best!!!',
  (x = Number) => `number ${x} is not that good`,
  (x = Date)   => 'blaa.. dates are awful!'
)

console.log(result) // output: number 1 is not that good
  • Example: matches Array content

To match array content you need create multiple arguments for the match function, such as (a, b, c, tail) => {} , then each variable match each item from array. Note: last variable contains all remaining array items, formally named tail. Examples:

const { matches } = require('z')

matches(1, 2, 3, 4, 5)( (a, b, c, tail) => 'a = 1, b = 2, c = 3, tail = 4, 5'
)

matches(1, 2)( (a, tail) => 'a = 1, b = 2'
)

matches(1)( (a, b, tail) => 'Will not match here', (a = 2, tail = []) => 'Will not match here', (a = 1, tail = []) => 'Will match here, tail = []' )

- **Example:** Powerful recursive code which will remove sequential repeated items from Array.

> Can be mind blowing if it’s the first time you meet pattern matching, but you are gonna understand it!
```javascript
const { matches } = require('z')

const compress = (numbers) => {
  return matches(numbers)(
    (x, y, xs) => x === y
      ? compress([x].concat(xs))
      : [x].concat(compress([y].concat(xs))),
    (x, xs) => x // stopping condition
  )
}

compress([1, 1, 2, 3, 4, 4, 4]) //output: [1, 2, 3]

License

Apache 2.0

1.0.9

5 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

7 years ago

0.0.7

7 years ago

1.0.1

7 years ago

0.0.6

7 years ago

0.0.5

8 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2-alpha.1

8 years ago

0.0.2-alpha.0

8 years ago

0.0.1-alpha.0

8 years ago

0.0.0

9 years ago

1.0.0

9 years ago

0.0.1

12 years ago