[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