This is a excerpt from a real project, just with variables renamed.
EDIT: * I’ve removed the issues from the original code so that this can be a real style vote, without sidetracking the readers.
Although, by fixing the code, I removed one of the things that I think the advantage of the second one is - it is much harder to make errors and dead code._
const qreal ratio = someFunction();
if (ratio < 1.5) {
result = multiplier;
} else if (ratio < 2.0) {
result = multiplier * 1.5;
} else if (ratio < 2.5) {
result = multiplier * 2.0;
} else if (ratio < 3.0) {
result = multiplier * 3.0;
} else {
result = multiplier * ratio;
}
return result;
This was the usual imperative code that you’d find almost everywhere. And this is the alternative (functional) way of doing the same:
const qreal ratio = someFunction();
return multiplier * (
(ratio < 1.5) ? 1.0 :
(ratio < 2.0) ? 1.5 :
(ratio < 2.5) ? 2.0 :
(ratio < 3.0) ? 3.0 :
/* else */ ratio
);
The second one is kinda what you’d do in maths:
.
/ 1.0 x < 1.5
| 1.5 1.5 ≤ x < 2.0
f(x) = < 2.0 2.0 ≤ x < 2.5
| 3.0 2.5 ≤ x < 3.0
\ x otherwise
What do you find more readable?