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