tobias2014 parent
How is "If" as a function even a drawback? It is largely seen as something desired, no? I would see that as a huge advantage, which allows for very powerful programming and meta-programming techniques.
One potential issue is that unlike most other languages, it doesn't create a new scope. But almost nothing in Mathematica introduces a new scope, and Python also uses unscoped "if"s, so it's rarely much of a problem in practice.
But with pattern matching, you almost never need to use "If[]" anyways:
fib[0] := 0
fib[1] := 1
fib[n_ /; n < 2] := Undefined
fib[n_Integer] := fib[n - 1] + fib[n - 2]
fib[8]
(* Output: 21 *)
fib /@ Range[10]
(* Output: {1, 1, 2, 3, 5, 8, 13, 21, 34, 55} *)
fib[-1]
(* Output: Undefined *)
fib["a string"]
(* Output: fib["a string"] *)