[erlang-questions] Best practices -- conditional statements

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Wed Feb 13 16:25:45 CET 2019


You can remove some of that repetition as well:

notes(N) when N < 6  -> 8;
notes(N) when N < 12 -> 4;
notes(_N)            -> 2.

makePanPositionL(Notes, rapidlyleft2right, L) -> makePanPositionL(Notes,
{rapidly, left2right}, L);
makePanPositionL(Notes, rapidlyright2left, L) -> makePanPositionL(Notes,
{rapidly, right2left}, L);
makePanPositionL(Notes, {rapidly, Mode}, L)   -> 2 *
makePanPositionL(Notes, Mode, L);
makePanPositionL(Notes, left2right, [Cur|_])  -> Cur + notes(Notes);
makePanPositionL(Notes, right2left, [Cur|_])  -> Cur - notes(Notes).

Though this is golfing, so go for the solution you think is most easy to
read. One advantage of the above model is that it might be better if you
are toying with altering the scaling. The scaling parameters are in one
place in this code, so alteration is easier. Also, you can simplify by
using an erlang term rather than an atom via the {rapidly, Mode} trick. Or
perhaps just {scale, 2, Mode} and then interpret this as

mpp(Notes, {scale, K, Mode}, L) ->
  K * mpp(Notes, Mode, L).


On Wed, Feb 13, 2019 at 4:06 PM Ivan Uemlianin <ivan@REDACTED> wrote:

> Some people like it like that.  The repitition on the RHS makes me think
> there's room for more streamlining.
>
> On 13/02/2019 15:02, Donald Steven wrote:
>
> Alas, that creates a different form of code sprawl, as in:
>
> makePanPositionL(Notes, left2right, [Cur|_]) when Notes < 6 -> Cur + 8;
> makePanPositionL(Notes, left2right, [Cur|_]) when Notes < 12 -> Cur + 4;
> makePanPositionL(Notes, left2right, [Cur|_]) -> Cur + 2.
> makePanPositionL(Notes, right2left, [Cur|_]) when Notes < 6 -> Cur - 8;
> makePanPositionL(Notes, right2left, [Cur|_]) when Notes < 12 -> Cur - 4;
> makePanPositionL(Notes, right2left, [Cur|_]) -> Cur - 2.
> makePanPositionL(Notes, rapidlyleft2right, [Cur|_]) when Notes < 6 -> Cur
> + 16;
> makePanPositionL(Notes, rapidlyleft2right, [Cur|_]) when Notes < 12 -> Cur
> + 8;
> makePanPositionL(Notes, rapidlyleft2right, [Cur|_]) -> Cur + 4.
> makePanPositionL(Notes, rapidlyright2left, [Cur|_]) when Notes < 6 -> Cur
> - 16;
> makePanPositionL(Notes, rapidlyright2left, [Cur|_]) when Notes < 12 -> Cur
> - 8;
> makePanPositionL(Notes, rapidlyright2left, [Cur|_]) -> Cur - 4.
>
>
> On 2/13/2019 8.35 AM, Jesper Louis Andersen wrote:
>
> On Wed, Feb 13, 2019 at 1:51 PM Ivan Uemlianin <ivan@REDACTED> wrote:
>
>> This might be cheating but I would avoid the branching altogether if
>> poss., eg:
>>
>>      PanPosition = CurrentPanPosition + notes_to_pad(Notes),
>>      ...
>>
>>      notes_to_pad(N) where N <  6 -> 8;
>>      notes_to_pad(N) where N < 12 -> 4;
>>      notes_to_pad(_)              -> 2.
>>
>>
> makePanPositionL(Notes, left2right, [Cur|_]) when Notes < 6  -> Cur + 8;
> makePanPositionL(Notes, left2right, [Cur|_]) when Notes < 12 -> Cur + 4;
> makePanPositionL(Notes, left2right, [Cur|_])                 -> Cur + 2.
>
> You can just lift everything into a pattern match for this piece of code,
> which is what I think I'd do. It makes the result far more tabular, which
> in some cases is easier to read. There may be other reasons in the code to
> not do this, but as it was written, I think I'd pick the above as the
> solution. YMMV of course.
>
>
> _______________________________________________
> erlang-questions mailing listerlang-questions@REDACTED://erlang.org/mailman/listinfo/erlang-questions
>
>
>
> --
> ============================================================
> Ivan A. Uemlianin PhD
> Llaisdy
>
> Ymchwil a Datblygu Technoleg Lleferydd
> Speech Technology Research and Development
>
>                     ivan@REDACTED
>                         @llaisdy
>                          llaisdy.wordpress.com
>               github.com/llaisdy
>                      www.linkedin.com/in/ivanuemlianin
>
>                         festina lente
> ============================================================
>
>

-- 
J.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20190213/8dac1bfb/attachment.htm>


More information about the erlang-questions mailing list