1、命名規範php
一、 項目名所有小寫html
二、 包名所有小寫java
三、 類名首字母大寫,若是類名由多個單詞組成,每一個單詞的首字母都要大寫。程序員
如:public class MyFirstClass{}api
四、 變量名、方法名首字母小寫,若是名稱由多個單詞組成,每一個單詞的首字母都要大寫。eclipse
如:int index=0;ide
五、 常量名所有大寫函數
如:public static final String GAME_COLOR=」RED」;ui
六、全部命名規則必須遵循如下規則:編碼
1)、名稱只能由字母、數字、下劃線、$符號組成
2)、不能以數字開頭
3)、名稱不能使用JAVA中的關鍵字。
4)、堅定不容許出現中文及拼音命名。
2、註釋規範
好的代碼規範是一個程序員的基本修煉,好的代碼註釋更能體現一個程序員的思惟邏輯,雖然代碼是用來給機器運行的,咱們只要能寫出能讓編譯器運行的代碼就好了,可是若是沒有好的編碼規範,到項目後期,加入開發的人員逐漸增多時,每一個人的編碼風格都不同,這就會讓項目維護者很難維護,因此開始就要制定一些好的規範來讓你們遵照,這樣才能寫出可維護,健壯的項目,這就是接下來要作的事情。第一節從要從代碼註釋這一塊提及,包含: 版權註釋、類註釋(Class)、構造函數註釋(Constructor)、方法註釋(Methods)、代碼塊註釋(Block)、單句註釋、字段名註釋,而後分別爲eclipse、IDEA建立註釋模塊等。
2、約定
下面就是一些常見的註釋示例:
其中 /** */註釋和 /* */註釋 的區別:
/** */註釋的話,你再調用類和方法的時候會出現提示,內容就是你寫的註釋。就好像文檔幫助同樣。相似"字符串".toString(),鼠標放在toString()上時出現的api說明。 而/* */就沒有了。 /* */就是//的多行版
一、版權註釋
版權註釋主要用來聲明公司的一些基本信息等:
/** * projectName: xxx * fileName: Tk.java * packageName: xxxx * date: 2017年12月18日下午12:28:39 * copyright(c) 2017-2020 xxx公司 */
二、類註釋(Class)
類註釋(Class)主要用來聲明該類用來作什麼,以及建立者、建立日期版本、包名等一些信息:
/** * @version: V1.0 * @author: fendo * @className: user * @packageName: user * @description: 這是用戶類 * @data: 2017-07-28 12:20 **/
三、構造函數註釋(Constructor)
構造函數註釋(Constructor)主要用來聲明該類的構造函數、入參等信息:
** * @description: 構造函數 * @param: [sid, pid] */
四、方法註釋(Methods)
方法註釋(Methods)主要用來聲明該類的做用、入參、返回值、異常等信息:
/** * @author: fendo * @methodsName: addUser * @description: 添加一個用戶 * @param: xxxx * @return: String * @throws: */
五、代碼塊註釋(Block)
/** * 實例化一個用戶 * xxxxxxx */ User user=new User();
六、單句註釋
User user=new User(); //實例化一個用戶
七、字段名註釋
/** * 用戶名 */ public String name;
或者使用以下格式:
/**用戶名**/ public String name;
3、IDE模板
接下來就是分別在Eclipse和IDEA中實現上面的註釋,而後分別生成模板:
3.一、Eclipse代碼註釋
在Eclipse中能夠經過CodeTemplates進行設置,具體步驟以下: Window->Preference->Java->Code Style->Code Template
其中有兩類一類是Comments、主要是類中的一些通用模板:
1.文件(Files)註釋標籤:
設置版權信息:
/** * projectName: ${project_name} * fileName: ${file_name} * packageName: ${package_name} * date: ${date}${time} * copyright(c) 2017-2020 xxx公司 */
注意: 要打上勾!!
2.類型(Types)註釋標籤(類的註釋):
/** * @title: ${file_name} * @package ${package_name} * @description: ${todo} * @author: fendo * @date: ${date} ${time} * @version: V1.0 */
3.字段(Fields)註釋標籤:
/** * @Fields ${field} : ${todo}(用一句話描述這個變量表示什麼) */
4.構造函數(Constructors)標籤:
/** * @title: ${enclosing_type} * @description: ${todo}(這裏用一句話描述這個方法的做用) * @param: ${tags} * @throws: */
/** *@title: ${enclosing_method} *@description: ${todo} *@author: fendo *@date: ${date} ${time} *${tags} *@throws: */
6.覆蓋方法(Overriding Methods)標籤:
/** * @title: ${enclosing_method} * @description: ${todo} * ${tags} * ${see_to_overridden} */
7.表明方法(Delegate Methods)標籤:
/** * ${tags} * ${see_to_target} */
8.Getter方法標籤:
/** * @title: ${enclosing_method} * @description: ${todo} * @return: ${field_type} */
9.Setter方法標籤:
/** * @title: ${enclosing_method} * @description: ${todo} * @return: ${field_type} */
因爲基本的在上面的已經設置好了,因此這裏也不須要設置什麼,而後就是把這個模板導出來,分發給各開發人員,讓他們導進來就好了。
完整的模板以下:
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<templates>
<template autoinsert="false" context="gettercomment_context" deleted="false" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment">/**
-
* @title: ${enclosing_method}
-
* @description: ${todo}
-
* @return: ${field_type}
-
*/
</template>
<template autoinsert="false" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment">/**
-
* @title: ${enclosing_type}
-
* @description: ${todo}
-
* @param: ${tags}
-
* @throws
-
*/
</template>
<template autoinsert="false" context="filecomment_context" deleted="false" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/**
-
* projectName:${project_name}
-
* fileName:${file_name}
-
* packageName:${package_name}
-
* date:${date}${time}
-
* copyright(c) 2017-2020 xxx公司
-
*/
</template>
<template autoinsert="false" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment">/**
-
* @title: ${file_name}
-
* @package ${package_name}
-
* @description: ${todo}
-
* @author: fendo
-
* @date: ${date} ${time}
-
* @version: V1.0
-
*/
</template>
<template autoinsert="false" context="methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment">/**
-
*@title ${enclosing_method}
-
*@description: ${todo}
-
*@author: fendo
-
*@date: ${date} ${time}
-
*${tags}
-
*@throws
-
*/
</template>
<template autoinsert="false" context="overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment">/**
-
* @title: ${enclosing_method}
-
* @description: ${todo}
-
* ${tags}
-
* ${see_to_overridden}
-
*/
</template>
<template autoinsert="false" context="settercomment_context" deleted="false" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment">/**
-
* @title: ${enclosing_method}
-
* @description: ${todo}
-
* @return: ${field_type}
-
*/
</template>
<template autoinsert="false" context="fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment">/**
-
* @Fields ${field} : ${todo}
-
*/
</template>
<template autoinsert="false" context="delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment">/**
-
* ${tags}
-
* ${see_to_target}
-
*/
</template>
</templates>
3.二、IDEA代碼註釋
idea有兩種快捷方式,一個是live templates,一個是file and code templates。
3.2.一、file and code templates
IDEA的code templates僅限於類文件頭和全部文件頭。配置以下圖:
File -- Settings -- Editor -- Code Style -- File and Code Templates
模板以下,只能實現類註釋,方法註釋只能用live templates
/** * projectName: ${PROJECT_NAME} * fileName: ${NAME}.java * packageName: ${PACKAGE_NAME} * date: ${YEAR}-${MONTH}-${DAY} ${TIME} * copyright(c) 2017-2020 xxx公司 */ #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end /** * @version: V1.0 * @author: fendo * @className: ${NAME} * @packageName: ${PACKAGE_NAME} * @description: ${DESCRIPTION} * @data: ${YEAR}-${MONTH}-${DAY} ${TIME} **/ public class ${NAME} { }
3.2.一、live templates
Live Template用中文應該叫作熱加載模板。它的原理就是配置一些經常使用代碼字母縮寫,在輸入簡寫時能夠出現你預製的模板內容,使得開發效率大大提升。
在配置當中找到Live Template,右邊加號先添加一個TemplateGroup
選中該分組再點擊加號添加一個Live Template.Abbreviation中填寫命令,Description填寫描述,Template text填寫你的配置模板。
代碼註釋模板以下:
/** * @title: $file_name$ * @package $package_name$ * @description: * @author: $author$ * @date: $date$ $time$ * @version: V1.0 */
這裏的變量是$$括起來的!!
而後點擊
選擇Everywhere
而後選擇JAVA
最後點擊右下角的Edit variables 按鈕,而後彈出一個窗口,以下:
注意:
默認值須要用""括起來!!
內置函數詳細請參考:https://www.jetbrains.com/help/idea/live-template-variables.html
方法註釋以下:
/** *@title: $enclosing_method$ *@description: TODO *@author: $author$ *@date: $date$ $time$ *@param: $param$ *@return: $return$ *@throws: */
其中的param也可使用:
-
groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i
< params.size(); i++) {result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\n\\b' : '')}; return result", methodParameters())
-
注意:
有個很坑的地方就是,使用這個註釋的時候,必須在方法內使用,若是在方法外使用有些參數就會獲取不到。。。
不足之處:
一、live template中的函數方法是讀取當前函數體的屬性,因此只有在該方法內使用該命令才能獲取,若是想獲取其餘一些信息,如項目名,字段名,根本獲取不到,這是個比較雞肋的地方。
二、Template variables的Expression不能疊加方法。定製化程度不夠好。
IntelliJ IDEA 的實時代碼模板保存在 /templates 目錄下,其餘系統目錄位置以下:
-
Windows: C:\Users\xxxx\.IntelliJIdea2017.2\config
-
Linux: ~/.
<product name>
<version number>/config/templates
-
OS X: ~/Library/Preferences/IdeaIC2017.2/templates
一些經常使用的模板:
1.logger
private static final Logger logger = LoggerFactory.getLogger($CLASS_NAME$.class);
logger.info("op=start_$METHOD_NAME$, $PARAMS_FORMAT$", $PARAMS$);
@Test public void test() { }