標籤:style blog color io os 使用 ar java 檔案
俗話說,無規矩不成方圓。程式開發也如此,規範整潔的代碼,讓程式猿們看的是心曠神怡。即使代碼只有自己看,規範的代碼,自我感覺也要良好。何況,在團隊開發中,代碼不可能只有自己看。規範的代碼是一個程式員的職業修養,是評判一個程式猿是否Professional的一個重要標準。現在,跟隨小豬的腳步,走一遍PHP的代碼規範。
一、 檔案結構
|
|――images
|――include
|――parameter
|――config
|――function
|――index
images存放圖片檔案,include中是系統是要引用的檔案,一般在parameter中存放參數檔案,config中存放設定檔,function中存放方法檔案,如javascript的方法等,並按功能模組的分類,將各功能的類也放入其中。( 恩,這很重要,分開放的目的和廚房要和衛生間在不同的屋是一個道理,不解釋。)
二、檔案名稱
檔案夾命名一般採用英文,長度一般不超過20個字元,命名採用小寫字母。除特殊情況才使用中文拼音,一些常見的檔案夾命名如:images(存放圖形檔案),flash(存放Flash檔案),style(存放CSS檔案),scripts(存放Javascript指令碼),inc(存放include檔案),link(存放友情連結),media(存放多媒體檔案)等。檔案名稱統一用小寫英文字母、數字和底線的組合。( 此處說的是檔案夾名字,和檔案名稱的明明規範。比如xgmm.php, 靠,這是啥,“瞎搞美眉”??原來是想叫“修改密碼”啊,看到這樣的命名,程式員從樹上掉下來了。。。)
三、源檔案編碼規範
3.1 開頭注釋
所有的源檔案都應該在開頭有一個C語言風格的注釋,其中列出類名、功能、版本資訊、日期、作者和著作權聲明:
1 /* 2 * 類名 3 * 功能 4 * 版本 5 * 日期 6 * 作者 7 * 著作權 8 */
如果對檔案進行了修改,應該在檔案頭中說明修改目的、修改日期、修改人,並變更檔案的版本資訊;如果修改問檔案的一部分,則在檔案中進行注釋即可,並且標識出修改部分的起止位置
……/* * 修改目的 * 修改日期 * 修改人 * 版本 */……
//修改起始…………//修改結束……
(注釋很重要,沒注釋的代碼,就像沒有提示的文言文,看的很不爽啊)
3.2 引入語句
引入語句應該位於檔案的頭部,並在引入時說明引入檔案的作用。例如:
1 //資料庫操作類 2 3 require( “db.php” );
3.3 類的聲明 編寫類內部的次序
1 類文檔注釋(/**……*/) 該注釋中所需包含的資訊,參見"文檔注釋"
2 類的聲明
3 類實現的注釋(/*……*/)如果有必要的話 該注釋應包含任何有關整個類的資訊,而這些資訊又不適合作為類文檔注釋。
4 類的(靜態)變數 首先是類的公開變數,隨後是保護變數,再後是包一層級的變數(沒有存取修飾詞,access modifier),最後是私人變數。
5 執行個體變數 首先是公用層級的,隨後是保護層級的,再後是包一層級的(沒有存取修飾詞),最後是私人層級的。
6 構造器
7 方法 這些方法應該按功能,而非範圍或存取權限,分組。例如,一個私人的類方法可以置於兩個公有的執行個體方法之間。其目的是為了更便於閱讀和理解代碼.
3.4 縮排排版
4個空格常被作為縮排排版的一個單位。縮排的確切解釋並未詳細指定(空格 vs. 定位字元)。一個定位字元等於8個空格(而非4個),所以在某些編輯器中,需要特別指定一下定位字元的長度為4(UltraEdit),而在某些編輯器中,會將定位字元轉換為空白格.
3.5 行長度
盡量避免一行的長度超過80個字元,因為很多終端和工具不能很好處理之。(這是曆史原因,以前的Unix,Linux行長度超過80就不讀取了,所以,沿用下來。太長也不好看。)
3.6 換行
當一個運算式無法容納在一行內時,可以依據如下一般規則斷開之:
- 在一個逗號後面斷開
- 在一個操作符前面斷開
- 寧可選擇較進階別(higher-level)的斷開,而非較低層級(lower-level)的斷開
- 新的一行應該與上一行同一層級運算式的開頭處對齊
- 如果以上規則導致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮排8個空格。
以下是斷開方法調用的一些例子:
1 someMethod(longExpression1, longExpression2, longExpression3, 2 longExpression4, longExpression5);3 4 $var = someMethod1(longExpression1, 5 someMethod2(longExpression2, 6 longExpression3));
以下是兩個斷開算術運算式的例子。前者更好,因為斷開處位於括號運算式的外邊,這是個較進階別的斷開。
1 $longName1 = $longName2 * ($longName3 + $longName4 - $longName5)2 + 4 * $longname6; //使用這種縮排方式3 4 $longName1 = $longName2 * ($longName3 + $longName4 5 - $longName5) + 4 * $longname6; //避免這種
以下是兩個縮排方法聲明的例子。前者是常規情形。後者若使用常規的縮排方式將會使第二行和第三行移得很靠右,所以代之以縮排8個空格
//傳統的縮排方式function someMethod($anArg, $anotherArg, $yetAnotherArg, $andStillAnother) {...}//利用8個連續空格避免過渡的縮排function horkingLongMethodName($anArg, $anotherArg, $yetAnotherArg, $andStillAnother) {...}
if語句的換行通常使用8個空格的規則,因為常規縮排(4個空格)會使語句體看起來比較費勁。比如:
1 //不要使用這種縮排方式 2 if ((condition1 && condition2) 3 || (condition3 && condition4) 4 ||!(condition5 && condition6)) { //錯誤的換行方式,沒有進行縮排 5 doSomethingAboutIt(); //條件與此句對齊,造成閱讀程式時很可能漏過此句 6 } 7 8 //應該使用這種縮排方式 9 if ((condition1 && condition2)10 || (condition3 && condition4)11 ||!(condition5 && condition6)) {12 doSomethingAboutIt();13 }14 15 //或者這樣的縮排方式也可以16 if ((condition1 && condition2) || (condition3 && condition4)17 ||!(condition5 && condition6)) {18 doSomethingAboutIt();19 }
這裡有三種可行的方法用於處理三元運算運算式:
1 $alpha = (aLongBooleanExpression) ? beta : gamma;2 3 $alpha = (aLongBooleanExpression) ? beta4 : gamma;5 6 $alpha = (aLongBooleanExpression)7 ? beta8 : gamma;
四、注釋 4.1 塊注釋
塊注釋通常用於提供對檔案,方法,資料結構和演算法的描述。塊注釋被置於每個檔案的開始處以及每個方法之前。它們也可以被用於其他地方,比如方法內部。在功能和方法內部的塊注釋應該和它們所描述的代碼具有一樣的縮排格式。
塊注釋之首應該有一個空行,用於把塊注釋和代碼分割開來,比如:
1 /* 2 3 * 這裡是塊注釋 4 5 */
塊注釋可以以/*-開頭,這樣indent(1)就可以將之識別為一個代碼塊的開始,而不會重排它。
1 /*-2 * 如果想被忽略,可是使用特別格式的塊注釋3 * 4 * one5 * two6 * three7 */
注意:如果你不使用indent(1),就不必在代碼中使用/*-,或為他人可能對你的代碼運行indent(1)作讓步。
(單行注釋就不說了,這都寫不好,就轉行吧)
4.2 文檔注釋
文檔注釋描述php的類、構造器,方法,以及欄位(field)。每個文檔注釋都會被置於注釋定界符/**...*/之中,一個注釋對應一個類或成員。該注釋應位於聲明之前:
1 /**2 * 說明這個類的一些 ...3 */4 class Example { ...
注意頂層(top-level)的類是不縮排的,而其成員是縮排的。描述類的文檔注釋的第一行(/**)不需縮排;隨後的文檔注釋每行都縮排1格(使星號縱向對齊)。成員,包括建構函式在內,其文檔注釋的第一行縮排4格,隨後每行都縮排5格。
若你想給出有關類、變數或方法的資訊,而這些資訊又不適合寫在文檔中,則可使用實現塊注釋(見5.1.1)或緊跟在聲明後面的單行注釋(見5.1.2)。例如,有關一個類實現的細節,應放入緊跟在類聲明後面的實現塊注釋中,而不是放在文檔注釋中。
文檔注釋不能放在一個方法或構造器的定義塊中,因為程式會將位於文檔注釋之後的第一個聲明與其相關聯。
五、聲明 5.1 每行聲明的變數數量
推薦一行一個聲明,因為這樣以利於寫注釋。亦即,
1 int $level; // 縮排的程度2 int $size; // 由定位字元決定
要優於,
1 int $level, $size;
不要將不同類型變數的聲明放在同一行,例如:
1 int $foo, $fooarray[]; //錯誤
注意:上面的例子中,在類型和標識符之間放了一個空格,另一種被允許的替代方式是使用定位字元:
1 int $level; // 縮排的程度2 int $size; // 由定位字元決定3 $currentEntry; // 通常選擇定位字元作為縮排的標準
5.2 初始化
盡量在聲明局部變數的同時初始化。唯一不這麼做的理由是變數的初始值依賴於某些先前發生的計算。例如:
1 function functionName(){2 3 $var = 0;//局部變數初始化4 5 $var2 = getInt();//局部變數依賴方法getInt,因此不需要初始化。6 7 8 }
(待續)
PHP代碼規範