some have taken it to the next level: "If considered harmful: How to eradicate 95% of all your bugs in one simple step": https://www.youtube.com/watch?v=z43bmaMwagI
I' describe it as: the real culprit is *unconstrained branching* — standard if/else does not enforce the different braches to do something (from the compiler's point of view) symetrical, meaning the memory layout after executing any branch need to be typed the same — while values may vary. In unconstrained branching one brach changes data before executing the rest of the function, while the other branch returns the function! — leading to very different results — from the perspective of the compiler at least.
I only use conditional branching, which in Swift, my mani language means: switch-statements, if/guard let, if case and ternary operator.