[swift-evolution] ternary operator ?: suggestion

J. Cheyo Jimenez cheyo at masters3d.com
Sun Dec 6 13:03:35 CST 2015


I do like the idea of leaving the if else as an statement because it
may simplify things. Ideally the new ternary syntax would exclude the
question mark and colon. Without introducing new keywords, it could work
something like the following.

let result = where condition switch x else y

let result2 = where x < y switch 1 else where y == x switch 2 else 3






On Sunday, December 6, 2015, Alex Lew via swift-evolution <
swift-evolution at swift.org> wrote:

> What if we left the if { ...} else { ... } syntax alone (as a statement),
> and updated the ternary expression to be a more general pattern matching
> expression (closer to "switch")? Something like
>
> let x = condition ?
>    true: "Hello"
>    false: "Goodbye"
>
> let x = optionalValue ?
>    .Some(let unwrapped): "Hello, \(unwrapped)"
>    .None: "To Whom It May Concern"
>
> let myFavoriteColor = yourFavoriteColor ?
>     .Blue: .Red
>     .Green: .Blue
>     .Red: .Green
>
> let quadrant = (x, y) ?
>     let (x, y) where x < 50 && y < 50: "top left"
>     let (x, y) where x < 50 && y > 50: "bottom left"
>     let (x, y) where x > 50 && y < 50: "top right"
>     default: "bottom right"
>
> The colon comes from the fact that this is sort of a light-weight
> expression-based "switch" statement, where each branch can only contain an
> expression, not a series of statements.
>
> This is very similar to pattern matching expressions in languages like
> Haskell, ML, and Coq.
>
> On Sun, Dec 6, 2015 at 11:25 AM, Thorsten Seitz <thorsten.seitz at web.de
> <javascript:_e(%7B%7D,'cvml','thorsten.seitz at web.de');>> wrote:
>
>> Am 06.12.2015 um 01:28 schrieb Alex Lew via swift-evolution <
>> swift-evolution at swift.org
>> <javascript:_e(%7B%7D,'cvml','swift-evolution at swift.org');>>:
>>
>> I don't think you can just get rid of the if statement in favor of an
>> expression. You still want to be able to do this:
>>
>> if (condition) {
>>     funcWithSideEffectsThatReturnsInt()
>> } else {
>>     funcWithSideEffectsThatReturnsString()
>> }
>>
>> but that's not a valid expression (what is its type?).
>>
>>
>> That would actually be no problem if Swift’s type system would have union
>> types (Ceylon has union and intersection types which are quite awesome and
>> enable lots of nice things quite naturally, see
>> http://ceylon-lang.org/documentation/1.2/tour/types/).
>>
>> In that case the type of such an expression would just be the union of
>> both types, which is written Int | String in Ceylon.
>>
>> -Thorsten
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151206/2a70ecc7/attachment.html>


More information about the swift-evolution mailing list