operators !=
Samuel Gaist
samuel.gaist at edeltech.ch
Mon Aug 25 09:13:02 UTC 2014
On 25 août 2014, at 11:06, Samuel Gaist <samuel.gaist at edeltech.ch> wrote:
> Answer from Aaron
>
> Begin forwarded message:
>
>> From: "Aaron J. Seigo" <aseigo at kde.org>
>> Subject: Re: operators !=
>> Date: 25 août 2014 10:12:11 UTC+02:00
>> To: Samuel Gaist <samuel.gaist at edeltech.ch>
>>
>> On Monday, August 25, 2014 09.17:03 you wrote:
>>> So if we expend this thing a bit, it might look like:
>>> var x != 3;
>>> which would be the same as:
>>> var x = !0x03;
>>> which would translate to
>>> var x = 0xFB;
>>
>> That's an interesting interpretation, and one of the reasons I'm uncomfortable
>> with defining '!=' as the literal antonym of '=' in all manners.
>>
>> But no, != is a boolean operator only allowing for "assignment on not equals".
>> It leads to visually "strange" things like:
>>
>> var x != 3;
>>
>> which would be functionally equivalent to:
>>
>> var x = 3;
>>
>> This follows from:
>>
>> var x = 3;
>> (x, var y) = [4, 2];
>>
>> Element 0 does not equal 3, so y is not assigned and we get an error. There
>> are more complex use cases where this becomes actually useful in a non-trivial
>> manner.
>>
>> Now, if != is the literal antonym of =, then we get things like this:
>>
>> var x = 3;
>> (x, var y) != [4, 2];
>>
>> Element 0 does not equal 3, so y gets assigned. That can be useful and is
>> nicely consistent with how '=' is used in pattern-matching assignment.
>> Unfortunately it also leads to trivial cases that will not behave as most
>> people would expect on first glance:
>>
>> var x != 3;
>>
>> Variable x is not yet bound to a value, so != always succeeds and assigns 3.
>>
>> It's the trivial case that looks odd, while the non-trivial cases (where
>> pattern-matching assignment actually becomes sensible) look sensible.
>>
>> Honestly, I'm torn between:
>>
>> a) != is an antonym of =
>> b) != means "not equals", has nothing to do with assignment, breaking
>> symmetry with =
>> --
>> Aaron J. Seigo
>
Since it should be a boolean operator, I'd rather go for b.
It will probably avoid lots of questioning and "strange logic" looking code
More information about the Funq-devel
mailing list