vue-lazy-calc
Version:
A simple calculator with lazy evaluation featuer
152 lines (113 loc) • 5.14 kB
Markdown
[](https://codecov.io/gh/dreambo8563/vue-lazy-calc)
[](https://app.codacy.com/app/dreambo8563/vue-lazy-calc?utm_source=github.com&utm_medium=referral&utm_content=dreambo8563/vue-lazy-calc&utm_campaign=Badge_Grade_Dashboard)
[](#contributors)
[](https://travis-ci.com/dreambo8563/vue-lazy-calc) [](https://greenkeeper.io/)
[](https://snyk.io/test/github/dreambo8563/vue-lazy-calc?targetFile=package.json)
[](https://opensource.org/licenses/MIT)


[](https://app.fossa.io/projects/git%2Bgithub.com%2Fdreambo8563%2Fvue-lazy-calc?ref=badge_shield)
# vue-lazy-calc

this is a just support simple calculation in lazy way.
(inspired by lodash)
**features**
- vue friendly
- strong typed
- lazy evaluation
- chaining methods
### TODO:
- [x] seperate simple lazy class from base class
- [x] support more operator in stream api
### Install
```cmd
npm install vue-lazy-calc --save
```
### Quick Start
```js
import lzCalc from "vue-lazy-calc"
Vue.use(lzCalc)
```
### Methods
- this.\$lzCalc in Component context.
- Vue.\$lzCalc in global.
### API list
#### base
```ts
export declare class LazyBase {
lazy(init?: number): LazyCalc
stream(s?: LazyCalc): LazyStream
}
```
- lazy => init a new instance with optional initValue
- stream => init a stream to operate between multiple lazy instance with optional init instantce
#### simple
```ts
export declare class LazyCalc {
add(y: number): LazyCalc
divide(y: number): LazyCalc
subtract(y: number): LazyCalc
multiply(y: number): LazyCalc
do(fn: operatorFunc): LazyCalc
ceil(precision?: number): LazyCalc
floor(precision?: number): LazyCalc
round(precision?: number): LazyCalc
default(fallback: any): LazyCalc
value(): any
}
```
- add/subtract/divide/multiple => + - \* / (simple calculation) between numbers
- round/floor/ceil => deal with precision of the float number
- value => excute the declared method chain
- default => set default value if previous operations get NaN
- do => accept a custormized function for the number
### Examples
(1+3)\*2/3 with precision 2
```js
const result = this.$lzCalc
.lazy(1)
.add(3)
.multiply(2)
.divide(3)
.round(2)
console.log(result.value()) // 2.67
const addThree = result.add(3)
console.log(addThree.value()) // 2.67+ 3 =>5.67
```
#### Stream
```ts
declare class LazyStream {
add(y: LazyCalc): LazyStream
subtract(y: LazyCalc): LazyStream
multiply(y: LazyCalc): LazyStream
divide(y: LazyCalc): LazyStream
round(precision?: number): LazyStream
ceil(precision?: number): LazyStream
floor(precision?: number): LazyStream
do(fn: operatorFunc): LazyStream
default(fallback: any): LazyStream
value(): any
}
```
```js
const result = this.$lzCalc
.lazy(1)
.add(3)
.multiply(2)
.divide(3)
.round(2)
const tmp = this.$lzCalc.lazy(2).add(3)
const s = this.$lzCalc.stream(result).add(tmp)
console.log(s.value()) // 2.67 + 5 => 7.67
```
1. when declare the result variable, no calculation excuted until value()
2. you can reuse the declare variable
## License
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fdreambo8563%2Fvue-lazy-calc?ref=badge_large)
## Contributors
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore -->
<table><tr><td align="center"><a href="https://dreambo8563.github.io/"><img src="https://avatars2.githubusercontent.com/u/6948318?v=4" width="100px;" alt="Vincent Guo"/><br /><sub><b>Vincent Guo</b></sub></a><br /><a href="https://github.com/dreambo8563/vue-lazy-calc/commits?author=dreambo8563" title="Code">💻</a> <a href="https://github.com/dreambo8563/vue-lazy-calc/commits?author=dreambo8563" title="Documentation">📖</a> <a href="#infra-dreambo8563" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td></tr></table>
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!