Andrei Alexandrescu:

[1, 2, 3, 4].map!(n => n.writeln).reduce;

I have to shot this down for many reasons:

I think it's better to give that final function a different name (like "consume" or something like that) because it's used for very different purposes and it returns nothing. Re-using the name "reduce" doesn't reduce the amount of Phobos lines of code, it doesn't make the user code simpler to understand, it's more obscure because it's more semantically overloaded, and it's not more easy to find in the documentation by the future D users. Function names are not language keywords, packing different purposes in the same name as "static" doesn't give any advantage, and only disadvantages.

And using map with a lambda that returns nothing is not a style I like :-( It's probably better to encourage D programmers to give pure lambdas to map/filter, for several reasons (safety, cleanness, code style, future D front-end optimizations done on those higher order functions, to allow a better debuggability, and to avoid Phobos bugs like http://d.puremagic.com/issues/show_bug.cgi?id=9674 ). So I think it's better to introduce a new Phobos function like tap() that accepts a function/delegate with side effects that takes no input arguments.

Bye,
bearophile

Reply via email to