<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="">I think pick…from may address many of the negatives listed by Chris. with the if..then..else approach.<div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><span class="" style="float: none; display: inline !important;">The closest proposal I’ve seen is the “if cond then value1 else value2” syntax, however that has serious (IMO) problems:</span><br class=""></blockquote><br class=""><blockquote type="cite" class=""><span class="" style="float: none; display: inline !important;">- It is substantially more verbose than ?:, so much so that it obscures the logic that was trying to be captured. &nbsp;Simple things like this become swallowed in syntax:</span><br class=""><span class="" style="float: none; display: inline !important;">&nbsp;&nbsp;let x = cond ? 4 : 8</span><br class=""><span class="" style="float: none; display: inline !important;">&nbsp;&nbsp;let x = if cond then 4 else 8</span><br class=""></blockquote><div class=""><br class=""></div>this suggestion would still be longer, you can’t beat 2 chars. It is shorter than if..then..else though. Not sure there are any good options that can beat the conciseness of the ternary without replacing it with more syntax.</div><div class=""><br class=""></div><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class="" style="margin: 0px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;x = pick cond from <font color="#d12f1b" class="">4</font>,&nbsp;<span class="" style="color: rgb(209, 47, 27);">8</span></div></div></div><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class="" style="margin: 0px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(209, 47, 27);"><br class=""></span></div></div></div></div><blockquote type="cite" class=""><br class=""><span class="" style="float: none; display: inline !important;">- Because it looks like an if statement, people will end up writing it like:</span><br class=""><br class=""><span class="" style="float: none; display: inline !important;">let x = if cond then</span><br class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space: pre;">        </span><span class="" style="float: none; display: inline !important;">some_long_expression</span><br class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><span class="" style="float: none; display: inline !important;">&nbsp;&nbsp;&nbsp;else</span><br class=""><span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space: pre;">        </span><span class="" style="float: none; display: inline !important;">some_other_long_expression</span><br class=""></blockquote><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><span class="" style="float: none; display: inline !important;">&nbsp;- it only accepts expressions, not statements. &nbsp;The way it is flowed makes it look like a statement.</span><br class=""><span class="" style="float: none; display: inline !important;">&nbsp;- It is now force indenting a lot, which just looks weird and isn’t precedented in Swift.</span></blockquote><br class=""></div><div class="">By having a new keyword, we can define the format and there is no prior connotation with it.&nbsp;</div><br class=""><blockquote type="cite" class=""><br class=""><span class="" style="float: none; display: inline !important;">When this happens, we now have new problems:&nbsp;</span><br class=""><span class="" style="float: none; display: inline !important;">&nbsp;- At a glance, it “looks” like an if statement, but it is semantically different.</span><br class=""></blockquote><div class=""><br class=""></div>Since it is a new it will always look like something that handles expressions only.&nbsp;</div><div class=""><div class=""><br class=""></div><div class="">Also this pick…from statement can be extended to handle switch expressions as well. So it is consistent way to do different expressions based upon an input.&nbsp;</div><div class=""><br class=""></div><div class="">Some downsides:&nbsp;</div><div class="">new keyword</div><div class="">no prior history with other programming languages.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Dec 15, 2015, at 4:31 PM, Paul Ossenbruggen &lt;<a href="mailto:possen@gmail.com" class="">possen@gmail.com</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="">Been thinking a bit:<div class=""><br class=""></div><div class="">Perhaps a new expression is in order. “Pick” this has a form like this. Param is a selector &nbsp;This only allows expressions&nbsp;</div><div class=""><br class=""></div><div class="">It has two forms:&nbsp;</div><div class=""><br class=""></div><div class="">To replace ternary:&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>&nbsp;x = pick val from&nbsp;<span style="color: rgb(209, 47, 27);" class="">"abc"</span>,&nbsp;<span style="color: rgb(209, 47, 27);" class="">"cdef"</span></div><div style="margin: 0px; line-height: normal; font-family: Menlo; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; font-family: Menlo; min-height: 14px;" class="">To replace switch expressions. The cases follows existing rules for switch cases.&nbsp;</div><div style="margin: 0px; line-height: normal; font-family: Menlo; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><span style="color: rgb(187, 44, 162);" class="">let</span>&nbsp;y = pick val from cases .Red:&nbsp;<span style="color: rgb(39, 42, 216);" class="">1</span>, .Green:&nbsp;<span style="color: rgb(39, 42, 216);" class="">2</span>, .Blue:&nbsp;<span style="color: rgb(39, 42, 216);" class="">3</span></div></div><div class=""><span style="color: rgb(39, 42, 216);" class=""><br class=""></span></div><div class="">This keeps the notion of expressions and statements quite separate. It avoids syntax confusion. It reads clear. It is fairy concise. It uses a straight forward pattern for both forms of expression.&nbsp;</div><div class=""><br class=""></div><div class="">- Paul</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class="">On Dec 15, 2015, at 2:06 PM, Charles Constant 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=""><div dir="ltr" class=""><div class=""><div class="">+1 bigtime for the assignment via Switch proposal</div><div class=""><br class=""></div><div class="">I think someone here made the argument, I can't remember who, that it would be confusing for beginners. I think exactly the opposite.&nbsp;</div><div class=""><br class=""></div><div class="">Once a new programmer has learned how to write a normal Switch statement, they'll be able to "leverage" the same concept and map values using the Switch assignment. Some might even try it on their on own, through experimentation, to see if it will work. It's such a pleasant experience when you try something in a language that seems consistent with what you already know, and discover "cool, it works!"</div><div class=""><br class=""></div><div class="">At the moment, the alternatives are, what, using a dict to map values? trying to shoehorn a corrsponding set of values into an enum? using the existing switch statement (pretty verbose in Swift, due to "let" scope etc)? In my own Swift code, I have encountered situations, frequently, where I wished I had an equivalent to a ternary condition that handled more than two values. Chaining multiple ternary conditions together is unreadable. This proposed Switch assignment expression would take care of that.&nbsp;</div><div class=""><br class=""></div><div class="">Definitely has my vote!</div><div class=""><br class=""></div><div class="gmail_extra"></div></div></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=emrIhnP1hIf76Foxxv4NNJQX-2FWhcznESwKBSwD1MEwxiM0wxa3Eidlta26BoCkLrzEEM5gqpjcqwPHugOGYVJHSh0Cjz6WEph83xry-2BaIR0W-2BKDcO90DaStUsyF4iNqood42gQEqgflqw3Fj-2FmcGmt1jP83W0hWaer61T4MeYAxfNwGCNPrBIQq5Enp0s7XgYWXO2b1v4iMMuQ1IJj7zUuWxD2B7iN4zwx9avyCtGYo-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="">
_______________________________________________<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" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></body></html>