<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">It seems that we settle on a relatively 'long' keyword 'unwrap',&nbsp;</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Did we consider a ? prefix operator?</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">As we use the ? postfix in order to safely unpack, we could as well introduce prefix ?</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">guard ?foo, ?bar else { return }</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">It is 'expressive', and makes me think 'do I have?'.&nbsp;</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">It is less technically / semantically correct than unwrap, but also gives a playful twist, making those guard/if condition lines more concise.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">it would play correctly decently with:</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">guard var ?foo, var ?bar else { return }</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div> <div id="bloop_sign_1478043422960784896" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Florent Vilmart<br></div></div> <br><p class="airmail_on">Le 1 novembre 2016 à 19:08:11, ilya via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) a écrit:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>


<title></title>


<div dir="ltr">
<div>&gt; a) guard let foobar = foobar else { … }</div>
<div>&gt; b) guard unwrap foobar else { … }</div>
<div><br></div>
<div>I would argue for</div>
<div>c)&nbsp;guard let reallyFoobar = foobar else { … }</div>
<div><br></div>
<div>(or perhaps guard let foobar_ = foobar else { … } )</div>
<div><br></div>
That way one can use both an optional foobar and non-optional
"unwrapped value of foobar at the moment of guard" without any
possibility of mixing those two (and without violating DRY).
<div><br></div>
<div>Ilya.<br>
<div><br>
<div class="gmail_quote">
<div dir="ltr">On Wed, Oct 26, 2016 at 6:38 PM Chris Lattner via
swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;
wrote:<br></div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div class="gmail_msg">On Oct 26, 2016, at 8:58 AM, Erica Sadun via
swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt;
wrote:</div>
<div class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div class="gmail_msg">On Oct 26, 2016, at 5:40 AM, David Goodine
via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt;
wrote:</div>
<br class="m_5412904676261891953Apple-interchange-newline gmail_msg">
<div class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">Hey all,</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">As usual, apologies if this horse was beaten
ages ago before I joined the mailing list, but thought I would
bring this up.</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<div class="gmail_msg"><br class="gmail_msg"></div>
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<div class="gmail_msg">Yes, this has thoroughly been beaten to
death.&nbsp; It is also outside the scope of Swift 4 stage 1.&nbsp;
That said, it is such a glaring problem that we’ll have to deal
with it at some point.</div>
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg"><br class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">I was typing the above (for the hundredth
time) the other day and I was wondering whether it might be worth
considering offering a shorter syntax:</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><font face="Courier" class="gmail_msg">guard
let x, y, z else {…}</font></div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<div class="gmail_msg"><br class="gmail_msg"></div>
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<div class="gmail_msg">This specific syntax is commonly
requested.&nbsp; The problem with this is that it provides no
useful information about what is actually going on: it sacrifices
clarity to get terseness, a specific non-goal of Swift.</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
Erica says:<br class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg"></div>
</blockquote>
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">Your initial suggestion doesn't work as
overloading "let" confuses rather than clarifies this process. In
February, I brought up `bind x` to mean "conditionally bind x to x,
and produce a conditional fail if that's not possible", with the
hope that "bind self" could be used in closures. Under that scheme
your example would read:</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
</div>
</blockquote>
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg">guard bind x, bind y, bind z else { …
}</div>
</div>
</blockquote>
<br class="gmail_msg"></div>
<div class="gmail_msg">To me, this is the most promising direction,
but I’d suggest the use of “unwrap" as the keyword.&nbsp; If you
compare these two:</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">a) guard let foobar =&nbsp;foobar&nbsp;else
{ … }</div>
<div class="gmail_msg">b) guard unwrap&nbsp;foobar&nbsp;else { …
}</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">I think that b) wins by virtue of
eliminating repetition ("foobar = foobar" fails DRY principles),
but retains clarity by introducing a word into the grammar that
people already commonly know and use, and which is googlable if
they don’t.</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">This also gives us the conceptual hook to
make the “unwrapping an optional” behavior (which occurs with if
let, optional chaining, etc) be something that could be extended to
other similar user defined types, such as a Result type.</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">-Chris</div>
<br class="gmail_msg"></div>
_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote>
</div>
</div>
</div>
</div>


_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote></body></html>