<div dir="ltr"><br><br><div class="gmail_quote">On Sun, Jul 27, 2008 at 10:56 AM,  <span dir="ltr"><<a href="mailto:attila.rajmund.nohl@ericsson.com">attila.rajmund.nohl@ericsson.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">On Sat, 26 Jul 2008, Alain O'Dea wrote:<br>
<br>
> On 26-Jul-08, at 6:47 PM, James Hague wrote:<br>
><br>
>>> Imagine this:<br>
>>><br>
>>> X = tl(L),<br>
>>> ... many messy lines ...<br>
>>> *X = tl(X),<br>
>>> ... another many lines ...<br>
>>> *X = tl(X),<br>
>>> ... another many almost unreadable messy lines ...<br>
>>> sensitive_usage(X), % <--- buggy X value observed here<br>
>>><br>
>>> And my question is, where Value of X came from? It goes from L, but<br>
>>> how long<br>
>>> it take and how many errors you can do when you will investigate?<br>
>><br>
>> It's just as bad when there's code like this:<br>
>><br>
>> T2 = something(T),<br>
>> T3 = something(T2),<br>
>> T4 = something(T3),<br>
>> T5 = something(T4),<br>
>> T6 = something(T5)<br>
>><br>
>> You may laugh at that code, but it's hardly uncommon, even in code<br>
>> written by experienced programmers.  It's very easy to accidentally<br>
>> use T4 in a spot when you meant T3, or to have to renumber things and<br>
>> make a mistake.<br>
>><br>
>> Please note that I am not arguing for changes in Erlang.  I truly am<br>
>> not.  But I can understand why this request comes up regularly.<br>
>><br>
>> James<br>
><br>
> Erlang should not introduce mutable variables because they make it<br>
> easy to disguise a variety of code smells as clean code.<br>
><br>
> Code like James' example is code that does not express its intentions<br>
> clearly.<br>
<br>
</div></div>I disagree. Code like this:<br>
State1 = updateStateSomehow1(State, SomeVariable),<br>
State2 = updateStateSomehow2(State1, SomeOtherVariable),<br>
State3 = updateStateSomehow3(State2, SomeReallyOtherVariable),<br>
<br>
quite clearly expresses the intention: update the state.</blockquote><div><br>Well, if you want this, do it this way:<br><br>NewStata = lists:foldl(<br>   fun({F, A}, S) -> F(S, A) end,<br>   State,<br>      [<br>         {updateStateSomehow1,SomeVariable},<br>
         {updateStateSomehow2, SomeOtherVariable},<br>         {updateStateSomehow3, SomeReallyOtherVariable}<br>   ]).<br><br>Just refactor your code, don't break Language!<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
[...]<br>
<div class="Ih2E3d">> If you give semantic names to each transformation applied to the data,<br>
> then the code will express its intentions clearly. When you express<br>
> your intentions clearly you avoid a lot of bugs. Subsequent<br>
> refactoring work is also made easier, especially when the original<br>
> author is unavailable.<br>
<br>
</div>The problem with detailed semantic names is that they tend to be long.<br>
Given the ugliness of the erlang record syntax you'd soon end up with<br>
experssions like this:<br>
StateUpdatedWithSomeVariable#stateRecord.some_field<br>
<br>
instead of the intuitive<br>
State.some_field<br>
<br>
which is actually readable and fits on the terminal nicely, unlike the<br>
erlang variant.<br>
<div class="Ih2E3d"><br>
                                Bye,NAR<br>
--<br>
"Beware of bugs in the above code; I have only proved it correct, not<br>
  tried it."<br>
_______________________________________________<br>
</div><div><div></div><div class="Wj3C7c">erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil<br>
</div>