[swift-evolution] Proposal Idea: Use of == outside of comparisons should be treated as an error.
Joe Groff
jgroff at apple.com
Mon Jan 11 14:45:52 CST 2016
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160111/44a72c78/attachment.html>
More information about the swift-evolution
mailing list