Форматирование нескольких аргументов, переданных функции в Java - PullRequest
12 голосов
/ 17 мая 2011

Часто количество аргументов, переданных функции, может быть большим.Рассмотрим следующий случай:

calculate(dataManager.getLastUpdate().getNumberOfChildren(),
          dataManager.getLastUpdate().getNumberOfParents(),
          dataManager.getLastUpdate().getNumberOfGrandChildren(),
          long milliseconds,
          int somethingelse)

Есть ли в Java руководство, предлагающее способ выравнивания аргументов?Подгонка всех аргументов в строке выглядит не очень красиво.

Ответы [ 6 ]

23 голосов
/ 17 мая 2011

Когда мне приходится вызывать такой метод, мне нравится размещать аргументы в отдельной строке, например так:

final int result = calculate (
    dataManager.getLastUpdate().getNumberOfChildren(),
    dataManager.getLastUpdate().getNumberOfParents(),
    dataManager.getLastUpdate().getNumberOfGrandChildren(),
    milliseconds,
    somethingelse
);

Очевидно, что это личное предпочтение, но если вы работаете с другимив коде, попробуйте соответствовать уже изложенным соглашениям.

16 голосов
/ 17 мая 2011

В соответствии с соглашениями Java по кодированию Sun , параграф 4.1 «Обтекание строк»:

Если выражение не помещается на одной строке, разбейте его в соответствии с этими общимипринципы:

  • Перерыв после запятой.
  • Перерыв перед оператором.
  • Предпочитают разрывы более высокого уровня, а не переходы более низкого уровня.
  • Выровняйте новую строку с началом выражения на том же уровне на предыдущей строке.
  • Если приведенные выше правила приводят к путанице в коде или к коду, который упирается в правое поле, вместо этого сделайте отступ в 8 пробелов.

В документе также приведены некоторые примеры вызовов методов:

function(longExpression1, longExpression2, longExpression3,
         longExpression4, longExpression5);

var = function1(longExpression1,
                function2(longExpression2,
                          longExpression3));
6 голосов
/ 01 марта 2014

Я положу сюда свою маленькую песчинку, давным-давно какой-то разработчик по имени Эстебан предложил мне этот вид форматирования, который я сначала подумал, что это было некрасиво, и никакой другой способ сделать это не доставляет мне удовольствия:

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 никогда не разрешают это 'запятая в начале - подход, который действительно интересен и намного более читабелен, чем любой другой, который я пробовал.

Надеюсь, он добавляет что-то интересное

3 голосов
/ 17 мая 2011

Я мог бы присвоить возвращаемые значения методов getNumberOf * () переменным:

SomeObject lastUpdate = dataManager.getLastUpdate();
int children = lastUpdate.getNumberOfChildren();
int parents = lastUpdate.getNumberOfParents();
int grandChildren = lastUpdate.getNumberOfGrandChildren();
calculate(children, parents, grandChildren, milliseconds, somethingelse);
1 голос
/ 17 мая 2011

Ссылаясь на ваш пример, Eclipse и другие IDE форматируют его так, как вы указали выше (1 аргумент на строку, все выровнены по левому краю), и обычно это выглядит довольно хорошо.

0 голосов
/ 24 июля 2016

Я искренне согласен с вашим примером наличия одного аргумента на строку, все выстроены друг под другом.

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

Это также упрощает документирование пустых значений как "// идентификатор пользователя" или что-то подобное.

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

...