expr icon indicating copy to clipboard operation
expr copied to clipboard

Add switch expression syntax

Open antonmedv opened this issue 1 year ago • 5 comments

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 https://github.com/expr-lang/expr/issues/579#issuecomment-1970720918

antonmedv avatar Feb 29 '24 09:02 antonmedv

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".

vmihailenco avatar Aug 10 '24 07:08 vmihailenco

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.

antonmedv avatar Aug 10 '24 07:08 antonmedv

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.

vmihailenco avatar Aug 10 '24 08:08 vmihailenco

I see. This makes sense. 👍🏻

antonmedv avatar Aug 10 '24 08:08 antonmedv