<div dir="ltr"><div>&gt; Some other nice things about using it as the default or else is that </div><div>&gt; you can support syntaxes like the zero based index based one.<br></div><div><br></div>I admit I&#39;m in the &quot;non goal&quot; camp for that one. A choice based on unlabeled index is something I actively try to avoid, because it makes code brittle (because if you ever revise the arrangement of elements in your code, you must remember to also manually change the index).<div><br></div><div>But if we implement that, I&#39;d still prefer colon as separator. All we do is make it case-by-case. </div><div><br></div><div>Eg:</div><div><br></div><div><span style="font-size:13px;font-family:Menlo;color:rgb(187,44,162)">let</span><font face="Menlo" style="font-size:13px"> fb = pickOne ? </font><font color="#d12f1b" face="Menlo" style="font-size:13px">“A&quot; </font><span style="font-family:Menlo;font-size:13px">:</span><font face="Menlo" style="font-size:13px"> </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;B&quot; </span><font face="Menlo" style="font-size:13px">: </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;C&quot; </span><span style="font-family:Menlo;font-size:13px">:</span><font face="Menlo" style="font-size:13px"> </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;D&quot; </span><span style="font-family:Menlo;font-size:13px">:</span><font face="Menlo" style="font-size:13px"> </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;E&quot; </span><span style="font-family:Menlo;font-size:13px">:</span><font face="Menlo" style="font-size:13px"> </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;F&quot; </span><span style="font-family:Menlo;font-size:13px">:</span><font face="Menlo" style="font-size:13px"> </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;G</span><font face="Menlo" style="font-size:13px"><font color="#d12f1b">”</font> : _ ! </font><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)">&quot;Z&quot;</span></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)"><br></span></div><div><span style="font-size:13px;font-family:Menlo;color:rgb(209,47,27)"><br></span></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><div><br></div><div> </div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 6, 2016 at 10:05 PM, Paul Ossenbruggen <span dir="ltr">&lt;<a href="mailto:possen@gmail.com" target="_blank">possen@gmail.com</a>&gt;</span> wrote:<br><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">I suppose that you could interpret : as a separator, or you could interpret it as else or default. I have chosen the latter. It is up to us to decide how to interpret it because the ternary only has true and false. <div><span style="font-family:Menlo;color:rgb(187,44,162)"><br></span></div><div><span style="font-family:Menlo;color:rgb(187,44,162)">let</span><font color="#008400" style="font-family:Menlo"> fe = truthy == truth ? </font><font color="#272ad8"><font face="Menlo">“unlikely</font></font><font><font color="#272ad8" face="Menlo">” :</font><font face="Menlo" color="#008400"> </font></font><font color="#272ad8" face="Menlo">“likely”</font></div><div><br></div><div>Some other nice things about using it as the default or else is that you can support syntaxes like the zero based index based one.</div><div><br></div><div><div><div style="margin:0px;line-height:normal"><span style="font-family:Menlo;color:rgb(187,44,162)">let</span><font face="Menlo"> fb = pickOne ? </font><font color="#d12f1b" face="Menlo">“A&quot;,</font><font face="Menlo"> </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;B&quot;</span><font face="Menlo">, </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;C&quot;</span><font face="Menlo">, </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;D&quot;</span><font face="Menlo">, </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;E&quot;</span><font face="Menlo">, </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;F&quot;</span><font face="Menlo">, </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;G</span><font face="Menlo"><font color="#d12f1b">”</font> : </font><span style="font-family:Menlo;color:rgb(209,47,27)">&quot;Z&quot;</span></div></div><div><div style="margin:0px;line-height:normal"><div style="margin:0px;line-height:normal"><br></div></div></div><div>this may be a non goal for some but I really think it could come in handy. Where the “Z” is selected if not 0-6. If we use the colon as the default or else case then this is possible. This does not break with the ternary tradition if you interpret the colon as default or else. </div><div><br></div><div>Also, nicely, the switch form does not conflict with the last colon if we use the underscore to exhaustively list the cases because it technically does not need the : to be the default. So in that form, you would not have the default. </div><div><br></div><div>Also, I agree with the sentiment that i would rather get something than nothing, even if that means having to have  the redundancy of cases and default: but I really don’t like extra boilerplate and there is a risk that it won’t seem as big a win if you have to list all the cases out. </div><div><div class="h5"><div><br></div><div><br></div><div><br><blockquote type="cite"><div>On Jan 6, 2016, at 9:07 PM, Charles Constant &lt;<a href="mailto:charles@charlesism.com" target="_blank">charles@charlesism.com</a>&gt; wrote:</div><br><div><div dir="ltr">Hi Paul, <div><br></div><div>My opinion, atm, is that &quot;:&quot; as a separator is the best solution. True, it&#39;s not <b>Swift-like</b>, but neither is the existing ternary, which Chris wants to keep. On then other hand, &quot;colon as separator&quot; is extremely <b>ternary-like</b>. </div><div><br></div><div>So benefits of &quot;colon as separator&quot; as I see them: </div><div><br></div><div>- Syntax is <b>easy to remember</b> (as long as you&#39;re used to writing ternary expressions)</div><div>- Extremely <b>compact</b> syntax</div><div>- Each component is demarked by a special character, which I&#39;m pretty sure makes any <b>chaining</b> possible</div><div>- <b>Easy to &quot;market&quot;</b> as a &quot;new modification of ternary expressions in Swift&quot; rather than a brand new construct </div><div>- <b>Somewhat intuitive</b>. The compact form and cryptic symbols mean a ternary isn&#39;t going to be self explanatory. But at least there&#39;s a call and response sort of logic to &quot;condition <b>?</b>&quot; followed by &quot;case <b>!</b>&quot;</div><div><br></div><div>That said, I don&#39;t want to dig my heels in about &quot;colon as separator&quot; version. If others don&#39;t like it, I support *any* version we&#39;ve discussed in this thread, switch-like or ternary-like. As long as it means we do away with a preceding variable declaration and some of the repeated boilerplate... that&#39;s the important thing for me.<br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>  </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 6, 2016 at 8:35 PM, Paul Ossenbruggen <span dir="ltr">&lt;<a href="mailto:possen@gmail.com" target="_blank">possen@gmail.com</a>&gt;</span> wrote:<br><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">Hi Charles,<div><br></div><div>Chris, already said he did not like ? being used for ternary because it was already used for optionals. I think because of historical precedent it may be acceptable here.  I have tried combos earlier with ! and got no support, admittedly not with the same usage as yours. </div><div><br></div><div>Do you really find it confusing not having a separator there? It is essentially a switch case without the word “case”. In my model the colon only indicates the “else” or “default” case, the other cases are separated by commas or whitespace. With my email taking the Swift Book examples and converting it from statement to expression form, I did not find any of them confusing, well maybe the first one, which found vowels and consonants, but that did not look that great in statement form either. . </div><div><br></div><div>if so maybe the | would be better as the separator because it would not change the switch like syntax:</div><div><br></div><div><div style="font-family:Menlo;margin:0px;line-height:normal;color:rgb(0,132,0)"><span><div style="margin:0px;line-height:normal"><span style="color:rgb(187,44,162)">let</span><span> numberSymbol: </span><span style="color:rgb(112,61,170)">Character</span><span> = </span><span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;PingFang SC&#39;;color:rgb(209,47,27)">三</span><span style="color:rgb(209,47,27)">&quot;</span><span>  </span>// Simplified Chinese for the number 3</div><div style="margin:0px;line-height:normal"><span style="color:rgb(187,44,162)">let</span> possibleIntegerValue:<span style="color:rgb(112,61,170)">Int</span>? = <span style="color:rgb(79,129,135)">numberSymbol</span> ?</div></span><span><div style="margin:0px;line-height:normal">   | <span style="color:rgb(209,47,27)">&quot;1&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;Courier New&#39;;color:rgb(209,47,27)">١</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;PingFang SC&#39;;color:rgb(209,47,27)">一</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:Ayuthaya;color:rgb(209,47,27)">๑</span><span style="color:rgb(209,47,27)">&quot;</span>: <span style="color:rgb(39,42,216)">1</span></div><div style="margin:0px;line-height:normal">   | <span style="color:rgb(209,47,27)">&quot;2&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;Courier New&#39;;color:rgb(209,47,27)">٢</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;PingFang SC&#39;;color:rgb(209,47,27)">二</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:Ayuthaya;color:rgb(209,47,27)">๒</span><span style="color:rgb(209,47,27)">&quot;</span>: <span style="color:rgb(39,42,216)">2</span></div><div style="margin:0px;line-height:normal">   | <span style="color:rgb(209,47,27)">&quot;3&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;Courier New&#39;;color:rgb(209,47,27)">٣</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;PingFang SC&#39;;color:rgb(209,47,27)">三</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:Ayuthaya;color:rgb(209,47,27)">๓</span><span style="color:rgb(209,47,27)">&quot;</span>: <span style="color:rgb(39,42,216)">3</span></div><div style="margin:0px;line-height:normal">   | <span style="color:rgb(209,47,27)">&quot;4&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;Courier New&#39;;color:rgb(209,47,27)">٤</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:&#39;PingFang SC&#39;;color:rgb(209,47,27)">四</span><span style="color:rgb(209,47,27)">&quot;</span>, <span style="color:rgb(209,47,27)">&quot;</span><span style="line-height:normal;font-family:Ayuthaya;color:rgb(209,47,27)">๔</span><span style="color:rgb(209,47,27)">&quot;</span>: <span style="color:rgb(39,42,216)">4</span></div><div style="margin:0px;line-height:normal">   |  <span style="color:rgb(187,44,162)">_</span> : <span style="color:rgb(187,44,162)">nil</span></div><div style="margin:0px;line-height:normal"><br></div></span><span><div style="margin:0px;line-height:normal;color:rgb(79,129,135)"><span style="color:rgb(187,44,162)">if</span><span> </span><span style="color:rgb(187,44,162)">let</span><span> integerValue = </span>possibleIntegerValue<span> {</span></div><div style="margin:0px;line-height:normal;color:rgb(209,47,27)"><span>    </span><span style="color:rgb(61,29,129)">print</span><span>(</span>&quot;The integer value of <span>\</span>(<span style="color:rgb(79,129,135)">numberSymbol</span>) is <span>\</span>(<span>integerValue</span>).&quot;<span>)</span></div><div style="margin:0px;line-height:normal">} <span style="color:rgb(187,44,162)">else</span> {</div><div style="margin:0px;line-height:normal;color:rgb(209,47,27)"><span>    </span><span style="color:rgb(61,29,129)">print</span><span>(</span>&quot;An integer value could not be found for <span>\</span>(<span style="color:rgb(79,129,135)">numberSymbol</span>).&quot;<span>)</span></div><div style="margin:0px;line-height:normal">}</div></span></div><span><div style="font-family:Menlo;margin:0px;line-height:normal;color:rgb(0,132,0)">// prints &quot;The integer value of <span style="line-height:normal;font-family:&#39;PingFang SC&#39;">三</span> is 3.”</div></span></div><div><br></div><div>But I still don’t see it a necessary.  perhaps that would allow removal of the parenthesis and I think this would get rejected as not looking very Swift like. Also single line form which isn’t bad:</div><div><br></div><div><span><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">        </span>let val = color ? </b><span style="color:rgb(227,36,0)"><b>.Red:</b></span><b> 0xFF0000 | </b><span style="color:rgb(227,36,0)"><b>.Green:</b></span><b> 0x00FF00 | </b><b> </b><span style="color:rgb(227,36,0)"><b>.Blue:</b></span><b> 0x0000FF</b><b> | </b><span style="color:rgb(227,36,0)"><b>_:</b></span><b> 0xFFFFFF</b></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><br></div></span><div>But still not sure the | adds that much.</div><div><br></div><div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">        </span>let val = color ? </b><span style="color:rgb(227,36,0)"><b>.Red:</b></span><b> 0xFF0000, </b><span style="color:rgb(227,36,0)"><b>.Green:</b></span><b> 0x00FF00, </b><b> </b><span style="color:rgb(227,36,0)"><b>.Blue:</b></span><b> 0x0000FF, </b><b> </b><span style="color:rgb(227,36,0)"><b>_:</b></span><b> 0xFFFFFF</b></div><div><br></div>Or this is without the commas is still readable but maybe a little harder:</div><span><div><br></div><div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">        </span>let val = color ? </b><span style="color:rgb(227,36,0)"><b>.Red:</b></span><b> 0xFF0000 </b><span style="color:rgb(227,36,0)"><b>.Green:</b></span><b> 0x00FF00 </b><b> </b><span style="color:rgb(227,36,0)"><b>.Blue:</b></span><b> 0x0000FF </b><b> </b><span style="color:rgb(227,36,0)"><b>_:</b></span><b> 0xFFFFFF</b></div><div><b><br></b></div></div></span><div>One other thing, I would still prefer the control value inside the brace rather than out front, but I see that most people still want it out front and since it would be a breaking change for ternary, I have kind of backed off it but I think this is still clearer because the control value is not floating out in front. </div><div><br></div><div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">        </span>let val =  ?(color, </b><span style="color:rgb(227,36,0)"><b>.Red:</b></span><b> 0xFF0000, </b><span style="color:rgb(227,36,0)"><b>.Green:</b></span><b> 0x00FF00, </b><b> </b><span style="color:rgb(227,36,0)"><b>.Blue:</b></span><b> 0x0000FF, </b><b> </b><span style="color:rgb(227,36,0)"><b>_:</b></span><b> 0xFFFFFF)</b></div><div><div><div><b><br></b></div><blockquote type="cite"><div>On Jan 6, 2016, at 7:06 PM, Charles Constant &lt;<a href="mailto:charles@charlesism.com" target="_blank">charles@charlesism.com</a>&gt; wrote:</div><br><div><div dir="ltr"><div><div><div style="font-size:13px;margin:0px;line-height:normal;font-family:Arial"><span style="font-family:arial,sans-serif;font-size:small">&gt; </span><span style="font-family:arial,sans-serif">I see what you are trying to do, because of the colon being both used for switch cases and </span><br></div></div></div><div><span style="font-size:13px">&gt; separators for the ternary and so there needs to be a new character for each case.  </span></div><div><span style="font-size:13px">&gt; I am not sure that putting colons between each case is really necessary though.</span></div><div><span style="font-size:13px"><br></span></div><div>Most of us (including you and I) like a form that starts with &quot; let val = condition ? &quot; like the existing ternary. Let&#39;s say a proposal like that gets accepted... I really believe &quot;colons as separators&quot; is the best idea in the case. Otherwise, it gets pretty confusing.. we&#39;ll have the existing ternary where a colon does one thing, and our new &quot;extra ternary&quot; where it does something else. </div><div><br></div><div>This is why I like colons (this won&#39;t make sense unless your email has rich text to show the colors): </div><div><br></div><div><div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">        </span>let val = color ? </b></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">                </span></b><span style="color:rgb(227,36,0)"><b>.Red !</b></span><b> <span style="white-space:pre-wrap">        </span>0xFF0000 : </b></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">                </span></b><span style="color:rgb(227,36,0)"><b>.Green !</b></span><b> <span style="white-space:pre-wrap">        </span>0x00FF00 : </b></div><p style="font-size:13px;margin:0px;line-height:normal;font-family:Arial">


</p><div style="margin:0px;font-size:13px;line-height:normal;font-family:Arial;color:rgb(96,96,96)"><b><span style="white-space:pre-wrap">                </span></b><span style="color:rgb(227,36,0)"><b>_ !</b></span><b> <span style="white-space:pre-wrap">                </span>0xFFFFFF</b></div></div></div><div><b><br></b></div><div>... no syntax here different from the existing except the addition &quot; <span style="font-family:Arial;font-size:13px;color:rgb(227,36,0)"><b>.Red !</b></span><span style="font-size:13px;font-family:Arial"> </span>&quot;. As for the exclamation... Swift already uses an exclamation for a billion other things, which is unfortunate. But the same can be said of &quot;?&quot; and that&#39;s already used in a &quot;switch&quot; without causing confusion. </div><div><span style="font-size:13px"><br></span></div><div><div style="font-size:13px;margin:0px;line-height:normal;font-family:Arial">&gt; To point 1: I agree it needs a new name, I came up with the “demux expression” </div><div style="font-size:13px;margin:0px;line-height:normal;font-family:Arial">&gt; but maybe there is a better name.<br></div></div><div><span style="font-size:13px"><br></span></div><div>Has anyone suggested &quot;multiary expression&quot; yet? Seems in keeping with &quot;ternary&quot;<br></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px"><br></span></div><div><br></div></div>
</div></blockquote></div></div></div><br></div></div></blockquote></div><br></div>
</div></blockquote></div><br></div></div></div></div></blockquote></div><br></div></div></div>