On 04/08/2020 16:22, OCsite wrote:


Having too many operators is like having too many annotations: People don't 
know about them, and therefore do not use them, or are confused if they do 
encounter them
(see also e.g. Scala as an example of a language where people can define their 
own operators, and to what problems that can lead...).
Do please correct me if I am wrong, but I do believe user-defined operators 
would not lead to such a mess as language-defined ones by far; you would simply 
use your own ones and would not get bitten in your tender parts by those 
defined by others.

Herin exactly lies the problem: In the end people start to define their own language, which at some point becomes impossible to read/parse by other devs. Just google Scala and operator overloading. While I am not for trying desperately to block developers from doing stupid things, this is alas evidently one of those features that can very easily be abused, so having a fixed, standardized set of operators in a language is imho the better choice. I use operator overloading in my framework, e.g. by adding the capability to add together Column objects to form a Columns object, but I have never felt the need to define a completely new operator like "**!".

Of course one could argue that one can define ones own language in Groovy anyway, by using its DSL features, but in practice that takes much more effort, and is a more concious decision than simply defining your own custom operator here, and here, and here...

Of course your opinion may vary, but I that is my reason why I currently would be -1 on arbitrary custom operators in Groovy - sometimes with too much power comes too much responsibility (and too little advantage imho) :-)
Cheers,
mg

*with the special behavior that a column will not be added if it already exists in the Columns obj, so one can write e.g. p.AGE.val(33) + p.ID.val(newId()) + p.LAST_NAME.val('Muster') + p.allColumns and always get all the p(erson)'s columns





Reply via email to