Problem: Write a method to compute the maximum of two double values. Here are some possible solutions.
This is a straightforward example of returning the value as soon as it's known.
public static double max(double a, double b) { if (a > b) { return a; } else { return b; } }
The orthodox philosophy of Structured Programming is that every method should have only one return at the end. To implement this, use a variable to hold the max value and return it at the end.
public static double max(double a, double b) { double result; // Stores the maximum value until the return. if (a > b) { result = a; } else { result = b; } return result; }
This method is clear in either style, but the rigid application of the one-return rule can make some methods very convoluted. The overriding principle that most programmers use is that program flow should be as clear as possible.
public static double max(double a, double b) { if (a > b) { return a; } return b; // Only executed if comparison was false. }
The hard-to-read ?:
operator is a favorite
of programmers who want to impress others. It does result in
shorter source code (but not more efficient execution).
Most people don't find this more readable.
public static double max(double a, double b) { return a>b?a:b; }
It could be made more readable with ()s and spacing.
return (a > b) ? a : b;
These examples illustrate/ignore important ideas.
Math.max()
) rather than writing your own!public
,
allowing others to call them.static
(like the Math.max()
methods).