[erlang-questions] erlang improvement - objective c (or smalltalk) syntax

Dominic Williams erlang@REDACTED
Thu Jun 4 11:35:39 CEST 2009


Joe Armstrong a écrit :
> ie: today I might write something
>          f123(FileName, Mode) ->
>                 Fin = FileName ++ ".erl",
>                 Fout = FileName ++ ".beam",
>                 compile(Fin, Fout, Mode).
> whereas I could write
>          f123(filename:F mode:M) ->
>                 Fin = F ++ ".erl",
>                 Fout = F++ ".beam",
>                 compile(Fin, Fout, M).

Notice how you did *not* write:

           f123(filename:FileName mode:Mode) ->
                  Fin = FileName ++ ".erl",
                  Fout = FileName++ ".beam",
                  compile(Fin, Fout, Mode).

because with your suggestion the tags and the variable names 
carry the same information and become redundant. This is 
exactly the same weakness as static typing, where you get 
semantic duplication, e.g. this sort of thing is common in Java:

FileName fileName = new FileName("myfile");

So in your example you reduced the variable name to a single 
letter, which I cannot see as an improvement in readability.

In addition to that, I think your suggestion replaces the 
problem of remembering the order of arguments with the 
problem of remembering all the tags. One may argue that in a 
well written library with consistent tag names, that would 
be easier, but the same is true of argument order: it would 
be easier to remember if it were consistent (which is not 
the case e.g. in the lists module some functions that 
operate on a single list take the list first, some take it 
last, in dict the dict always comes last, in file the 
filename always comes first...)


Dominic Williams

More information about the erlang-questions mailing list