[erlang-questions] erlang sucks

Sean Hinde sean.hinde@REDACTED
Tue Mar 11 23:31:17 CET 2008

On 11 Mar 2008, at 22:11, Mats Cronqvist wrote:

> Sean Hinde wrote:
>> I don't much like the _ when business.
> of course, a less (more?) contrived example would be this;
> case is_imaginary(Friend) of
>   true -> sad(self());
>   false-> sound(self())
> end.
> vs.
> FriendIsImaginary = is_imaginary(Friend),
> if
>  not FriendIsImaginary -> sad(self());
>  true -> sound(self())
> end.
> where the second one makes my head spin. the point is that you can't  
> ignore the fact that you have to bind X, Y and Z in the 'if' example.

I agree your second version is ugly. That is why I idid not write my  
usage of 'if' in that way ;-)

OTOH in our shop we do have one or two horrible sections of code  
following your convention. In one place we have around 10 variables  
made boolean then scattered throughout a huge if with many clauses of  
complex boolean logic - head spinning indeed! Although it's not that  
obvious how to deal with it in a much better way. We could carefully  
pick it all apart, looking for state space reductions and building  
complex hiearchies of smaller functions, but that is a lot of work for  
perhaps little real gain...

>> 'if' is also useful when you want to branch on a bunch of unrelated  
>> boolean variables in various combinations:
>> case {X,Y,Z} of
>>    {true, false, _} ->
>>        do_a();
>>        {false, _, true} ->
>>        do_b();
>>    _ ->
>>        do_c()
>> end
>> vs
>> if
>>    X and not Y ->
>>            do_a;
>>    not X and Z ->
>>            do_b;
>>    true ->
>>            do_c
>>    end.
> same here; when you take into account that you have to bind X, Y and  
> Z in the second example, but not in the first, the 'case' version  
> comes out ahead. objectively :>

Why, as the reader of the code, should I care that Z does not have to  
be bound. As the reader of the code I can divine the intention much  
more clearly with the second one, therefore it is better.

> i remain convinced that 'if' is worthless and does nothing but add  
> to the bloat.

1/4 of our code says you are wrong!


More information about the erlang-questions mailing list