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