<div dir="auto">Good question. It turns out that abuses of 'if' as flow control, especially synchronized flow control, is the single largest cause of defects in software development for all time. In fact, a strong case can be made (and is made in this outstanding video ( <a href="https://youtu.be/z43bmaMwagI">https://youtu.be/z43bmaMwagI</a>  ) that 'goto' was the fall guy for 'if' in Dykstra's famous letter to the ACM.<div dir="auto"><br></div><div dir="auto">Mainly the issue is the use of 'if' as a statement for alternative program control flow more than using 'if' as an expression (as is typically the case in Erlang). It generally manifests itself in imperative languages and you see it much improved in languages that provide better structural flow controls like pattern matching and aspects typical of functional languages, again like what Erlang offers.</div><div dir="auto"><br></div><div dir="auto">In all my coding I restrain 'if' to assertions or guards that are either immediately passed so the program continues having passed a logic filter and never use it to decide amongst two (or more) alternative flow paths within the same code block/function.</div><div dir="auto"><br></div><div dir="auto">In Erlang I only use 'if' as guard statements (and prefer 'when'). It makes me far more confident in the quality of my code when I have no 'if' statements at all.</div><div dir="auto"><br></div><div dir="auto">  - - Ben Scherrey </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Aug 15, 2021, 4:45 AM Michael P. <<a href="mailto:empro2@web.de">empro2@web.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I once stumbled over someone's Erlang style guide,<br>
they wanted no `if`.<br>
It was not very well explained why,<br>
and there was no obvious e-mail address,<br>
or I wanted to first do<br>
some thorough thinking about it.<br>
Now I have no more than this:<br>
<br>
Is if not merely "syntactic sugar" for<br>
a fun/0 with guarded clauses?<br>
```<br>
Now_this_is = (fun If() when Guard_seq_1 -> Expr_seq_1<br>
                %% On and on and on<br>
                 ; If() when Guard_seq_N -> Expr_seq_N<br>
               end)(),<br>
% or:<br>
Worst = case true<br>
          of true when Guard_seq_1 -> Expr_seq_1<br>
           ; true when Guard_seq_2 -> Expr_seq_2<br>
         end.<br>
```<br>
What could be perceived as wrong with `if`?<br>
<br>
~M<br>
<br>
--<br>
<br>
But who will test the tests?<br>
<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div>