Skip to content

Rename $derived.call to $derived.lazy #10334

Closed
@Rich-Harris

Description

@Rich-Harris

Describe the problem

In #10240 we added $derived.call(fn) alongside $derived(expression), and somehow overlooked the fact that Function.prototype.call is a thing.

Strictly speaking this is fine — these are runes, not functions, and we can do what the hell we want. But realistically this is going to be a source of confusion at best and annoyance at worst for many people.

Describe the proposed solution

Programmers often talk about 'lazy evaluation', which basically means providing a function to compute some value rather than the value itself.

Even though the under-the-hood mechanism of $derived is that it's always lazy, meaning that this...

let value = $derived(expression);

...is syntactic sugar for this...

let value = $derived.call(() => expression);

...I think the conceptual framing is the right one. I therefore propose $derived.lazy:

let a = $derived(expression); // evaluated eagerly
let b = $derived.lazy(() => expression); // evaluated lazily

We'll also need to add an error message for anyone who is already using $derived.call, of course.

Importance

would make my life easier

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions