<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=""><div class="">It is pretty cool your example that works with the existing Swift and I agree with your assessment of it, but good to know.&nbsp;</div><div class=""><br class=""></div><div class="">I would prefer not to have the brackets in the expressions if possible, Bracket seem a little weird to me inside of an expression. This could also serve to further differentiate a statement vs expression in people’s minds. If the rule is use braces for statements, and no brackets for expressions. &nbsp;If we needed to use something like a bracket, parenthesis seem more natural for an expression but I think it is better avoid the need for them if possible. Also, not having brackets or parenthesis looks cleaner to me. The commas allow the statement continue without having braces or parenthesis. Keep in mind compounded expressions, having required braces in this example would make it much harder to read:</div><div class=""><br class=""></div><div class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class=""><div class="" style="line-height: normal;">let v = switch val then .Red: 1, .Green: (if specialGreen then 5 else 2), .Blue: (switch shade then .DarkBlue: 6, .LightBlue: 7, default: 9), default: 4</div><div class=""><br class=""></div></div></div></div></div></div><div class="">Use of “then" for the switch expression kind of works if we also want to drop the “case:”. We could use another keyword like “cases” but in general the consensus is to avoid adding keywords unless necessary and “then” with this suggestion, would already be added for “if”. To explore this idea a bit:</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=""><div class="" style="line-height: normal;">let v = switch val cases: .Red: 1, .Green: 2, .Blue: 3, default: 4</div></div></div></div></div><div class=""><br class=""></div><div class="">this might be more in line with the existing “switch...case” syntax. It seems that this should also work in statements:</div><div class=""><br class=""></div><div class="">switch val {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>cases:<span class="Apple-tab-span" style="white-space: pre;">        </span>.Red: func1(),</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                        </span>.Green: func2(),</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                        </span>.Blue: func3(),</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>default:&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>func4()</div><div class="">}</div><div class=""><br class=""></div><div class="">This is kind of nice because it reduces the repetition of the word “case:” as well as decreasing visual clutter present in a switch statement. Going back to the expression, it would also be possible to write it like this, if preferred:&nbsp;</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=""><div class="" style="line-height: normal;">let v = switch val case: .Red: 1, case: .Green: 2, case: .Blue: 3, default: 4</div><div class="" style="line-height: normal;"><br class=""></div><div class="" style="line-height: normal;">For consistency “cases:” could be allowed here...from your example:</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="">enum Col { <b class="">cases:</b> Red, Green, Blue }</div><div class=""><br class=""></div><div class="">I suppose as an alternative rather than adding the plural of “case” just use “case:” because it is an existing keyword, as in this example but I think it reads clearer with the plural.&nbsp;</div><div class=""><br class=""></div><div class=""><br class=""></div></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=""><br class=""></div></div></div></div></div></div></div></div><div><blockquote type="cite" class=""><div class="">On Dec 12, 2015, at 11:15 AM, Al Skipp &lt;<a href="mailto:al_skipp@fastmail.fm" class="">al_skipp@fastmail.fm</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=""><div class=""><blockquote type="cite" class=""><div class="">On 12 Dec 2015, at 14:48, Paul Ossenbruggen &lt;<a href="mailto:possen@gmail.com" class="">possen@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Dropping “case” might be interesting, since it becomes a little redundant in the “switch” situation, this is one advantage of having a new keyword,&nbsp;but not sure this reads as well:</span><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">let v = switch val then .Red: 1, .Green: 2, .Blue: 3</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">It is definitely nice in it’s compactness which is a big plus.&nbsp;</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Another possibility, because “switch" does not need to resolve the syntactic ambiguity, but then we lose the “then” always meaning an expression consistency.&nbsp;</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">let v = switch val case .Red: 1, case .Green: 2, case .Blue: 3</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">this might be better for switch because we don’t need to mix “then” with “switch” which historically has not been done. Question is, is it better to go with “then” as expression consistency or with slightly more compact and following the conventions out there. Personally, I am not bothered by using “then” with “switch”&nbsp;</div></div></blockquote></div><br class=""><div class="">Would the cases need to be comma separated? Would a new line make more sense instead?</div><div class=""><br class=""></div><div class="">Currently this is possible:</div><div class=""><br class=""></div><div class=""><div class="">enum Col { case Red, Green, Blue }</div><div class=""><br class=""></div><div class="">let c = Col.Blue</div><div class=""><br class=""></div><div class="">let x: Int = {</div><div class="">&nbsp; switch c {</div><div class="">&nbsp; case .Red: return 1</div><div class="">&nbsp; case .Green: return 2</div><div class="">&nbsp; case .Blue: return 3</div><div class="">&nbsp; }</div><div class="">}()</div></div><div class=""><br class=""></div><div class="">It works, but there are several things I don’t like:</div><div class="">- the switch statement must be wrapped in a closure which is invoked at the end.</div><div class="">- the type of ‘x’ needs to be given</div><div class="">- each case requires a return statement&nbsp;</div><div class=""><br class=""></div><div class="">Here’s a proposal for a switch expression:</div><div class=""><br class=""></div><div class=""><div class="">let y = switch c then {</div><div class="">&nbsp; .Red: 1</div><div class="">&nbsp; .Green: 2</div><div class="">&nbsp; .Blue: 3</div><div class="">}</div></div><div class=""><br class=""></div><div class="">I think the braces are probably needed in the switch expression, also the ‘then’ keyword’ does look a bit peculiar. Any other ideas on how to support both switch statements and expressions?</div><div class=""><br class=""></div><div class="">Al</div><div class=""><br class=""></div><div class=""><br class=""></div></div></div></blockquote></div><br class=""></body></html>