Re: [J2SE] 變數命名與coding style問題
※ 引述《tnsshnews (tnsshnews)》之銘言:
: Dear all,
: 有幾個關於變數宣告的問題想請教一下,
: 1. global的變數在class最開頭的地方宣告完之後, 要馬上給予初始值嗎?
: 還是一率都在constructor給呢? 好處跟差別會是什麼呢?
宣告後給予初始值,在編譯成class檔時,也會移到constructor裡,
所以兩者一樣,但在這邊要注意兩點觀念
1.讓物件建立後,即可直接被使用,避免還要讓使用者額外去做
一些處理。
2.若變數建立較耗資源,則可考慮建一個getter,等該物件被呼叫時
才初始化。
所以變數在宣告就初始化,或在constructor裡初始化,或constructor裡
呼叫其他private method初始化,都行,注意以上兩點即可。
: .....
: 2. 如果在一個method裡面, 有多個變數要宣告, 但宣告完之後又要做一些處理,
: 那是要把宣告通通集中在最前面, 後面在一個一個處理, 還是宣告一個處理一個,
: 在宣告一個, 在處理一個呢?
: e.g
: public void test(){
: AAA aaa = new AAA();
: aaa.setxxx...
: aaa....
: BBB bbb = new BBB();
: bbb.setxxx...
: bbb....
: ...
: }
通常都是要用到時才宣告,但如果依你的例子,我會比較建議以下方式
public void createAAA()
{
AAA aaa = new AAA();
aaa.setxxx...
aaa...
return aaa;
}
public void createBBB()
{
BBB bbb = new BBB();
bbb.setxxx...
bbb...
return bbb;
}
public void test()
{
AAA aaa = createAAA();
BBB bbb = createBBB();
...
}
這樣子的做法有幾個好處
1.讓test()著重在處理自己的邏輯,不需要去管AAA、BBB怎麼實作。
2.程式碼盡量簡單,閱讀時容易理解,重構時也容易下手。
3.建立AAA跟BBB的程式碼可以重複使用。
: 3. class的global變數一率都用private還是public好呢? 看到很多人都會用private,
: 然後再用get/set去設定值還有取值, 不知這是一種好習慣還是有什麼考量呢?
: 謝謝
private/protected/public/default
這幾個的考量點主要在「封裝」,將實作與界面分開,外界只需要知道
界面,不需要知道裡面的實作,所以一般普遍的做法都是變數宣告為private,
然後外界有需要存取時就透過getter/setter來達成,但要注意的是,
真的要必要時才開放,例如考量外界需要透過getter取得變數來完成的功能,
是應該由外界來完成,還是讓物件自己去完成。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.143.57.12
※ 文章網址: https://www.ptt.cc/bbs/java/M.1440464858.A.0A6.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章