Yes, I rather agree with the implication here. By using &quot;where&quot;, you are saying that you want something, and it feels more fluid because you really aren&#39;t concerned with the things you don&#39;t want. The argument, essentially, is that &quot;where&quot; is letting you get away with too much unstated. Namely, it is leaving implicit what you want the loop to do with the books you won&#39;t read. Maybe you feel bad rejecting all those authors. But it is a cop-out to let the loop do it for you, like King Henry VIII of England ordering one of his ministers to sign the death warrant for his wife.<br><br>I argue that &quot;where&quot; clauses are a false economy of words, and that you should indicate overtly (to the reader of your code even if it&#39;s clear to yourself) how it is you wish for non-French books to be rejected, for rejected they must be in some way. By contrast, guard says, reject those unwanted books by continuing, or breaking, or a fatal error. I know, it&#39;s unpleasant, but you are rejecting them by act or by omission; and of those only the act shows intentionality.<br><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 10, 2016 at 19:29 Dany St-Amant &lt;<a href="mailto:dsa.mls@icloud.com">dsa.mls@icloud.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div><div><div><br></div><div>Le 10 juin 2016 à 13:59, Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; a écrit :</div><div><br></div><blockquote type="cite"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>But most importantly (and this is really the kicker for me) there are times when the &quot;where&quot; syntax provides the maximum amount of clarity in the context of my code, and I don&#39;t want to lose that expressive power.<div><br></div></div></div></blockquote><div><br></div><div>This is the key and salient point here. Would you be able to share some examples where the `where` syntax provides a clear win in clarity? That would definitely be a huge pro, if it can be used to solve issues in expressiveness much like `guard` allowed elimination of the pyramid of doom.</div></blockquote><br></div></div></div><div dir="auto"><div><div><div>In this case, I think it is hard to come with perfect example as beauty is in the eye of the beholder. Having the flexibility of using guard else { continue }, if not { continue } or where, is at some level a bit like choosing between:</div><div><br></div><div>if !(dataA == value || dataB == value) { }</div><div>if dataA != value &amp;&amp; dataB != value { }</div><div>if dataA != value { if dataB != value { } }</div><div><br></div><div>All three are valid, and the baby pyramid of doom version may even be the right option depending on how you think the code will evolve.</div><div><br></div><div>Back to the where vs guard/if not continue, I see the former as &quot;I want/like&quot; and the laters as &quot;I don&#39;t want/like&quot;. </div><div><br></div><div>for book in books where book.language == .French</div><div>{</div><div>    guard book.readCount == 0 else { continue } </div><div>    if book.originalLanguage == .English { continue } // should read the original</div><div>    // My apologies to translators who might feel offended.</div><div>}</div><div><br></div></div><div>One could put all the conditions as a single where, as a multiple guard, as multiple if, and as a single guard or if, but I think that my keyword choices better convey my message:</div><div><br></div><div>I want a book written in French</div><div>Protect me from what I have read</div><div>No translation from English for me</div><div>(Not that those are worst than others, but I can read the original... Apologies again to translator)</div></div></div><div dir="auto"><div><div><br></div><div>Dany</div><div><br></div></div></div></blockquote></div>