<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="">You’re not the only one, I like them too. :-)</div><div class=""><br class=""></div><div class="">I notice that the&nbsp;SE-0007 proposal only includes positive feedback from the community. I hope that counter arguments will be added too.</div><div class=""><br class=""></div><div class="">The thing that bothers me about this first batch of proposals is that they seem to be about “dumbing down” the language. Personally, I think it would be a mistake to remove “power” features such as the C-style for loop. I like Swift but I don’t want it to hold my hand all the time.</div><div class=""><br class=""></div><div class="">You may think the following is horrible code — I like the expressiveness:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 16px; font-family: Inconsolata; color: rgb(79, 129, 135);" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">extension</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> </span>LinkedList<span style="font-variant-ligatures: no-common-ligatures; color: #000000" class=""> {</span></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class="">&nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">public</span> <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">func</span> reverse() {</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">for</span> <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">var</span> node = <span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">head</span>; node != <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">nil</span>; <span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">head</span> = node, node = node!.<span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">previous</span> {</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class="">&nbsp; &nbsp; &nbsp; // swap next and previous</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class="">&nbsp; &nbsp; }</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class="">&nbsp; }</div></div><div class=""><div class=""><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class="">}</div></div></div><div class=""><br class=""></div><div class="">Another example from the same LinkedList class. It finds the right place to insert a new node:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">&nbsp; for</span> next = <span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">head</span>; next != <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">nil</span> &amp;&amp; index &gt; <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>; prev = next, next = next!.<span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">next</span>, --index { }</div></div><div class=""><br class=""></div><div class="">Extreme? Probably, but I like it better than the same thing done in five lines of while loop.</div><div class=""><br class=""></div><div class="">Another benefit of a C-style for loop is that it simply ignores the loop when n &lt;= i, as in the following example,</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="color: rgb(187, 44, 162);" class="">&nbsp; for</span> <span style="color: rgb(187, 44, 162);" class="">var</span> i = <span style="color: rgb(39, 42, 216);" class="">100</span>; i &lt; <span style="color: rgb(79, 129, 135);" class="">n</span>; ++i { ...</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><br class=""></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata; min-height: 17px;" class=""><span style="font-family: Helvetica; font-size: 12px;" class="">while the Swifty version gives an error because it cannot create a range where the end is smaller than the start:&nbsp;</span></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata; min-height: 17px;" class=""><br class=""></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">&nbsp; for</span> i <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">in</span> <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">100</span>..&lt;<span style="font-variant-ligatures: no-common-ligatures; color: #4f8187" class="">n</span> { ...</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><br class=""></div></div><div class="">Of course, you can add an if-statement to catch this but in the C-style loop this is implicit. Hence, it is more expressive.</div><div class=""><br class=""></div><div class="">Personally, I tend to use for-in as much as possible but I dislike it for going backwards. It’s a style thing but I much prefer,</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">&nbsp; for</span> <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">var</span> i = <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">100</span>; i &gt; <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>; --i { ...</div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-family: Helvetica; font-size: 12px;" class=""><br class=""></span></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-family: Helvetica; font-size: 12px;" class="">over:&nbsp;</span></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class=""><br class=""></span></div><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">&nbsp; for</span> i <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">in</span> <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">100</span>.<span style="font-variant-ligatures: no-common-ligatures; color: #3d1d81" class="">stride</span>(to: <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>, by: -<span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">1</span>) { ...</div></div><div class=""><br class=""></div><div class="">Ideally I’d write this instead, but Swift doesn’t allow such ranges:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 16px; font-family: Inconsolata;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">&nbsp; for</span> i <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">in</span> <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">100</span>...<span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">1</span> {</div></div><div class=""><br class=""></div><div class="">In all these examples, I admit that a C-style for loop is harder to learn. So what? People are only beginners for a short time. I only have a little insight into this but from what I can tell, most beginners don’t have a problem learning the language so much as the frameworks.</div><div class=""><br class=""></div><div class="">We shouldn’t “simplify” the language in the belief that this will help beginners, without a clear understanding of what sort of problems beginners actually have. So far all I’ve seen are assumptions, not actual data. (I only have anecdotal evidence myself.)</div><div class=""><br class=""></div><div class="">Just to be clear: I’m not against making the language easier to learn, but that should not get in the way of allowing more advanced programmers to do their jobs.</div><div class=""><br class=""></div><div class="">
<div class="">-Matthijs</div><div class=""><br class=""></div><div class=""><br class=""></div><br class="Apple-interchange-newline">

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On 5 dec. 2015, at 08:54, Roland King &lt;<a href="mailto:rols@rols.org" class="">rols@rols.org</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="">I must be the only person who still likes C-style for loops on occasion. eg a loop with something floating point&nbsp;</span></div></blockquote></div><br class=""></body></html>