Еще один +1 для «В любом случае, я бы порекомендовал делать как можно меньше в каждом утверждении. Чем больше вещей вы делаете в одном утверждении, тем больше сбивает с толку других, которым необходимо поддерживать код. "
Извините, но ваш код:
// sorts 3 values and return as array
static int[] sort3(int a, int b, int c) {
return
(a > b) ? sort3(b, a, c) :
(b > c) ? sort3(a, c, b) :
new int[] { a, b, c };
}
Возможно, для вас это лучший "чистый код Java", но для меня это худший ... нечитаемый код, если у нас нет метода или комментария, мы просто не можем на первый взгляд узнать, что он делает ...
Трудно читаемый код следует использовать только тогда, когда требуются высокие характеристики (но в любом случае проблемы с производительностью связаны с плохой архитектурой ...). Если вы ДОЛЖНЫ писать такой код, тем меньше вы можете сделать хороший Javadoc и модульные тесты ... мы, разработчики, часто не заботимся о реализации таких методов, если мы просто должны использовать их, а не переделывать их ... но поскольку первый взгляд не говорит нам, что делает, мы можем верить, что это работает, как мы ожидаем, и мы можем терять время ...
Рекурсивные методы хороши, когда это короткий метод, но я думаю, что рекурсивного метода следует избегать, если алгоритм сложен и если есть другой способ сделать это в течение почти того же времени вычислений ... В частности, если другие люди будут продолжать работать в этом методе.
Для вашего примера это нормально, так как это короткий метод, но в любом случае, если вы просто не обеспокоены выступлениями, вы могли бы использовать что-то подобное:
// sorts int values
public static int[] sort(Integer... intValues) {
ArrayList list = new ArrayList(
for ( Integer i : intValues ) {
list.add(i);
}
Collections.sort(list);
return list.toArray();
}
Простой способ реализовать ваш метод, легко читаемый всеми разработчиками java> = 1.5, который работает от 1 до n целых чисел ...
Не самый быстрый, но в любом случае, если речь идет о скорости, используйте c ++ или asm:)