[erlang-questions] Reassigning variables

Peter Sabaini peter@REDACTED
Tue Mar 17 22:11:51 CET 2009


On Tuesday 17 March 2009 21:21:29 mats cronqvist wrote:
> Matthew Dempsky <matthew@REDACTED> writes:
> > I like pattern matching in the majority of cases, but I find I write
> > enough code where I need to incrementally update a data structure, and
> > maintaining that code is a pain when I have code like:
> >
> >   X = foo(),
> >   X1 = bar(X),
> >   X2 = xyzzy(X1),
> >   blah(X2).
> >
> > and later want to change it to:
> >
> >   X = foo(),
> >   X1 = whee(X),
> >   X2 = bar(X1),
> >   X3 = xyzzy(X2),
> >   blah(X3).
>
>   Apologies in advance for calling you a noob.

You can call me a noob, I don't mind ;-)

>   But in my experience, all beginners start off writing code like the
> above. Whereas seasoned Erlangers produce something more like this;
>
> x() ->
>   blah_it(xyzzy(make_whee(foo()))).

IMHO intermediate values are sometimes quite useful if not necessary -- I 
often find myself needing to break up some such nested function calls just for 
a temporary ?debugFmt() or logging call -- this is a bit of a nuisance. This 
is compounded by the fact that often the punctuation needs to change too in 
such cases. 

Note I'm not advocating mutable vars, I'm fine with hand-versioning my vars, 
but it *does* add a bit of typing. 

peter.


> make_whee(X) ->
>   case whee(X) of
>     {A,B} ->  bar(A);
>     {A,B,C}-> bar(A)
>   end.
>
> blah_it(X) when is_atom(X) -> blah(X);
> blah_it(X) when is_list(X) -> blah(list_to_atom(X)).
>
>
>   I've added some stuff to your example to make it less trivial, but
>   it's basically the same.
>
>   So I think the X1 = f(X), X2 = f(X1) anti-pattern is not a weakness
>   of the language; it's Erlang's way of telling you that you should
>   use more functions.
>
>   mats

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090317/bf515a87/attachment.bin>


More information about the erlang-questions mailing list