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 switch expression syntax #586

Open
antonmedv opened this issue Feb 29, 2024 · 4 comments
Open

Add switch expression syntax #586

antonmedv opened this issue Feb 29, 2024 · 4 comments

Comments

@antonmedv
Copy link
Member

antonmedv commented Feb 29, 2024

image I see the point!

But implementing it as function not the best solution. As it will require to evaluate all conditions and cases before choosing a correct one.

We need to create a proper switch syntax in Expr.

Originally posted by @antonmedv in #579 (comment)

@vmihailenco
Copy link

I have nothing against having a switch statement, but ClickHouse also has multiIf function with short-circuit-function-evaluation. It is often more readable than a switch and addresses your concerns about "evaluate all conditions and cases before choosing a correct one".

@antonmedv
Copy link
Member Author

While switch statement is easy to understand and implement, maybe we need to consider adding "match" expression instead.

Or to make expr closer to golang and implement switch in the exact same semantics.

@vmihailenco
Copy link

Or to make expr closer to golang and implement switch in the exact same semantics.

I very much would like to see multi-line expressions happen, so it would make sense to have switches to be an expression as well, e.g. in Ruby:

case x
when 1..5
  "It's between 1 and 5"
when 6
  "It's 6"
when "foo", "bar"
  "It's either foo or bar"
else
  "You gave me #{x} -- I have no idea what to do with that."
end

The key point is that it evaluates to an expression. The syntax does not matter.

@antonmedv
Copy link
Member Author

I see. This makes sense. 👍🏻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants