<div dir="ltr">On Mon, Jun 27, 2016 at 9:10 AM, Dave Abrahams <span dir="ltr">&lt;<a href="mailto:dabrahams@apple.com" target="_blank">dabrahams@apple.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
on Sun Jun 26 2016, Xiaodi Wu &lt;<a href="http://xiaodi.wu-AT-gmail.com" rel="noreferrer" target="_blank">xiaodi.wu-AT-gmail.com</a>&gt; wrote:<br>
<br>
&gt; On Sun, Jun 26, 2016 at 2:18 PM, Erica Sadun via swift-evolution &lt;<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt;<br>
</span><span class="">&gt;&gt; See below.  But in a nutshell, `do` gets the idea across. It&#39;s short.<br>
&gt;&gt; It&#39;s pithy.  It uses a common, comfortable word. So yes, personal<br>
&gt;&gt; taste. But it&#39;s personal taste backed up by some statistics.<br>
&gt;&gt;<br>
&gt;<br>
&gt; I&#39;ve made this comment previously in another thread, but I&#39;ll chime in here<br>
&gt; because it seems pertinent. Just like the parentheses around function<br>
&gt; arguments can imply the word &quot;with&quot; or &quot;using,&quot; and just as Swift 3 renamed<br>
&gt; `foo(atIndex: Int)` to `foo(at: Int)` because an argument of type Int<br>
&gt; implies an index, a closure to me implies the word &quot;do,&quot; &quot;invoke,&quot;<br>
&gt; &quot;perform&quot; or even &quot;soEach.&quot; After all, it&#39;s absurd that a closure would be<br>
&gt; supplied as an argument for any purpose other than being done or invoked or<br>
&gt; performed.<br>
<br>
</span>Not at all.<br>
<br>
    callbacks.append( { print(&quot;ring ring&quot;) } )<br></blockquote><div><br></div><div>I&#39;m not sure I understand. Your closure here would be a callback, as in you expect it to be called or done or invoked, no? Would you find value in having it rewritten `callbacks.append(callee: { print(&quot;ring ring&quot;) })`?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
&gt; That a label such as `do` or `body` or `soEach` could be applied so<br>
&gt; broadly seems to me a good sign that these labels might be extraneous.<br>
<br>
</span>I totally buy that argument when it comes to `do` or `body`.  That said,<br>
as I have pointed out many times, “soEach” has very specific<br>
communicative value that none of these others do.<br></blockquote><div><br></div><div>I get what you&#39;re aiming for with &quot;soEach.&quot; So that we&#39;re on the same page, here&#39;s what I think you think:</div><div><br></div><div>(1) &quot;so&quot; communicates that, in the case of filtering, the elements that satisfy the predicate are kept rather than discarded</div><div>(2) &quot;each&quot; communicates that the predicate operates on an individual element at a time</div><div><br></div><div>Regarding (2)--I think clarifying this isn&#39;t extremely valuable, because:</div><div><br></div><div>A. That a property or method has to do with an individual element of a sequence/collection is frequently understood by implication in property and method names. For example: `first` isn&#39;t `firstElement`; it&#39;s simply understood.</div><div><br></div><div>B. In plain English, we frequently understand that a verb used in relation to a thing with multiple constituent parts operates on said constituent parts one-by-one.</div><div><br></div><div>Regarding (1)--I agree that knowing whether elements satisfying the predicate are kept or discarded, etc., is essential. I&#39;ll call this the &quot;keeping vs. discarding&quot; issue. That said, since trailing closure syntax allows the label to be omitted, and since we take into consideration clarity for the reader at the call site as much as clarity for the writer at the time of reading the documentation, I would propose the following:</div><div><br></div><div>A. If &quot;keeping vs. discarding&quot; is ambiguous from the base name (or at least, the full method name minus the predicate&#39;s label), then clarifying words should be inserted somewhere other than the label so that the same clarity can be assured at any call site.</div><div><br></div><div>B. If &quot;keeping vs. discarding&quot; is unambiguous without taking into consideration the predicate&#39;s label, it&#39;s extraneous to reiterate the point in the label.</div><div><br></div><div>C. I question whether there really exist scenarios that are not important enough to justify (A) but just unclear enough that (B) is unsatisfactory; where reasonable people differ, I propose erring on the side of caution and going with (A).</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
--<br>
-Dave<br>
</font></span></blockquote></div><br></div></div>