之前从在工作室接触工作项目开发至今,由于需要协同队友一起进行项目开发,规范编程是协同开发的基础。有时队友A写了一个类或者修改了某个类的一些成员属性或者方法,如果按照其惯有的编程风格,编写出来的代码别人也看不懂。这里拿本人开发过程中的规范实例,仅供参考。
工具及开放环境
开发工具统一使用eclispe集成Android SDK作为开发工具,工作区的编码格式使用UTF-8,ADT实时更新最新本。
Java版本统一使用JDK版本为1.7。
命名规范
例如:
表示包下所有类只用来存放常量
com.gdut.topview.constant
表示包下所有类只用来存放自定义控件
com.gdut.topview.widget
表示包下所有类只用get和set方法来控制对象
com.gdut.topview.entity
存放所有用到的Activity
com.gdut.topview.activity
存放工具类
com.gdut.topview.util
类(class)/接口/抽象类:采用完整的英文描述符,所有单词第一个字母大写,采用驼峰式命名。
例如:
class Test<span style="white-space:pre"> </span>//类
interface Test<span style="white-space:pre"> </span>//接口
abstract class Test<span style="white-space:pre"> </span>//抽象类
注意一下几种:
Android基本集成类:功能名组成+ 以Android类名ShowActivity<span style="white-space:pre"> </span>//Activity
DownloadService<span style="white-space:pre"> </span>//Service
DeleteReceiver<span style="white-space:pre"> </span>
MyApplication
例如:
class WIFIEvent
class WIFICookie
成员函数(method):采用完成的英文描述符,函数名字以代表函数功能的英文单词组成,除首单词小写,其他单词首字母大写;一般的,函数第一个单词要求用动词;Getter函数加前缀‘get’;Setter函数加前缀‘set’;boolean型函数用‘is’作为前缀;函数参数用‘a’作为前缀;不要在方法名中加入对象名称。例如:
void exportHtmlSource() //Not exportHTMLSource
getFirstName()
setFirstName()
isRigth()
Boolean isDrawable(Path apath)
Line.getLength() //Not Line.getLineLength()
变量:采用完整的英语描述符,变量名称用描述变量用途的一个或多个英文单词组成,除首单词用小写,其余单词首字母大写。
例如:
public String mStrPageURL
静态成员变量用‘s’作为前缀。例如:
public static String sSrtAddress;
常量的名字全部大写,单词之间用‘_’分开。例如:
public final static short ERROR_COMM = 1;
枚举变量用‘em’作为前缀。
例如:
emSelector
Boolean类型变量使用‘is’作为前缀,不能使用否定词。例如:
boolean isError // NOT isNoError
Boolean isFound //NOT isNotFound
形参用‘a’作为前缀。
例如:
(Person aPerson)
数组变量应在‘[]’之后。例如:
byte[] buffer //NOT byte buffer[]
用复数命名集合类型的变量例如:
Collection<Point>points
Int [] values
Iterator类型变量用it命名例如:
Iterator it = points.iterator()
基本数据类型命名规范
Integer:int+描述 Char:chr+描述 Boolean:bln+描述
Long:lng+描述 Short:shr +描述 Double:dbl+描述
String:str+描述 Float:flt+描述 Single:sng+描述
DataTime:dt+描述 Array:arr+描述 Object:obj+描述
例如:String srtName;
基本控件命名规范
TextView:tv_+描述 Button :btn _+描述 EditText :et_+描述
WebView :wv_+描述 ImageView:iv _+描述 VideoView :vv _+描述
MediaController :mc_+描述 ListView :lv _+描述 GridView :gv _+描述
Gallery :gly _+描述 ImageButton: ib _+描述 CheckBox :cb _+描述
RadioButton: rb _+描述 SeekBar: sb _+描述 ProgressBar pb _+描述
Spinner :spr _+描述 SearchView: sv _+描述 DatePicker :dp_+描述
AnalogClock: ac _+描述 TimePicker:tp _+描述
例如:
private Button mBtn_show;
private Static String sStrName;
缩进折行
- 函数或者过程的开始,结构的定义,循环、判断语句中的代码都要采用缩进风格,统一用Tab键进行缩进代码
- 每一行代码都不要超过100个字符
- 一对花括号之间必须折行
- if、for、while的主体即使只有一行,也要用花括号包括
- 如果一个表达式或者语句无法在一行中写完:在逗号之后折行;在运算符之前折行;尽量让同级表达式处在同一行
例子:
function (longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
//NOT longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6;
空格空行
- 空格使用:逗号前面空一格空格;所有运算符(“.”、“++”、“—”除外)、赋值符号前后必须空一格;行尾不能有空格
- 空行使用:
- package和import之间要空一行
- import组之间要空一行
- import语句与类、接口声明之间空一行
- 实例变量定义与方法定义之间空一行
- 方法与方法之间空一行
- 代码块之间空一行
- 文件结尾后空一行
- 超过15行代码考虑用空行分割,否则有阅读困难
- 除非有特殊考虑,不要有一行以上空行
代码注释
/**
* Copyright<year> topviewAndroid Inc.
*/
类/接口范例 (必须注明类/接口的编写目的、用途)
/**
* 类或接口的作用描述
* @author XXX<email>
* @version xxxx-xx-xx.a(xxxx-xx-xx为年月日 a为第几次修改
*/
方法头范例- 说明方法的作用
- 说明方法的参数
- 说明方法的返回值
- 说明方法抛出的异常
例如:
/**
* 方法的描述
* @param 参数的描述
* @return 返回类型的描述
* @exception 异常信息的描述
*/
/**
* Return lateral location of the specified position.
* If the position is unset, NaN is returned.
*
* @param x X coordinate of position.
* @param y Y coordinate of position.
* @param zone Zone of position.
* @return Lateral location.
* @throws IllegalArgumentException If zone is <= 0.
*/
public double computeLocation(double x, double y, int zone)
throws IllegalArgumentException {
...
}
- 控制流结构说明
- 变量说明
- 复杂代码说明
- 处理顺序说明
Public void example(){
//使用双斜杠进行注释
}
资源文件
xml布局文件命名
这类文件划分为两类,一类是直接或间接被某个组件加载,一类是资源定义,比如selector等等。
如果是第一类:加载组件名_功能描述.xml
例如:
mainactivity_show.xml
如果是第二类("oo"只是一个标志,用于区分而已,可以根据自己的开放实际情况而定):oo_类型_功能描述.xml
例如:
oo_selector_buttonchange.xml
xml布局id命名
所在xml布局名_基本控件命名规范
例如在mainactivity_show.xml中的一个显示结果的一个textView
android:id="@+id/maiinactivity_show_tv_showresult"
更多补充将会持续更新...