This is great. Here is my take on it. <div><br></div><div>Should these be two proposals? One for the if-then-else expression and one for the switch expression?</div><div>I think the proposal would have a better chance if it is focused first on replacing ?: with if-then-else. It is a very emotional change for a lot of people. At the end of the proposal you could just briefly mention the switch expression possibility (I like Al&#39;s suggestions.)</div><div><br></div><div>If the if then else expression gets approved and implemented then it would be easier to get a switch expression using the then keyword imo but I do think we need to include it in the proposal but as a future implementation and/or possibility. </div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><br>On Saturday, December 12, 2015, Paul Ossenbruggen via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>Hello All, </div><div><br></div><div>Been sick in bed all day, but decided to try to be productive…</div><div><br></div>I did a rough draft of a proposal for implementing if expressions and switch expressions based upon the discussions we had here. I have tried to keep the scope of the changes as small as possible,  only added one keyword and kept things as similar to the existing language constructs as possible. If anyone wants to help me with this, or has feedback, please let me know,<div><br></div><div><a href="https://github.com/possen/swift-evolution/blob/master/0020.md" target="_blank">https://github.com/possen/swift-evolution/blob/master/0020.md</a></div><div><br></div><div>Thanks,</div><div>- Paul</div><div><br><div><br></div><div><br><div><blockquote type="cite"><div>On Dec 12, 2015, at 3:51 PM, Paul Ossenbruggen &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;possen@gmail.com&#39;);" target="_blank">possen@gmail.com</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word">Implied in using the  “then&quot;, if…then…else would aways require “else&quot; when using “then” similar to how “guard&quot; requires “else”. This  will help to make the difference between statements and expressions clear.<div><br></div><div>let x = If cond then X else Y</div><div><br></div><div>is the full form, where “else&quot; can not be omitted. </div><div><br></div><div><blockquote type="cite"><div>On Dec 12, 2015, at 12:59 PM, Paul Ossenbruggen &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;possen@gmail.com&#39;);" target="_blank">possen@gmail.com</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word"><div><br></div><br><div><blockquote type="cite"><div>On Dec 12, 2015, at 12:37 PM, Andrey Tarantsov via swift-evolution &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;swift-evolution@swift.org&#39;);" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word"><div>1. I would really hate to explain to someone when <b>if</b> needs a <b>then</b> and when it doesn&#39;t. That&#39;s the sort of inconsistency that shouldn&#39;t be added lightly.</div></div></div></blockquote><div><br></div><div>agreed definitely want to be careful with that. I think with braces meaning statements that differentiation can be made clear. I would certainly start with statements when describing, just as you usually don’t talk about the ternary operator until later. </div></div><div><br><blockquote type="cite"><div><div style="word-wrap:break-word"><div>3. If we can somehow solve all of this, I think I&#39;ll be +1 for replacing (A ? B : C) with some sort of (<b>if</b> A <b>then</b> B <b>else</b> C).</div></div></div></blockquote><div><br></div>Yes that would be great.</div><div><br><blockquote type="cite"><div><div style="word-wrap:break-word"><div><br></div><div>4. Generally, I wonder how hard would it be for all statements to be usable as expressions? Why didn&#39;t Swift go that way from the start?</div></div></div></blockquote><div><br></div><div>The biggest problem statement is you don’t need to exhaustively specify every outcome:</div><div><br></div><div>if cond {</div><div><span style="white-space:pre-wrap">        </span>print(“hello”)</div><div>}</div><div><br></div><div>whereas in an expression you have to specify what happens in the else.</div><div><br></div><div>let say = if cond then “hello” else “goodbye&quot;</div></div><div><br></div><div>unless you go seriously off the deep end:</div><div><br></div><div>let say = if cond then “hello” </div><div><br></div><div> “say&quot; then becomes an optional, *shudder*</div><div><br></div><div><br></div></div></div></blockquote></div><br></div></div></blockquote></div><br></div></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=OWK4tSasaK2n-2FQIIcS9Ug-2FuFXG-2BJ3z6cFMLgm306hDfq0Zu7qOB7D-2FqpbP8beei9GBOq2COJ5wjEe-2FJTduG28lVM7gr8ZPkq7Rwl0qpQsyNUJ4pWsps6xO6lfOXz5UCUOxXk-2FqTISEiplkvzPn4IxZwGnPCBwd5tLN1qNtSOorWcK4NzFrh-2BzdzV0xq4O3-2FKHPHrzsoqxfqcXSHj1b-2Ba3X60MkT9wjhPJDlOVU6P8Z0-3D" alt="" width="1" height="1" border="0" style="min-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">
</div>
</blockquote></div>