Форматирование нескольких аргументов, переданных функции в 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 " или что-то подобное.

Я считаю, что особенно легко визуально анализировать, а не иметь несколько длинных строк плотно упакованных значений, которые часто могут выглядеть одинаково.