Форматирование нескольких аргументов, переданных функции в Java
Часто количество аргументов, переданных функции, может быть большим. Рассмотрим следующий случай:
calculate(dataManager.getLastUpdate().getNumberOfChildren(),
dataManager.getLastUpdate().getNumberOfParents(),
dataManager.getLastUpdate().getNumberOfGrandChildren(),
long milliseconds,
int somethingelse)
Есть ли ориентир в Java
, который предлагает способ согласования аргументов? Привязка всех аргументов в строке не выглядела бы красивой.
Ответы
Ответ 1
В соответствии с соглашениями Java по Java, параграф 4.1 "Линии упаковки":
Когда выражение не будет помещаться в одну строку, сломайте его в соответствии с этими общими принципами:
- Перерыв после запятой.
- Перерыв перед оператором.
- Предпочитают переходы более высокого уровня для разрывов нижнего уровня.
- Выровняйте новую строку с началом выражения на том же уровне в предыдущей строке.
- Если приведенные выше правила приводят к запутыванию кода или к коду, который скручивается против правого поля, вместо этого вместо него вместо 8 пробелов.
В документе также содержатся некоторые примеры вызовов методов:
function(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = function1(longExpression1,
function2(longExpression2,
longExpression3));
Ответ 2
Когда мне нужно вызвать такой метод, мне нравится помещать аргументы в их собственную строку, например:
final int result = calculate (
dataManager.getLastUpdate().getNumberOfChildren(),
dataManager.getLastUpdate().getNumberOfParents(),
dataManager.getLastUpdate().getNumberOfGrandChildren(),
milliseconds,
somethingelse
);
Очевидно, что это личное предпочтение, но если вы работаете с другими над кодом, попробуйте соответствовать уже сформулированным соглашениям.
Ответ 3
Я положу свое маленькое зерно песка, давным-давно какой-то разработчик по имени Эстебан
предложил мне такой вид форматирования, который я первый думал, что это было уродливо
через какое-то время для меня не было другого способа сделать это:
final int result = calculate (
dataManager.getLastUpdate().getNumberOfChildren()
, dataManager.getLastUpdate().getNumberOfParents()
, dataManager.getLastUpdate().getNumberOfGrandChildren()
, long milliseconds
, int somethingelse
);
Я нахожу это очень понятным, очень простым для добавления/удаления новых аргументов,
# аргументов ясно, только один аргумент в строке, конец вызова метода действительно ясный,
и т.д...
Аналогичный шаблон для определения метода тоже
public int calculate(
final int numberOfChildren
, final int numberOfParents
, final int numberOfGrandChildren
, final long milliseconds
, final int somethingelse
) throws CalucalteExceptio {
// MyCode
}
И, наконец, тот же шаблон для вложенных вызовов, последовательность строк StringBuilder
StringBuilder sb = new StringBuilder()
.append('Children #').append(numberOfChildren).append(NL)
.append('Parents #').append(numberOfParents).append(NL)
.append('GrandChildren #').append(numberOfGrandChildren).append(NL)
;
Единственная проблема, с которой я столкнулся, заключается в том, что форматы IDE никогда не допускают такой подход "запятая в начале", которая действительно интересна и намного читаема, чем любая другая, которую я пробовал.
Надеюсь, что добавит что-то интересное
Ответ 4
Я могу назначить возвращаемые значения методов getNumberOf *() для переменных:
SomeObject lastUpdate = dataManager.getLastUpdate();
int children = lastUpdate.getNumberOfChildren();
int parents = lastUpdate.getNumberOfParents();
int grandChildren = lastUpdate.getNumberOfGrandChildren();
calculate(children, parents, grandChildren, milliseconds, somethingelse);
Ответ 5
Ссылаясь на ваш пример, Eclipse и другие IDE отформатируют его так, как вы выше (1 аргумент на строку, все выровненные слева) и обычно это выглядит довольно хорошо.
Ответ 6
Я полностью согласен с вашим примером наличия одного аргумента в строке, все выстроились под друг друга.
Это позволяет легко просканировать список, чтобы увидеть, что там или что отсутствует.
Это также упрощает документирование нулевых значений как "//идентификатор пользователя" или что-то подобное.
Я нахожу его особенно легким для визуального анализа, а не с несколькими длинными строками плотно упакованных значений, которые могут часто выглядеть одинаково.
Ответ 7
Поскольку это хорошая идея следовать кодовому соглашению,
Обновить ссылку для второго комментария: Oracle, условные обозначения кода, 4 - Отступ