簡體   English   中英

Java 靜態謂詞命名約定

[英]Java static predicate naming convention

比方說,我想寫isSubdirectory靜電功能在我的FileUtils的輔助類。 這個函數看起來像:

class FileUtils {
  public static boolean isSubdirectory(File child, File parent) {
    // ...
  }
}

或者,我可以翻轉parentchild的參數:

class FileUtils {
  public static boolean isSubdirectory(File parent, File child) {
    // ...
  }
}

而且我無法選擇哪個順序是正確的...

在 Kotlin 中不會有任何疑問:只需聲明擴展函數:

fun File.isSubdirectory(parent: File) {
  // ...
}

着眼於 kotlin,我發明了助記符規則:靜態函數中的第一個參數應該被視為this (我不是第一個發明這個規則的。我看到很多人也在使用它)。 所以在這個例子中,我更喜歡將child作為第一個參數。

但問題是:這條規則是否已經正式化並具有眾所周知的名稱? 我已經厭倦了向不知道它的人重復這條規則,我希望我可以簡單地通過它的名字來引用這條規則。

我不確定是否有名稱或任何真正的形式化。 充其量,第一個參數看起來像this只是一個常見的約定。 雖然最罕見,但“最后一個”約定也存在,更多出現在 C 和早期 C++ 中(例如:stdio with fread/fwrite)

也存在基於參數類型的約定; 例如推廣以下訂單:

  • 具有通用參數的集合和其他對象
  • 對象數組
  • 沒有泛型的對象
  • 細繩
  • 原始類型的數組,例如byte[]
  • 雙,浮動
  • 長、整數、短、字節
  • 布爾值

也存在或多或少完全相反的順序。 其他約定也傾向於按類型對參數進行分組,更喜歡method(String, String, int, int)而不是method(String, int, String, int)

如您所見,存在許多約定。 我不確定它們中的任何一個都有名字,而且 any 確實比其他任何一個都更常用。 例如,它不像camelCase 與snake_case 那樣清楚,幾乎沒有人反對。

您可以避免以下所有內容:按照對您來說最合乎邏輯和最直接的順序排列參數。 最重要的是在整個項目中保持一致,即不要寫isFileX(a,b)然后是isFileY(b,a)例如,如果這兩個方法在同一個類中,則isFileY(b,a) 如有疑問,請不要猶豫,詢問其他從事您項目的人,他們認為什么是最好的。

對於您的特定情況,由於“這個第一”規則,將孩子放在第一位是合理的,但將父母放在第一位也是合理的,因為這也是 GUI 框架中的常見約定。 由你來決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM