ふと遅延評価の使い道をjs内で思いついたものの、
遅延評価を関数を使っていちいち()
を書きたくなかったので、どうにかならないか考えた。
理想としては
const hoge = new Lazy(document.getElementById('text').innerText)
みたいに書きたかったけど、思いついた限りだと
class Lazy {
constructor (func) {
this._innerFunc = func
this._value = undefined
}
get value () {
if (this._value === undefined) {
this._value = this._innerFunc()
}
return this._value
}
}
// 現実
const hoge = new Lazy(() => document.getElementById('text').innerText)
みたいになった。具体的な挙動は下記のjsfiddleに載せました。
定義通りvalue
を参照すると遅延評価を実行します。
おまけ(宣伝)
qiitaだけでなくブログもやっています。
こっちはメモで、向こうはpythonを中心にがっつりと書くって使い方をしています。