Just to clarify, this is not a fault in the specific function, it works this way because the current architecture of the core doesn't allows a different implementation (thus can't be simply fixed with a change in the function itself).
if(...) currently requires the condition argument to be defined on evaluation, otherwise an error is thrown; this makes the if/else instructions sealed from further evaluations of the preprocessor.
As opposite cases(...) doesn't throw errors on simbolic conditions, but this makes instructions evaluable (thus you shouldn't add any definition in the case() arguments).
If you like my plugins please consider to support the program buying a license; for personal contributions to me: paypal.me/dcprojects