On 20 January 2018 at 01:25, Andreas Hennings <andr...@dqxtech.net> wrote:

> On 19 January 2018 at 16:12, Sara Golemon <poll...@php.net> wrote:
> > On Thu, Jan 18, 2018 at 7:13 PM, Christoph M. Becker <cmbecke...@gmx.de>
> wrote:
> >> On 18.01.2018 at 23:58, Stanislav Malyshev wrote:
> >>
> >>>> I propose even more such operators:
> >>>> null coalesce addition assignment ??+= (for strings and numbers)
> >>>> null coalesce subtraction assignment ??-=
> >>>> null coalesce increment ??++
> >>>> null coalesce decrement ??--
> >>>> null coalesce multiplication assingment ??*=
> >>>
> >>> I think this is taking it too far. If you want language like that, you
> >>> always have APL :)
> >>
> >> Why do we discuss extensions to an operator which has still (after
> >> nearly two years) not be implemented due to implementation difficulties?
> >>
> > Am I the only one who looked at the original post and assumed he was
> > taking the piss?
> > Similar to the jokes about spaceship assignment <=>= and
> > equality/identicality assignment === (not to be confused with
> > identical non-assign, which is ===) and ====.
>
> I can definitely say it was not a joke.
> I can see myself and others use the ??+= and also ??++, and would have
> used them in the past, if they had been available.
> The others, I don't care as much.
>
> For me, a good enough conclusion of this conversation would be one of:
> A: Yeah seems useful, but let's wait (or work) until ??= is
> implemented and released, and observe how it is being used.
> B: No one will ever use it, and it would hurt the language.
>
>
Going by the example, would this operator's behaviour be a little confusing?

As I understand it the (maybe) upcoming `??=` operator will assign in the
case that the lhs is *not defined*.
But for `??+=` incrementing appears to be desired when the lhs *is defined*,
(with assignment to the operator related identity element in the case that
the
lhs is undefined).

While the use-case seems to add value in the scenario, I think it is
possibly
inconsistent with the way `??=` works?

Furthermore, I think you can generalise this in user-land and end up with a
better result.

When dealing with structured data (i.e. when you expect strings mapping to
ints in your example) you may consider writing a simple class for making
such type guarantees. Something simple like https://3v4l.org/5Sh04 would
produce the desired result, and let you obtain the result in one line at
point
of use.

Nothing ties you into using a class for the storage though, you could
simplify
even further and just create some abstract class representing an "array
toolbox"
for these kind of operations, e.g. https://3v4l.org/ZJcom
So that the array initialisation, foreach loop, and operator are replaced
with a
single line again at point of use (after defining the arraytools class
once).

If you wanted it to work more generally, you could use a reference to delay
lookup, and keep your current code structure https://3v4l.org/TJYhq

If you wanted it to look the part you could even sneak some unicode symbols
in to make it look like some sort of operator ;-) https://3v4l.org/MVT85

Kind regards,
Aidan

Reply via email to