<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 6, 2016 at 11:09 AM, James Campbell via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">What is &quot;guard&quot;? why its the opposite to &quot;if&quot;!</div></blockquote><div><br></div><div>But it’s not.<br></div><div>guard’s else-clause requires you to transfer program control outside the guard statement’s enclosing scope.<br></div><div>And any constants or variables assigned a value from an optional binding declaration in a guard statement condition can be used for the rest of the guard statement’s enclosing scope. That is what allows us to do `guard let val = opt else { return }` where opt is an optional and val is the value contained in opt if it is not nil.<br><br></div><div>Changing it to unless (and removing the else-clause) would only confuse people coming from Ruby or similar languages, as they wouldn’t expect any of the variable declarations to live in the guard statement’s enclosing scope.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>So in other languages what have they called this, well in Ruby they called it &quot;unless&quot; which I feel is a much clearer form of intent and lower barrier of entry for a user. See this code.</div><div><br></div><div>guard name != nil else {</div><div>   fatalError(&quot;Please enter a name&quot;)</div><div>}</div><div><br></div><div>What does that actually say if you look at it from a linguistic point of view, &quot;guard that name doesn&#39;t equal nil otherwise fail&quot;, that feels very obtuse. </div><div><br></div><div>With my proposal the syntax could become this:</div><div><br></div><div>unless name != nil {</div><div>  fatalError(&quot;Please enter a name&quot;)</div><div>}</div><div><br></div><div>This now reads as &quot;unless name doesn&#39;t equal nil then fail&quot; which I think is a much clearer syntax. I think this would be a great change for Swift 3. For me I think this is more friendly for beginners.</div><div><br></div><div>It would support the same structure as an if block:</div><div><br></div><div>unless name != nil {</div><div>}</div><div>else</div><div>{</div><div>}</div><div><br></div><div>Going forward it would allow us to be more flexible if we added inline if/unless statement, as in Ruby.</div><div><br></div><div>callThisMethod() if age &gt; 0</div><div>throwThisError() unless age &lt;= 0</div><span class=""><font color="#888888"><div><div><br></div>-- <br><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div><span style="font-size:16px;line-height:19.2px"></span><span style="font-size:12.8px"> Wizard</span><br></div><div><a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a></div><div><a href="tel:%2B44%207523%20279%20698" value="+447523279698" target="_blank">+44 7523 279 698</a></div></div></div></div></div></div>
</div></font></span></div><span class=""><font color="#888888">
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=KlmFWKNIEcyPEGx2Wqruu-2FaM6I0anrxIOlKS1pgqec43k-2B4nLp8ZwGPJukL4WDo2fbGgdmh2f9m5wj5iAmpzvjCxXxeB1rQokJZIVsrNuXYYGRaYs0aadLBO4aKoY3HAu8QH3IQdvckES4WyjqIokugs17WbIS3HwYMqU6vRvVObzJeLQJZZxrkFoboNqJYeU830Ap-2F79BoKvz2U9-2F0zy2ZyU3OB4OlGJKFgmF8wlN4-3D" alt="" style="min-height: 1px ! important; width: 1px ! important; border-width: 0px ! important; margin: 0px ! important; padding: 0px ! important; display: none ! important;" height="1" border="0" width="1">
</font></span><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div>