Re: Why do some people shun `if`?
Benjamin Scherrey <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CABP0uiaPLp6u+7qbS2HQcS0C-W-m0oGY+KB2XM+eE-ttuvQgcg@mail.gmail.com> |
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 ( https://youtu.be/z43bmaMwagI ) that 'goto' was the fall guy for 'if' in Dykstra's famous letter to the ACM. 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. 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. 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. - - Ben Scherrey On Sun, Aug 15, 2021, 4:45 AM Michael P. <[email protected]> wrote: > I once stumbled over someone's Erlang style guide, > they wanted no `if`. > It was not very well explained why, > and there was no obvious e-mail address, > or I wanted to first do > some thorough thinking about it. > Now I have no more than this: > > Is if not merely "syntactic sugar" for > a fun/0 with guarded clauses? > ``` > Now_this_is = (fun If() when Guard_seq_1 -> Expr_seq_1 > %% On and on and on > ; If() when Guard_seq_N -> Expr_seq_N > end)(), > % or: > Worst = case true > of true when Guard_seq_1 -> Expr_seq_1 > ; true when Guard_seq_2 -> Expr_seq_2 > end. > ``` > What could be perceived as wrong with `if`? > > ~M > > -- > > But who will test the tests? > > > > > > >