<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 6, 2016, at 10:08 AM, Paul Ossenbruggen via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I see what you are trying to do, because of the colon being both used for switch cases and separators for the ternary and so there needs to be a new character for each case. &nbsp;I am not sure that putting colons between each case is really necessary though. In my suggestion it is only used in the default case. It may also lead to confusion about when to use the ! since it becomes less “switch” label like. So using commas in the single line form does what I think you were trying to accomplish with the “:”:<div class=""><br class=""></div><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><span class="" style="white-space: pre;">        </span>let&nbsp;<span class="" style="color: rgb(227, 36, 0);">val</span>&nbsp;=&nbsp;<span class="" style="color: rgb(102, 156, 53);">color</span>&nbsp;? &nbsp;<span class="" style="color: rgb(153, 41, 189);">.Red</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFF0000,</span>&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Green</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x00FF00,</span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Blue</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x0000FF,&nbsp;</span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">_</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFFFFFF</span>&nbsp;</div></div></div></div></div><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;">Commas would be optional so that multiline does not get messy.</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><div style="font-family: Helvetica; font-size: 12px;" class=""><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><span class="" style="white-space: pre;">        </span>let&nbsp;<span class="" style="color: rgb(227, 36, 0);">val</span>&nbsp;=&nbsp;<span class="" style="color: rgb(102, 156, 53);">color</span>&nbsp;?&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Red</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFF0000</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><span class="Apple-tab-span" style="white-space:pre">                                </span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Green</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x00FF00</span>&nbsp;</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><span class="Apple-tab-span" style="white-space:pre">                                </span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Blue</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x0000FF</span></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><span class="" style="color: rgb(0, 97, 255);"><span class="Apple-tab-span" style="white-space:pre">                                </span>&nbsp;&nbsp;</span>&nbsp;<span class="" style="color: rgb(153, 41, 189);">_</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFFFFFF</span>&nbsp;</div></div></div></div></div></div></div></div></div></div></div></div></blockquote><div><br class=""></div><div>I haven’t thought about whether this syntax is actually possible or not (or whether it would introduce ambiguity). &nbsp;If it *is* possible this is much better than the approach with the parentheses. &nbsp;</div><div><br class=""></div><div>I do not like the idea of introducing an expression that requires the use of parentheses at all.</div><div><br class=""></div><div>One aspect of ternary that has been explicitly stated as an advantage is the fact that it chains well. &nbsp;Requiring parentheses around the expression would mean nested parentheses when chaining. &nbsp;This is something that should be *optional*, not *required*.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><div style="font-family: Helvetica; font-size: 12px;" class=""><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div></div></div></div></div><div style="font-family: Helvetica; font-size: 12px;" class=""><div dir="ltr" class=""><div class=""><div class=""></div></div></div></div></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;">This looks a lot like a combined ternary and switch. The : is not used for the switch expression because the _ case handles that and it is exhaustive.</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;">I still like the grouping the parens provide in my proposal though and it may be necessary to tell the parser when the switch expression ends.</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><div class="" style="margin: 0px; line-height: normal;"><span class="" style="white-space: pre;">        </span>let&nbsp;<span class="" style="color: rgb(227, 36, 0);">val</span>&nbsp;= ?(<span class="" style="color: rgb(102, 156, 53);">color,</span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Red</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFF0000</span></div><div class="" style="margin: 0px; line-height: normal;"><span class="Apple-tab-span" style="white-space: pre;">                                </span>&nbsp; &nbsp;<span class="" style="color: rgb(153, 41, 189);">.Green</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x00FF00</span>&nbsp;</div><div class="" style="margin: 0px; line-height: normal;"><span class="Apple-tab-span" style="white-space: pre;">                                </span>&nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Blue</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x0000FF</span></div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 97, 255);"><span class="Apple-tab-span" style="white-space: pre;">                                </span>&nbsp;&nbsp;</span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">_</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFFFFFF)</span>&nbsp;</div></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;">If having the conditional outside is preferred then</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><div class="" style="margin: 0px; line-height: normal;"><span class="" style="white-space: pre;">        </span>let&nbsp;<span class="" style="color: rgb(227, 36, 0);">val</span>&nbsp;= <span class="" style="color: rgb(102, 156, 53);">color ?(</span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Red</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFF0000</span></div><div class="" style="margin: 0px; line-height: normal;"><span class="Apple-tab-span" style="white-space: pre;">                                </span>&nbsp; &nbsp;<span class="" style="color: rgb(153, 41, 189);">.Green</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x00FF00</span>&nbsp;</div><div class="" style="margin: 0px; line-height: normal;"><span class="Apple-tab-span" style="white-space: pre;">                                </span>&nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">.Blue</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0x0000FF</span></div><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 97, 255);"><span class="Apple-tab-span" style="white-space: pre;">                                </span>&nbsp;&nbsp;</span>&nbsp;&nbsp;<span class="" style="color: rgb(153, 41, 189);">_</span>:&nbsp;<span class="" style="color: rgb(0, 97, 255);">0xFFFFFF)</span>&nbsp;</div></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;">I don’t think this solves some of the shortcomings of the ternary. One being it is hard to see where they start and end.</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(34, 34, 34); white-space: pre;">        </span><span class="" style="color: rgb(0, 97, 255);">let&nbsp;</span><span class=""><font color="#669c35" class="">val</font></span><span class="" style="color: rgb(0, 97, 255);">&nbsp;</span><span class=""><font color="#669c35" class="">=</font></span><span class="" style="color: rgb(0, 97, 255);">&nbsp;</span><span class="" style="color: rgb(102, 156, 53);">boo == scary&nbsp;</span><span class="" style="color: rgb(0, 97, 255);">&nbsp;?&nbsp;</span><font color="#0061ff" class="">0xFF0000</font><span class="" style="color: rgb(0, 97, 255);">&nbsp;:&nbsp;</span><font color="#0061ff" class="">0x00FF00</font></div></div></div></div><div class=""><div dir="ltr" class=""><div class=""><div class=""></div></div></div></div></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;">Visually it is hard to see that the = goes with boo or with boo == scary. But that does mean that in the boolean case we could leave the ternary completely as is. For comparison with the breaking change:&nbsp;</div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><br class=""></div><div class="" style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;"><div class="" style="margin: 0px; line-height: normal;"><div dir="ltr" class=""><div class=""><div class=""><div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(34, 34, 34); white-space: pre;">        </span><span class="" style="color: rgb(0, 97, 255);">let&nbsp;</span><span class=""><font color="#669c35" class="">val</font></span><span class="" style="color: rgb(0, 97, 255);">&nbsp;</span><span class=""><font color="#669c35" class="">=</font></span><span class="" style="color: rgb(0, 97, 255);"> ?(</span><span class="" style="color: rgb(102, 156, 53);">boo == scary,</span><span class="" style="color: rgb(0, 97, 255);">&nbsp;</span><font color="#0061ff" class="">0xFF0000</font><span class="" style="color: rgb(0, 97, 255);">&nbsp;:&nbsp;</span><font color="#0061ff" class="">0x00FF00)</font></div><div class="" style="margin: 0px; line-height: normal; color: rgb(0, 97, 255);"><br class=""></div></div></div></div><div class=""><div dir="ltr" class=""><div class=""><div class=""></div></div></div></div></div></div></div></div></div></div><div class=""><div class="">it is super clear the grouping here. However it is a breaking change so maybe better to leave it or allow both forms?</div><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jan 6, 2016, at 6:01 AM, Charles Constant &lt;<a href="mailto:charles@charlesism.com" class="">charles@charlesism.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I can't stop fiddling around with this... so here's another minor variation. My new new favourite, if we're doubling down on the ternary.&nbsp;<div class=""><br class=""></div><div class="">We could start with Paul's ternary example... but it seems more in keeping to me, with the existing ternary, to use a colon as a separator. If we do that, an exclamation point seems appropriate, and pretend that it's just how a ternary expression behaves when it's testing something extra-ternary (like a n enum with four possible cases)<div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; color: rgb(146, 146, 146);" class=""><span class="" style="color:rgb(34,34,34);white-space:pre">        </span>// Syntax when the value you’re testing is a Boolean</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; color: rgb(0, 97, 255);" class=""><span class="" style="color:rgb(34,34,34);white-space:pre">        </span><span style="" class="">let </span><span style="color:rgb(227,36,0)" class="">val</span><span style="" class=""> = </span><span style="color:rgb(102,156,53)" class="">boo</span><span style="" class=""> ? </span>0xFF0000<span style="" class=""> : </span>0x00FF00</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; min-height: 15px;" class=""><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; color: rgb(146, 146, 146);" class=""><span class="" style="color:rgb(34,34,34);white-space:pre">        </span>// Syntax when the value you’re testing is not Boolean</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;" class=""><span class="" style="white-space:pre">        </span>let <span style="color:rgb(227,36,0)" class="">val</span> = <span style="color:rgb(102,156,53)" class="">color</span> ? ( <span style="color:rgb(153,41,189)" class="">.Red</span> ! <span style="color:rgb(0,97,255)" class="">0xFF0000</span> ) : ( <span style="color:rgb(153,41,189)" class="">.Green</span> ! <span style="color:rgb(0,97,255)" class="">0x00FF00</span> ) : ( <span style="color:rgb(153,41,189)" class="">.Blue</span> ! <span style="color:rgb(0,97,255)" class="">0x0000FF</span> ) : ( <span style="color:rgb(153,41,189)" class="">_</span> ! <span style="color:rgb(0,97,255)" class="">0xFFFFFF</span> )</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; min-height: 15px;" class=""><br class=""></div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; color: rgb(146, 146, 146);" class=""><span class="" style="color:rgb(34,34,34);white-space:pre">        </span>// … Parens are not required, but probably unwise unless you format on multiple lines. Eg:</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;" class=""><span class="" style="white-space:pre">        </span>let <span style="color:rgb(227,36,0)" class="">val</span> = <span style="color:rgb(102,156,53)" class="">color</span> ?&nbsp;</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;" class=""><span class="" style="white-space:pre"><span class="">        </span>        </span><span style="color:rgb(153,41,189)" class="">.Red</span> ! <span class="" style="white-space:pre">        </span><span style="color:rgb(0,97,255)" class="">0xFF0000</span> :&nbsp;</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;" class=""><span class="" style="white-space:pre"><span class="">        </span>        </span><span style="color:rgb(153,41,189)" class="">.Green</span> ! <span class="" style="white-space:pre">        </span><span style="color:rgb(0,97,255)" class="">0x00FF00</span> :&nbsp;</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial;" class=""><span class="" style="white-space:pre"><span class="">        </span>        </span><span style="color:rgb(153,41,189)" class="">.Blue</span> ! <span class="" style="white-space:pre">        </span><span style="color:rgb(0,97,255)" class="">0x0000FF</span> :&nbsp;</div><div style="margin: 0px; font-size: 13px; line-height: normal; font-family: Arial; color: rgb(0, 97, 255);" class=""><span class="" style="color:rgb(34,34,34);white-space:pre">        </span><span style="" class=""><span class="" style="white-space:pre">        </span></span><span style="color:rgb(153,41,189)" class="">_</span><span style="" class=""> ! <span class="" style="white-space:pre">                </span></span>0xFFFFFF</div></div><div class=""><br class=""></div><div class="">I actually like this a lot because it's concise, and aesthetically in harmony with the normal ternary.</div><div class=""><br class=""></div><div class="">There's obvious downsides to using an exclamation point in Swift, but I think it's still pretty nice.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">&nbsp;&nbsp;</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Tue, Jan 5, 2016 at 11:41 PM, Paul Ossenbruggen via swift-evolution <span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word" class="">Heh, one other thought. Pretty sure this was rejected by the switch statement but if keeping it concise for expressions is a goal then _ might make sense for the default case especially with this form. :-)&nbsp;<div class=""><br class=""></div><div class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class="">let</span><font face="Menlo" class="">&nbsp;fh = ?(</font><span style="font-family:Menlo;color:rgb(79,129,135)" class="">color,</span><font face="Menlo" class="">&nbsp;.Red:&nbsp;</font><font color="#272ad8" face="Menlo" class="">0xFF0000&nbsp;</font><font face="Menlo" color="#669c35" class="">//&nbsp;only one expression can be the result here so case is unnecessary.</font><font color="#272ad8" face="Menlo" class="">&nbsp;</font><br class=""><span style="font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Green:</span><span style="font-family:Menlo" class="">&nbsp;</span><span style="font-family:Menlo;color:rgb(39,42,216)" class="">0x00FF00</span><br class=""><span style="font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Blue:</span><span style="font-family:Menlo" class="">&nbsp;</span><span style="font-family:Menlo;color:rgb(39,42,216)" class="">0x0000FF</span><br class=""><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFFFFFF</span>)&nbsp;<font color="#669c35" class="">// default is always last, unless all cases are handled.</font>&nbsp;</div></div></div></div><div class=""><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><br class=""></div></div></div></div></div><div class="">I agree with it being rejected for the statement form, but kinda makes sense here.&nbsp;</div><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jan 5, 2016, at 10:50 PM, Paul Ossenbruggen &lt;<a href="mailto:possen@gmail.com" target="_blank" class="">possen@gmail.com</a>&gt; wrote:</div><br class=""><div class=""><div style="word-wrap:break-word" class="">The thing I don’t like is the repeated use of case. and default. This, I think makes the expression longer than it needs to be. For expressions it is not necessary because you only have one expression which returns one value, where as in a statement you have multiple statements following it, so it is necessary to separate the cases with the word “case”. I think trying to reduce clutter is important.&nbsp;<div class=""><br class=""></div><div class="">For example, statements have to deal with multiple statements per case.&nbsp;</div><div class=""><br class=""></div><div class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(187,44,162)" class="">let</span> color = <span style="color:rgb(79,129,135)" class="">Colors</span>.<span style="color:rgb(49,89,93)" class="">Red</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;color:rgb(0,132,0)" class="">// hello</div><span class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(187,44,162)" class="">let</span> res : <span style="color:rgb(112,61,170)" class="">Int</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;color:rgb(187,44,162)" class="">switch<span class=""> </span><span style="color:rgb(79,129,135)" class="">color</span><span class=""> {</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; <span style="color:rgb(187,44,162)" class="">case</span> .Red:</div><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="white-space:pre-wrap" class="">        </span>res = <span style="color:rgb(39,42,216)" class="">0xFF0000</span></div></span><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(39,42,216)" class=""><span style="white-space:pre-wrap" class="">        </span>print(res) // case is necessary here to separate statement lists.&nbsp;</span></div><span class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; <span style="color:rgb(187,44,162)" class="">case</span> .Green:&nbsp;</div><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(79,129,135)" class=""><span style="white-space:pre-wrap" class="">        </span>res</span> =&nbsp; <span style="color:rgb(39,42,216)" class="">0x00FF00</span></div></span><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(39,42,216)" class=""><span style="white-space:pre-wrap" class="">        </span>print(res)</span></div><span class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; <span style="color:rgb(187,44,162)" class="">case</span> .Blue:&nbsp;</div><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(79,129,135)" class=""><span style="white-space:pre-wrap" class="">        </span>res</span> = <span style="color:rgb(39,42,216)" class="">0x0000FF</span></div></span><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(39,42,216)" class=""><span style="white-space:pre-wrap" class="">        </span>print(res)</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;color:rgb(187,44,162)" class="">default<span class="">:</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;color:rgb(39,42,216)" class=""><span class="">&nbsp; &nbsp; </span><span style="color:rgb(79,129,135)" class="">res</span><span class=""> = </span>0xFFFFFF</div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">}</div><div class=""><br class=""></div><div class="">This is why I went down the path of trying to group it with parenthesis and optionally remove the word case. I know it may seem a little less like a "switch" but I think having to write out “case" over and over is not great when it does not serve the same purpose as it does in the statement form. So in the compact form:&nbsp;</div><div class=""><br class=""></div><div class=""><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class="">let</span><font face="Menlo" class=""> fh = ?(</font><span style="font-family:Menlo;color:rgb(79,129,135)" class="">color,</span><font face="Menlo" class="">&nbsp;.Red: </font><font color="#272ad8" face="Menlo" class="">0xFF0000 </font><font face="Menlo" color="#669c35" class="">//&nbsp;only one expression can be the result here so case is unnecessary.</font><font color="#272ad8" face="Menlo" class="">&nbsp;</font></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;.Green: <span style="color:rgb(39,42,216)" class="">0x00FF00</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;.Blue: <span style="color:rgb(39,42,216)" class="">0x0000FF</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFFFFFF</span>) <font color="#669c35" class="">// default is always last, unless all cases are handled.</font>&nbsp;</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">This seems more light and more and just as understandable as Thorsten's suggestion. (Note: I keep playing with the separators because the feedback was, my latest suggestions were not Swift like). Also, it is possible to drop the “case" in this structure and it can be read more like a function if desired. My suggestion also supported this form but its only advantage is that it looks more like a “switch", there may be value in that but I think conciseness and less clutter should win:</div><div class=""><br class=""></div><div class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(187,44,162)" class="">let</span>&nbsp;fh = ?(<span style="color:rgb(79,129,135)" class="">color, case</span>&nbsp;.Red:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFF0000</span></div><span class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color:rgb(79,129,135)" class="">case</span>&nbsp;.Green:&nbsp;<span style="color:rgb(39,42,216)" class="">0x00FF00</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color:rgb(79,129,135)" class="">case</span>&nbsp;.Blue:&nbsp;<span style="color:rgb(39,42,216)" class="">0x0000FF</span></div></span><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <font color="#4f8187" class="">default</font>:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFFFFFF</span>)</div></div><div class=""><br class=""></div><div class="">Not sure though if people don’t like having alternatives forms though.</div><div class=""><br class=""></div><div class="">I think there is value in having a consistent way of doing index based as well as boolean based expressions as I have suggested in my proposal. I know that is a harder thing to push for but I think it is a win. I have backpedaled on some of my weirder character choices here so it more like the ternary.&nbsp;</div><div class=""><br class=""></div><div class=""><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class="">let</span><font face="Menlo" class=""> fb = ?(pickOne,&nbsp;</font><font color="#d12f1b" face="Menlo" class="">“A",</font><font face="Menlo" class="">&nbsp;</font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"B"</span><font face="Menlo" class="">, </font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"C"</span><font face="Menlo" class="">, </font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"D"</span><font face="Menlo" class="">, </font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"E"</span><font face="Menlo" class="">, </font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"F"</span><font face="Menlo" class="">, </font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"G</span><font face="Menlo" class=""><font color="#d12f1b" class="">”</font>&nbsp;:&nbsp;</font><span style="font-family:Menlo;color:rgb(209,47,27)" class="">"Z"</span><font face="Menlo" class="">)</font></div></div><div class=""><div style="margin:0px;line-height:normal" class=""><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class="">let</span><font color="#008400" style="font-family:Menlo" class=""> fe = ?(truthy == truth,&nbsp;</font><font color="#272ad8" class=""><font face="Menlo" class="">“unlikely</font></font><font class=""><font color="#272ad8" face="Menlo" class="">” :</font><font face="Menlo" color="#008400" class="">&nbsp;</font></font><font color="#272ad8" face="Menlo" class="">“likely"</font><font color="#008400" style="font-family:Menlo" class="">)</font></div><div style="font-family:Menlo;color:rgb(0,132,0)" class=""><br class=""></div></div></div><div class="">If you look at these suggestions above, I have only moved one ? added a comma, and added parenthesis to the ternary. I think these latest suggestions look more like Swift and more like the ternary than my last email.</div><div class=""><br class=""></div><div class="">If it is really preferred the control value could be moved outside the parens but I think it makes it harder to find the beginning and end of the ternary and it does not have the advantage of the function like feel to it:.&nbsp;</div><div class=""><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class=""><br class=""></span></div><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class="">let</span><font color="#008400" style="font-family:Menlo" class="">&nbsp;fe =&nbsp;</font><span style="color:rgb(0,132,0);font-family:Menlo" class="">truthy == truth&nbsp;</span><font color="#008400" style="font-family:Menlo" class="">?(</font><font color="#272ad8" class=""><font face="Menlo" class="">“unlikely</font></font><font color="#272ad8" face="Menlo" class="">” :</font><font face="Menlo" color="#008400" class="">&nbsp;</font><font color="#272ad8" face="Menlo" class="">“likely"</font><font color="#008400" style="font-family:Menlo" class="">)</font></div></div><div class=""><font color="#008400" style="font-family:Menlo" class=""><br class=""></font></div><div class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(187,44,162)" class="">let</span>&nbsp;fh =&nbsp;<span style="color:rgb(79,129,135)" class="">color&nbsp;</span>?(&nbsp;.Red:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFF0000</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Green:&nbsp;<span style="color:rgb(39,42,216)" class="">0x00FF00</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Blue:&nbsp;<span style="color:rgb(39,42,216)" class="">0x0000FF</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :&nbsp;<span style="color:rgb(39,42,216)" class="">0xFFFFFF</span>)&nbsp;</div></div><div class=""><br class=""></div><div class="">finally we could drop the parenthesis all together and the ternary is back in original form, which results in Thorsten’s suggestion minus the cases,</div><div class=""><div class=""><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class=""><br class=""></span></div><div style="margin:0px;line-height:normal" class=""><span style="font-family:Menlo;color:rgb(187,44,162)" class="">let</span><font color="#008400" style="font-family:Menlo" class="">&nbsp;fe =&nbsp;</font><span style="color:rgb(0,132,0);font-family:Menlo" class="">truthy == truth&nbsp;</span><font color="#008400" style="font-family:Menlo" class="">?&nbsp;</font><font color="#272ad8" class=""><font face="Menlo" class="">“unlikely</font></font><font color="#272ad8" face="Menlo" class="">” :</font><font face="Menlo" color="#008400" class="">&nbsp;</font><font color="#272ad8" face="Menlo" class="">“likely"</font></div></div></div><div class=""><font color="#008400" style="font-family:Menlo" class=""><br class=""></font></div><div class=""><div class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class=""><span style="color:rgb(187,44,162)" class="">let</span>&nbsp;fh =&nbsp;<span style="color:rgb(79,129,135)" class="">color&nbsp;</span>? .Red:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFF0000</span></div><span class=""><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Green:&nbsp;<span style="color:rgb(39,42,216)" class="">0x00FF00</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Blue:&nbsp;<span style="color:rgb(39,42,216)" class="">0x0000FF</span></div><div style="margin:0px;line-height:normal;font-family:Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:&nbsp;<span style="color:rgb(39,42,216)" class="">0xFFFFFF</span>&nbsp;</div></span></div></div><div class=""><br class=""></div><div class="">I think the parenthesis and the control inside the construct really help and this may be hard to parse without the grouping the parenthesis provides. I don’t think we are that far apart though.&nbsp;</div><div class=""><br class=""></div><div class="">- Paul&nbsp;</div><div class=""><div class=""><div class=""><br class=""></div></div></div></div></div></div></blockquote></div><br class=""></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=l3fs1g-2F466j3y5fD5Q61KddsTTCmXL0uxw3XoAMFFNgU0tX6c1ofiXFbZlOFKogd7CeXqZEaaCYoXd8hHh8k6rfo-2BRTd643OJAY-2FgKuzZWdMm-2BBnX5f46nzzL8zsttqNfilyOPNCp5XJJOKNt5rrnH-2F18sfxJYn8Ww2DPnOppfLKkt1eRxCIrLmRLhJWLS9ujSppxJpv2ltGUhMoRUeRhisCg-2BrgSPfWdscpgL82ew0-3D" alt="" width="1" height="1" border="0" style="min-height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class="">
</div>
<br class="">_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
<br class=""></blockquote></div><br class=""></div></div></div>
</div></blockquote></div><br class=""></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=eLFMrKDT8iBxZ-2Fbnk-2BZqvSchNN-2FvYXdceA0T7VxwkAcqxSWR-2FWfW4UQ6nfxym3iXEHygLbUS-2F6QzQAaYfzbhkYrvVLDxTcCM-2B0ho7b-2Fbu1yzw8H-2FiYfOKPrMWQ2NFVgoVdTy-2F0PSLD5pDN3PFs9AWKRhyPhCj4O154NWtgVUVL5WzvDa8N-2BYdfSz-2F3kzNlBIM1lt-2FKsvMGtz-2BSwER6950JQUnVXtrN0woysApL4KpDk-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>