In this lesson, we'll look at common ways of making something as simple as a return statement clearer.
So often in beginner's code, you will see functions which return a bool which look like:
bool f( ... ) { // do stuff if ( array_size == 0 ) { return true; } else { return false; } }
Because the == check already returns true or false, you can just return that value, as demonstrated here:
bool f( ... ) { // do stuff return ( array_size == 0 ); }
This is often clearer than an if statement.
A similar construction can be made where a function returns two possible values based on a Boolean result. Consider the max function:
int max( int n, int m ) { if ( n >= m ) { return n; } else { return m; } }
While this is acceptable, it can be written much more compactly as
int max( int n, int m ) { return ( n >= m ) ? n : m; }
In some cases, using ?: may lead to confusion:
int max( int a, int b, int c ) { return ( a >= b && a >= c ) ? a : (b >= c) ? b : c; }
Did you catch that? Perhaps if I rewrite it:
int max( int a, int b, int c ) { return ( a >= b && a >= c ) ? a : ( (b >= c) ? b : c ); }
The second form is almost acceptable: with everything on one line, it is difficult to follow. In the second, the first and second operands of ?: are clear and the third, the more complex argument, is on a line of its own, but still clearly connected to the previous statement.
1. Write an double abs( double x ) function which returns the absolute value of the argument x. You should do this with a single return statement.
2. Write a unit-step double step( double x, double bound ) function which returns 0.0 if x <= bound and 1.0 otherwise. You should do this with a single return statement.
3. What is wrong with the following statement?
bool is_large( double x ) { return ( x < -5.0 || x > 5.0 ) ? true : false; }