@joookiwi/lazy
v1.4.0
Published
A Javascript implementation of the Kotlin lazy
Downloads
18
Maintainers
Readme
Lazy (javascript version)
Table of content
This project is a simple implementation of the Kotlin Lazy. And if in any shape or form, there is a NPM usage from the Kotlin team itself, this will become deprecated.
With that clarified, here is how it can be used.
Installation
npm install @joookiwi/lazy
npm i @joookiwi/lazy
npm install --save @joookiwi/lazy
npm i -S @joookiwi/lazy
npm install --save-dev @joookiwi/lazy
npm i -D @joookiwi/lazy
Usage
The usage is similar to the kotlin usage like val value by lazy { someValue }
in kotlin
as well as the non-lazy implementation like val value = lazyOf(someValue)
.
But since there is no apparent dependency toward this specifically. Here is a simple implementation of the lazy via 2 functions
lazy
to load the value laterlazyOf
to have aLazy
but with an already loaded value
Lazy value
Using the lazy value will always return a Lazy
object holding a value.
import {lazy} from "@joookiwi/lazy"
const firstValue = lazy(() => 2)
firstValue.isInitialized // false
firstValue.value // 2
firstValue.isInitialized // true
Non-lazy value
If the value is already known, then just use lazyOf()
in order to have a Lazy
with an already loaded value.
import {lazyOf} from "@joookiwi/lazy"
const firstValue = lazyOf(2)
firstValue.isInitialized // true
firstValue.value // 2
firstValue.isInitialized // true
Common lazy
When using the lazy methods, it always creates a new instance.
But, there could be some cases where an already known value is there.
Here is the full list of the common Lazy
instances:
| Value | With string | With character | With BigInt |
|----------------------------------------------------|:------------|:---------------|:------------|
| null
| yes | | |
| undefined
| yes | | |
| true
/ false
| yes | | |
| -1
/ 0
/ 1
/ 2
| yes | yes | yes |
| NaN
/ Infinity
/ -Infinity
| yes | | |
| ln(2)
/ ln(10)
| | | |
| log₂(E)
/ log₁₀(E)
| | | |
| E
, PI
| | | |
|
/ \t
/ \n
| | yes | |
| epoch / now / tomorrow / yesterday | | | |
| invalid Date | yes | | |
| empty String → ''
| | | |
| empty object → Readonly<{}>
| | | |
| empty Array → readonly []
| | | |
| empty Set → ReadonlySet<never>
| | | |
| empty WeakSet → Readonly<WeakSet<never>>
| | | |
| empty Map → ReadonlyMap<unknown, never>
| | | |
| empty WeakMap → Readonly<WeakMap<object, never>>
| | | |
Contribution
You can contribute to great simple packages. All with similar behaviour across different languages (like Java, Kotlin, C# and PHP). It can be done 2 different ways: