linter/checker for single-threaded state via numbered variables?

Dmitry Belyaev be.dmitry@REDACTED
Tue Jan 28 02:14:55 CET 2020


That's definitely an option, however name generation may be difficult in some cases.
The one I always have problems with is filling cowboy response by calling a cascade of functions updating request structure progressively. I'm not sure if other developers prefer typing ReqWithHeaders, ReqWithContentType, ReqWithBody, ReqHalted to consecutive but otherwise meaningless numbers.

On 28 January 2020 9:04:38 am AEDT, Robert Raschke <rtrlists@REDACTED> wrote:
>On Mon, 27 Jan 2020 13:22 Mikael Pettersson, <mikpelinux@REDACTED>
>wrote:
>
>> Since Erlang doesn't allow you to rebind a variable in a scope where
>it's
>> already bound (that becomes a match instead), there is a convention
>of
>> using numbered variables to denote successive "generations" of some
>object
>> or state that's intended to be used in a single-threaded or linear
>way.
>> For example:
>>
>> foo(X0) ->
>>   X1 = update(X0),
>>   case predicate(X1) of
>>     true ->
>>       X2 = another_update(X1),
>>       persist(X2);
>>     false ->
>>      persist(X1)
>>   end.
>>
>> Here, whenever X(N+1) becomes bound, X(N) should become unused, and
>it
>> should be an error if X(N) did not become unused.  A variation is
>that the
>> "final" value is the one without a number suffix.
>>
>> Is there any Erlang linter or style checker that can perform these
>types
>> of checks?
>>
>
>For what it's worth, I consider this practice a bad code smell. Using
>numbered names like that is lazy. Usually such code can be radically
>improved upon by using names that properly describe the values they
>represent. Very often doing this will start you on the path to simpler
>code
>that ends up not requiring this kind of incremental buildup of "stuff".
>
>Cheers,
>Robby

-- 
Kind regards,
Dmitry Belyaev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200128/32edee75/attachment.htm>


More information about the erlang-questions mailing list