[almighty] Equaler considered harmful

Todd Mancini tmancini at redhat.com
Thu Sep 22 18:10:43 UTC 2016


But just who copied whom? :)

https://msdn.microsoft.com/en-us/library/system.icomparable(v=vs.110).aspx

(I'm sure some wiseguy will tell me that both copied from Smalltalk or PL/I
or something similar.)

On Thu, Sep 22, 2016 at 11:30 AM, Andrew Lee Rubinger <alr at redhat.com>
wrote:

> Java may have made an odd design design by putting "boolean
> equals(Object)" in the root Object class as a mechanism to test equality by
> value, but there's also:
>
>   https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html
>
> This approach handles not just equals but also greater/less than
> comparisons for types that have ordered values.  You could retrofit it to
> return an enum type instead of an int for better clarity.
>
> Something to consider :)
>
> S,
> ALR
>
> On Thu, Sep 22, 2016 at 10:19 AM, Konrad Kleine <kkleine at redhat.com>
> wrote:
>
>> Hi Thomas,
>>
>> thanks for not pointing in my direction :)
>>
>> I can't wait to see a PR for this.
>>
>> Regards,
>> Konrad
>>
>> On Thu, Sep 22, 2016 at 3:32 PM, Thomas Mäder <tmader at redhat.com> wrote:
>>
>>> Hi folks,
>>>
>>> some time back, we have introduced the "Equaler" interface. I believe
>>> we're going down the wrong path with this: Java got this wrong initially
>>> and we still suffer the consequences. Equaler looks like this:
>>>
>>> type Equaler interface {
>>>     Equal(Equaler) bool
>>> }
>>>
>>> There are a couple of drawbacks to this approach:
>>>
>>>    1. There can only be a single implementation of Equals for all time.
>>>    But this too restrictive: for example, I might want to include the version
>>>    field in a struct in the comparison for some cases, in other cases I simply
>>>    don't care. Generally, there can be many equivalence relationships for a
>>>    given set of objects. For all we know, we might consider two objects equal
>>>    if they have the same color.
>>>    2. You can't compose equality with this implementation
>>>    In Java, this has given rise to classes like "EqualsBuilder" that
>>>    allowed to do exactly that.
>>>    3. We can't implement equality based on interfaces
>>>    We'd have to reimplement equality for every struct (which is the
>>>    first parameter).
>>>    4. You always have to check for null before calling Equals()
>>>
>>> So I propose to rewrite the interface to :
>>>
>>> Equality {
>>>
>>>     Equals(left interface{}, right interface{}) bool
>>>
>>> }
>>>
>>> I think it would make sense that I prepare a PR to illustrate my
>>> approach porting the current implementations in the "models" packe. A POC
>>> shouldn't take too long.
>>>
>>> thoughts?
>>>
>>> /Thomas
>>>
>>> _______________________________________________
>>> almighty-public mailing list
>>> almighty-public at redhat.com
>>> https://www.redhat.com/mailman/listinfo/almighty-public
>>>
>>>
>>
>> _______________________________________________
>> almighty-public mailing list
>> almighty-public at redhat.com
>> https://www.redhat.com/mailman/listinfo/almighty-public
>>
>>
>
>
> --
> Red Hat Developer Programs Architecture
> @ALRubinger
>
> _______________________________________________
> almighty-public mailing list
> almighty-public at redhat.com
> https://www.redhat.com/mailman/listinfo/almighty-public
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/almighty-public/attachments/20160922/db11201b/attachment.htm>


More information about the almighty-public mailing list