2011-05-16 66 views
10

傳遞給函數的參數數量通常很大。考慮以下情況:格式化多個傳遞給Java函數的參數

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

是否有Java,提供了一個方法來對齊參數的指引?將所有參數擬合成一行看起來不會很漂亮。

+0

我最大的問題不在於函數調用,而在於定義,因爲這樣您就會發現醜陋的縮進......縮進......縮小的情況。 – 2011-05-16 21:21:12

回答

14

按照Sun's Java coding conventions,第4.1段「包裝線」:

當一個表達式不適合在一行,根據這些一般原則打破它:後一個

  • 歇逗號。
  • 在操作員之前休息。
  • 喜歡較高級別的休息時間到較低級別的休息時間。
  • 將新行與上一行中同一級別的表達式的開頭對齊。
  • 如果上述規則導致代碼混淆或代碼被擠壓到右邊緣,則只需縮進8個空格即可。

該文件還包括一些實例方法調用:

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

var = function1(longExpression1, 
       function2(longExpression2, 
          longExpression3)); 
+2

現在甲骨文的Java代碼約定:) – 2011-05-16 21:13:10

1

參照你的例子,Eclipse和其他IDE格式化你有上述的方式(每行1周的說法,所有左對齊),通常看起來不錯。

+0

我看到一些開發人員使用非等寬字體,然後一切都熄滅了。 – 2011-05-16 21:08:13

18

當我有打電話給喜歡我喜歡把論點自己行,像這樣的方法:

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

顯然,這是個人喜好,但如果你與他人合作代碼,嘗試符合已經提出的約定。

3

我可能分配getNumberOf *()方法變量的返回值:

SomeObject lastUpdate = dataManager.getLastUpdate(); 
int children = lastUpdate.getNumberOfChildren(); 
int parents = lastUpdate.getNumberOfParents(); 
int grandChildren = lastUpdate.getNumberOfGrandChildren(); 
calculate(children, parents, grandChildren, milliseconds, somethingelse); 
+0

是否會被JVM優化? – Leonid 2011-05-16 21:26:14

+0

@Leonid我不知道,但它沒有太大區別。 – Michael 2011-05-17 13:19:51

6

我會在這裏把我的小沙粒,很久以前有些開發商名爲埃斯特萬 建議我這樣的格式化,這是我第一次認爲這是醜陋的 一段時間後做的沒有其他的辦法是不夠普萊我:

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格式化絕不允許這種「逗號類似的模式在開始'的方法是非常有趣的,比我嘗試過的任何其他更可讀。

希望它增加了一些有趣的事情

+0

雖然不是傳統,但我確實很喜歡那樣。 – Thomas 2015-07-08 19:03:52

0

我竭誠與您有每行一個參數的例子同意,在相互都一字排開。

它可以很容易地掃描清單,看看有什麼或缺少什麼。

它還使得更容易將空值記錄爲「//用戶ID」或類似的東西。

我發現它特別容易進行可視化分析,而不是有幾條長長的密集值,經常看起來很像。

相關問題