Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a conditional state object #378

Open
dphfox opened this issue Aug 31, 2024 · 3 comments
Open

Add a conditional state object #378

dphfox opened this issue Aug 31, 2024 · 3 comments
Assignees
Labels
enhancement New feature or request not ready - design wanted Good idea but needs design work

Comments

@dphfox
Copy link
Owner

dphfox commented Aug 31, 2024

Partial alternative to #377.

A more specific state object may be introduced for simple conditions:

local animShow = scope:If(show, 0.0, 1.0)

This would allow lazy evaluation of arguments.

@dphfox dphfox added enhancement New feature or request not ready - design wanted Good idea but needs design work labels Aug 31, 2024
@dphfox dphfox self-assigned this Aug 31, 2024
@dphfox dphfox moved this to Todo in Fusion - Road to 1.0 Aug 31, 2024
@znotfireman
Copy link
Contributor

znotfireman commented Sep 9, 2024

My I recommend the name Switch or Toggle to match other libraries (e.g. Vide has the switch utility)

@dphfox
Copy link
Owner Author

dphfox commented Sep 11, 2024

We generally look to align with Luau, not outside libraries.

As a case study of why we don't do this, we originally aligned Value's naming with React - "State" - and it brought no material benefit. Instead, it just confused everyone, even though ostensibly React was serving UI developers all the same.

So we name things based on Luau as a general universal baseline, rather than imposing knowledge requirements on our users to understand what names mean.

In this case, both "Switch" and "Toggle" sound more like actions or stateful objects. Instead, this object represents a control flow expression. So the name instead tries to mirror Luau's if expression.

@Raild3x
Copy link
Contributor

Raild3x commented Feb 13, 2025

Perhaps this could be used in conjunction with the chaining behaviors described in #414 ?

local animShow = show:If(0.0, 1.0)

It could potentially support other common shorthand things that are in the same vein of conditional and relational operators:

local isEqual = a:Eq(b)
local isLessThan = a:LessThan(b)
etc...

The one major issue I see with potentially doing this is that people might accidentally try and create these inside of computeds like so:

scope:Computed(function(use)
    return if use(a:Eq(b)) then 1 else 0
end) 

Another alternative might be to have an If object allow for chaining specifically to itself in these instances. Perhaps some like:

local result = scope:If(age):LessThan(18):Then("Is Child"):Else("Is Adult")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request not ready - design wanted Good idea but needs design work
Projects
Development

No branches or pull requests

3 participants