[erlang-questions] Fear and Loathing in Programming La La Land

Fri Mar 30 15:25:56 CEST 2012

> harder to debug. So in my mind, if you have the luxury of working with
> very good code in familiar territory, "initialize everything" is the
> preferable style. But if you are condemned to working with inferior
> code, or code that uses unfamiliar libraries, the alternative will
> prove to be more merciful.

You seem to be confounding two things, as indeed did the authors of
the original study.  The difference we are considering is that
   var p = new Point(x: 1, y: 2); // C# 4.0
   var p = new Point() {x = 1, y = 2}; // C# 3.0

BOTH provide EQUAL amounts of information about which
argument is which.
BOTH provide EQUAL freedom to reorder or omit arguments.

The problem is that the C# 3.0 approach
* forces the interface to be more complex:
  you have to have constructor AND setter for x AND setter for y,
  whereas the C# 4.0 approach needs only the constructor
* forces objects to be mutable that could otherwise be
  immutable (and thus be safe to share between threads)
* makes objects vulnerable to having their guts twisted
  by strangers ANY TIME, not just during setup.

Even without keyword parameters,

   var p = Point.Builder().SetX(1).SetY(2).Build();

provides all the clues about what is what that the
create-set-call antipattern does, without ever once releasing
an incompletely initialised object into the wild.

There _is_ room for some analogue of keyword parameters in
Erlang, and I have a proposal for that...

More information about the erlang-questions mailing list