[swift-evolution] isEqual to replace == Equatable Requirement

Richard Fox fox.ios.dev at gmail.com
Tue Dec 8 11:43:30 CST 2015


I dont see how this makes it less readable, are you taking into
consideration that you still use == everywhere for comparison, after
defining with isEqual? As this method would be defined in the stdlib.

public func == <T : Equatable>(lhs: T, rhs: T) -> Bool


On Tue, Dec 8, 2015 at 5:36 AM David Hart <david at hartbit.com> wrote:

> Your proposition makes comparison code much less readable only for a small
> benefit at the point of definition. I'd vote against.
>
> On 08 Dec 2015, at 11:06, Nicky Gerritsen via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> Although I like the idea, I think it should be more general, as this same
> reasoning also holds for other operators.
> Wouldn't it be better to allow to define operators within a type? So that
> we can just implement == in the type?
>
> I do not know how hard it is to implement it or if this is even possible.
> Probably it is hard, because otherwise it would already have been done?
>
> Regards,
>
> Nicky
>
> On 12/08/2015 11:01 AM, Richard Fox via swift-evolution wrote:
>
> Hi all,
>
> I would like to propose changing the Equatable protocol to use isEqual(to:Self)
> -> Bool, defined inside of a type to replace the currently used operator
> == function, which is defined outside of the type.
> <https://gist.github.com/Nadohs/308603afa65cbbfba07c#reasoning>Reasoning:
>
>    1. Having the conforming function defined inside of the type is more
>    intuitive, since in general functions required for conformance are defined
>    within the type. It feels like an unnecesary detail for learners of Swift
>    to have to stumble through.
>
> The implementation for this would look something like this:
>
>      public protocol Equatable{
>        ....
>
>        /// Shortcut for defining `==` function inside type definition.
>        @warn_unused_result
>        func isEqual(to:Self) -> Bool
>      }
>
>      @warn_unused_result
>      public func == <T : Equatable>(lhs: T, rhs: T) -> Bool {
>          return lhs.isEqual(rhs)
>      }
>
>
> <https://gist.github.com/Nadohs/308603afa65cbbfba07c#impact-on-existing-code>Impact
> on Existing Code:
>
> This implementation would break existing code, but could be fixed with a
> default protocol extension such as:
>
>      /// Default `isEqual` function to satisfy other types only definiting
>      /// `==` for equality.
>      public extension Equatable{
>          func isEqual(to:Self) -> Bool{
>              return self == to
>          }
>      }
>
> Not adding the default function for isEqual makes more sense to me
> though, since it would remove any strict requirement for Equatable
> conformance and leave no warning for the loop you would create by
> implementing neither isEqual nor ==.
>
> Regards,
> Rich Fox
>
>
> _______________________________________________
> swift-evolution mailing listswift-evolution at swift.orghttps://lists.swift.org/mailman/listinfo/swift-evolution
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151208/afdbb34d/attachment.html>


More information about the swift-evolution mailing list