<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;">I’m not sure if this would be considered or not, but I would like if the negation operator `!` would fade out.</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;">If this is ever going to a review then I’d suggest that we add a pair of functions, one mutating and the other non-mutating.</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;"><div id="bloop_customfont" style="margin: 0px;">extension Bool {</div><div id="bloop_customfont" style="margin: 0px;">&nbsp; mutating func invert() {</div><div id="bloop_customfont" style="margin: 0px;">&nbsp; &nbsp; self = !self</div><div id="bloop_customfont" style="margin: 0px;">&nbsp; }</div><div id="bloop_customfont" style="margin: 0px;"><br></div><div id="bloop_customfont" style="margin: 0px;">&nbsp; func inverted() {</div><div id="bloop_customfont" style="margin: 0px;">&nbsp; &nbsp; return !self</div><div id="bloop_customfont" style="margin: 0px;">&nbsp; }</div><div id="bloop_customfont" style="margin: 0px;">}</div><div id="bloop_customfont" style="margin: 0px;"><br></div><div id="bloop_customfont" style="margin: 0px;">I’d rather use `inverted` instead of `!` because of the readability this function provides.</div><div id="bloop_customfont" style="margin: 0px;"><br></div><div id="bloop_customfont" style="margin: 0px;"><div id="bloop_customfont" style="margin: 0px;">if !items.contains(item) { ... }</div><div id="bloop_customfont" style="margin: 0px;"><br></div><div id="bloop_customfont" style="margin: 0px;">if items.contains(item).inverted() { ... }&nbsp;</div></div></div> <div><br></div><div>——</div><div><br></div>I personally have some other extensions like:<div><br></div><div>extension Bool {</div><div><div>&nbsp; @discardableResult</div><div>&nbsp; func whenTrue&lt;T&gt;(execute closure: () throws -&gt; T) rethrows -&gt; T? {</div><div>&nbsp; &nbsp; if self { return try closure() }</div><div>&nbsp; &nbsp; return nil</div><div>&nbsp; }</div><div><br></div><div>&nbsp; @discardableResult</div><div>&nbsp; func whenFalse&lt;T&gt;(execute closure: () throws -&gt; T) rethrows -&gt; T? {</div><div>&nbsp; &nbsp; if !self { return try closure() }</div><div>&nbsp; &nbsp; return nil</div><div>&nbsp; }</div></div><div>}<br> <div id="bloop_sign_1515751251198909952" class="bloop_sign"></div> <div><br></div>But this is more a personal preference.</div><div><br></div><div>——&nbsp;</div><div><br></div><div>That said, if the community is fine with the `invert/inverted` pair then I’d say go for it ;)<br><p class="airmail_on">Am 12. Januar 2018 um 09:14:22, Nate Cook via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div dir="auto"><div></div><div>



<title></title>


<br>
<div>On Jan 12, 2018, at 12:15 AM, Chris Eidhof via swift-evolution
&lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;
wrote:<br>
<br></div>
<blockquote type="cite">
<div>
<div dir="ltr">
<div>
<div>Hey SE!</div>
<div><br></div>
<div>When we have a bunch of nested structs:</div>
<div><br></div>
<div>&nbsp; &nbsp; struct Sample {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; var bar: Bar</div>
<div>&nbsp; &nbsp; }</div>
<div>&nbsp; &nbsp;&nbsp;</div>
<div>&nbsp; &nbsp; struct Bar {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; var show: Bool</div>
<div>&nbsp; &nbsp; }</div>
<div>&nbsp; &nbsp;&nbsp;</div>
<div>&nbsp; &nbsp; var foo = Sample(bar: Bar(show: false))</div>
<div><br></div>
<div>It can be repetitive to toggle a deeply nested boolean:</div>
<div><br></div>
<div>&nbsp; &nbsp; foo.bar.show = !foo.bar.show //
duplication</div>
<div><br></div>
<div>I sometimes add a `toggle` extension on `Bool`</div>
<div><br></div>
<div>&nbsp; &nbsp; extension Bool {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; mutating func toggle() {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self = !self</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div>&nbsp; &nbsp; }</div>
<div><br></div>
<div>This allows you to write the same code without duplication,
and makes the intent clearer:</div>
<div><br></div>
<div>&nbsp; &nbsp; foo.bar.show.toggle()</div>
</div>
</div>
</div>
</blockquote>
<div><br></div>
I like it!
<div><br>
<blockquote type="cite">
<div>
<div dir="ltr">
<div>
<div>In other languages, I don't think the `toggle` would make as
much sense, but the mutable self makes this very useful.</div>
<div><br></div>
<div>After I posted it on Twitter, it turns out I'm not the only
one: <a href="https://twitter.com/PublicExtension/status/730434956376346624">https://twitter.com/PublicExtension/status/730434956376346624</a></div>
<div><br></div>
<div>I would have gone straight to a proposal, but I think we can
do some bikeshedding about the name of `toggle`?</div>
</div>
</div>
</div>
</blockquote>
<div><br></div>
<div>Another verb that could work is `invert`.</div>
<div><br></div>
<div>The `!` operator that does this is the negation operator, but
I think `negate` could sound to some like "make this false" rather
than toggling.&nbsp;</div>
<div><br></div>
<div>Nate</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></div></body></html>