[swift-evolution] Proposal Idea: Use of == outside of comparisons should be treated as an error.
Alex Johnson
ajohnson at quickleft.com
Tue Jan 12 15:15:04 CST 2016
I think @warn_unused_result is already present on ==, at least for Bool in
Swift 2.1.1.
For example:
$ swift --version
Apple Swift version 2.1.1 (swiftlang-700.1.101.15 clang-700.1.81)
Target: x86_64-apple-darwin15.2.0
$ cat test.swift
var a = true
let b = false
func doStuff() {
a == b
}
$ swift test.swift
test.swift:5:5: warning: result of call to '==' is unused
a == b
^
Warnings aren't shown in Playgrounds or in the REPL, though, so if you're
running code there you won't see it.
On Tue, Jan 12, 2016 at 1:01 PM, Andrew Bennett via swift-evolution <
swift-evolution at swift.org> wrote:
> I'm +1 on @warn_unused_result, does that need a proposal or is a PR
> sufficient?
>
> On Tue, Jan 12, 2016 at 7:45 AM, Joe Groff via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>>
>> On Jan 11, 2016, at 12:39 PM, Jared Sinclair via swift-evolution <
>> swift-evolution at swift.org> wrote:
>>
>> Consider the following:
>>
>> protocol Updatable {
>> func update(state: Bool)
>> }
>>
>> class Thing: Updatable {
>> private var enabled = false
>>
>> func update(state: Bool) {
>> self.enabled == state
>> }
>> }
>>
>> The obvious intention is to set self.enabled to the incoming value of
>> state. However, it’s easy to accidentally type a second equals sign. The
>> effect of this typo is self.enabled is never updated, leading to a
>> run-time bug that could be difficult to diagnose.
>>
>> This typo doesn’t generate any errors or warnings. I can’t think of a
>> valid reason to use the equals function outside of comparisons. If the
>> compiler instead treated this typo as an error, the mistake would be
>> trivial to identify and fix:
>>
>> protocol Updatable {
>> func update(state: Bool)
>> }
>>
>> class Thing: Updatable {
>> private var enabled = false
>>
>> func update(state: Bool) {
>> self.enabled == state // Error: `==` may not be used outside of
>> comparisons
>> }
>> }
>>
>>
>> If it isn't already, the implementation of `==` ought to be marked with
>> the `@warn_unused_result` attribute, which will give you a warning if the
>> result is ignored. We're discussing making warn_unused_result the default
>> behavior in another thread.
>>
>> -Joe
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
--
*Alex Johnson | Engineering Lead*
*Quick Left, Inc. <https://quickleft.com/>*
*Boulder **|* *Denver* *|* *Portland** |** San Francisco*
1 (844) QL-NERDS
@nonsensery
<https://github.com/quickleft> <https://www.facebook.com/quickleft>
<https://twitter.com/quickleft> <https://instagram.com/quick_left/>
<https://www.flickr.com/photos/quickleft> <https://vimeo.com/quickleft>
*What's it like to work with us? **TrainingPeaks, iTriage, and Ping
Identity share their stories in this short video** A Client's View
<https://vimeo.com/92286352>*.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160112/9cba2d87/attachment.html>
More information about the swift-evolution
mailing list