Lazy evaluation
Andrea Giammarchi
andrea.giammarchi at gmail.com
Thu Aug 31 13:39:00 UTC 2017
the following is how I usually consider lazy values
```js
class Any {
_lazy(name) {
switch (name) {
case 'uid': return Math.random();
// others ... eventually
}
}
get uid() {
var value = this._lazy('uid');
// from now on, direct access
Object.defineProperty(this, 'uid', {value});
return value;
}
}
const a = new Any;
a.uid === a.uid; // true
```
If I understand correctly your proposal is to use Lazy as generic
descriptor, is that correct ?
```js
Object.defineProperty({}, 'something', new Lazy(function (val) {
return this.shakaLaka ? val : 'no shakaLaka';
}));
```
???
If that's the case I see already people confused by arrow function
in case they need to access the context,
plus no property access optimization once resolved.
It's also not clear if such property can be set again later on (right now
it cannot)
'cause lazy definition doesn't always necessarily mean inability to
reassign.
What am I missing/misunderstanding?
Regards
On Thu, Aug 31, 2017 at 2:21 PM, Isiah Meadows <isiahmeadows at gmail.com>
wrote:
> It'd be really nice if lazy values made it into the spec somehow. I've
> already found myself using things like this [1] quite a bit, and I've
> also found myself frequently initializing properties not on first
> access.
>
> [1]: https://gist.github.com/isiahmeadows/4c0723bdfa555a1c2cb01341b323c3d4
>
> As for what would be a nice API, maybe something like one of these?
>
> ```js
> class Lazy<T> {
> constructor(init: () => T);
> get(): T; // or error thrown
> }
>
> function lazy<T>(init: () => T): () => T; // or error thrown
>
> function lazy<T>(init: () => T): {
> get(): T; // or error thrown
> }
> ```
>
> Alternatively, syntax might work, with `do` expression semantics:
>
> ```js
> const x = lazy do { ... }
> // expose via `x.get()` or just `x()`
> ```
>
> -----
>
> Isiah Meadows
> me at isiahmeadows.com
>
> Looking for web consulting? Or a new website?
> Send me an email and we can get started.
> www.isiahmeadows.com
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170831/bd420401/attachment.html>
More information about the es-discuss
mailing list