2012-08-04 87 views
1

所以我看到了很多不同的編碼風格,但我只會談論兩個大的代碼風格。我用一種風格,我僅舉一切都像他們的類名在一般意義上使用時,這樣的:關於Java代碼風格的問題

String str = "This is some text"; 

但隨着在Java Practices,我看到一種風格,他們會加上一個「我」在前面接口類的名稱,或者他們把'f'或'a'放在對象名稱的前面。從"Don't subclass JDialog or JFrame"'把這個片斷:

/** 
    Constructor. 

    <P>Called when adding a new {@link Movie}. 
*/ 
MovieView(JFrame aParent) { 
    fEdit = Edit.ADD; 
    buildGui(aParent, "Add Movie"); 
    fStandardDialog.display(); 
} 

爲什麼程序員的代碼在這種風格?有很多人使用它嗎?而且,專業程序員是否也使用這種風格?

感謝提前:)

+2

燈罩壞[匈牙利命名法]的(http://en.wikipedia.org/wiki/Hungarian_notation)的做法。我認爲這種記號最令人fr目。 – 2012-08-04 19:43:11

+3

如果你寫一個事實,你有一個問題,你應該把問題本身置於主題中。 – 2012-08-04 19:43:16

+0

@HovercraftFullOfEels哦真的嗎?我不知道。感謝您的鏈接。 – mattbdean 2012-08-04 19:46:03

回答

3

這是我個人的意見。

我不喜歡在接口(或其他任何其他方面)上使用前綴。我只是喜歡稱它爲什麼。接口意味着代表一個對象(或其中的一部分),而不會對它的實際實現產生任何影響。

假設你有一個Car接口。 AudiA4可能是該車的一個實施。如果你剛剛買了一輛新的奧迪A4,你會說,「我買了一輛新的奧迪A4」給那些你認爲關心你購買的汽車的人。對於其他人,你可以說「我買了一輛新車」。當然,你從不說,我買了一臺新的IAudiA4或一臺新的ICar。

JFrame命名是因爲它是一個Swing Frame和Swing來自AWT(原始的Java窗口工具包,它已經有一個Frame類)之後。既然AWT和Swing同時可用,他們使用'J'前綴來劃分工具包(注意JFrame擴展Frame,btw)。他們可以稱它爲SwingFrame,但'J'前綴顯然是表示Swing包的一個好選擇。所以基本上這個前綴只是一個命名選項,而不是類似於'I'的慣例(或者你有時也會看到Impl後綴)

我的觀點是你總是必須根據你的類名和接口來命名正是他們所代表的。沒有更多,不少。沒有CarImpl類的要點。誰在乎這是一個實現。它是什麼實現?爲什麼它需要自己的班級?當我使用CarImpl時,還能得到什麼?當我做第二次實現時會發生什麼,我稱之爲CarImpl2?所有這些都非常有限,並沒有帶來太多的價值。

稱它爲什麼。這是我提出的唯一規則。所有這一切,Eclipse項目確實使用I-for接口表示法(WIKI)。但這是他們的選擇。我也見過專業人士使用它。我不喜歡它,但總的來說,我尊重團隊的命名習慣。

+0

哇,謝謝你的細節。這有助於很多:) +1 – mattbdean 2012-08-04 19:54:53

+0

我從來沒有理解許多人選擇在Java的實現類中使用'Impl'後綴,當有'Bean'後綴時。 'CarBean'讀得比'CarImpl'好得多(除非你不是Java編碼器,那麼bean和番茄醬)甚至可以用名字空間來區分實現的名稱和後綴,例如'public interface Car { ...} - 接口,公共類CarBean實現Car {...} - 實現。 – 2012-08-04 21:09:24

-1

所以,我已經看到了很多不同的編碼風格,但我只打算 談兩個大的。我使用一種風格,我只是將其所有的名稱命名爲 ,就像它們的類名一般使用時一樣,如下所示:

String str =「This is some text」;

這太可怕了。想象一下,如果有人在閱讀你的代碼,試圖瞭解它在做什麼,他們遇到了一個名爲str的變量。它沒有傳達任何意義的人必須閱讀此代碼的意圖。

約定被人們用來提高可讀性,從而提高軟件的整體質量。沒有約定,任何擁有多個開發人員的項目都會受到不同風格的影響,這隻會影響代碼的可讀性。如果你想知道專業人士做什麼,在互聯網上瀏覽各種conventions

+0

「我用一種風格,我僅舉一切都像他們的類名**在一般意義上**使用時,」 – mattbdean 2012-08-04 19:55:36

+1

是什麼意思,甚至? – 2012-08-04 20:00:10

+0

OP關心評論你的投票嗎? – 2012-08-04 20:05:28

1

有一本關於這樣的東西的書 - 史蒂夫麥康奈爾代碼完成

+1

@whowantsakookie:這本書恰好是關於代碼構建的哲學和實踐的最好書籍之一,也是我最喜歡的編程書籍之一,你不會後悔閱讀,也不會後悔。你可能想重新考慮你的評論。 – 2012-08-05 03:38:48

+0

@HovercraftFullOfEels好的,但我的評論去了哪裏? :\我知道這是一本好書,但那不是我所期待的。 – mattbdean 2012-08-05 17:06:23

+0

@whowantsakookie:版主必須刪除您的評論。坦率地說,這有點粗魯。 – 2012-08-05 17:07:19

1

我可能是錯的,但是我在命名Java變量時唯一通用的約定是使用Camel-Case符號,這與名稱的格式有關。

至於名稱本身,我總是發現有用的名稱變量根據他們實際是什麼。在你String例如,雖然你提到這將是一個通用的變量,我仍然給它一個更有意義的名稱,如:

String message = "This is some text"; 

或者:

String msg = "This is some text"; 

一些Java庫我見過的源代碼往往是相當冗長命名變量時,其他人只是用當變量是在減少環境中使用單字母域名:

public Rectangle setLocation(Point p) { 
    return setLocation(p.x(), p.y()); 
} 

我THI當命名變量(或其他任何事情)時,主要目標總是以儘可能最好的方式與你正在嘗試做的事情進行交流。

+0

我完全同意你的看法。就像當你創建一個'BufferedReader'時,你不會把它叫做'br',你可以把它叫做'saveFileLoader'或類似的東西。 – mattbdean 2012-08-04 20:02:12

1

你所描述的有時被稱爲「匈牙利符號」,儘管它並不是真正意義上的「匈牙利語」。

基本上,這個想法是區分不同類別的變量 - 實例變量,局部變量,參數等。這有兩個基本目的:

  1. 這有助於避免名稱衝突,在那裏,說,有可能自然(使用「描述性」的變量命名)是一個實例變量ralphsLeftFoot和局部變量ralphsLeftFoot。使用前綴可以使兩者共存,特別是在本地可能(沒有警告消息)「隱藏」實例變量的語言中,可以防止意外的語義變化與這些衝突無關。
  2. 它使變量的範圍顯而易見,因此,在維護期間,不會意外假定局部變量具有實例範圍,反之亦然。

這種方法值得嗎?許多開發人員使用該方案的一個子集,顯然取得了良好的效果。例如,許多Objective-C開發人員會將實例變量命名爲具有前導「_」字符的「屬性」,以明確區分這兩者,並避免意圖在屬性意圖時使用實例變量。同樣,許多語言的開發人員都會在實例變量前添加一個字母(通常爲「m」),以區分它們與「正常」本地/參數變量。

可能最重要的是選擇一種你(和你的團隊)喜歡並堅持的風格。如果團隊喜歡前綴,則使用前綴。如果球隊喜歡別的東西,堅持這一點。當然,改變偏好時,當向你「透露」一個更好的選擇時,是可以的,但不要無情地來回切換。

+0

謝謝,我通常會在更高範圍的變量中看到前綴。這解釋了很多。 +1 – mattbdean 2012-08-04 20:23:54

+0

如果您在編程Java,您應該堅持使用通用的Java編碼風格,該風格不含匈牙利符號。 – 2012-08-04 20:38:14

+0

沒有「常見的Java編碼風格」。 – 2012-08-04 20:51:39

1

代碼風格有助於使開發人員更容易閱讀和理解對方的代碼。 Java conventions規定使用短和描述標識符,但不幸的是簡短的描述並非總能實現在一起,所以你可能不得不妥協急促的清晰度,因此:atmosPres - 仍不清楚,但總之,atmosphericPressure - 這不能被誤認爲,atm - 因爲每個人都知道ATM,對嗎?,ap - WTF?

我第一次遇到在C#中開發程序時用三字母類型標識符給變量名加前綴的做法 - 它幫助讀者知道變量中包含的數據類型,而不必查找它的聲明(由於內存短或者懶惰?)。器件還與I e.g IList前綴從其他數據類型區分開來(出於什麼目的,我只是不知道)。

對我來說,最糟糕的代碼約定是在C++中(如果確實有這些約定的話) - 數據類型和變量的案例類型混合,方法和函數命名風格衝突以及無窮無盡的縮寫都使得它很難讓非常規的C++編碼人員閱讀和理解C++代碼。

+0

我同意你的意見。妥協只能採取一定的水平。 +1 – mattbdean 2012-08-04 20:59:35