一、命名规范
如1与l,O与0…
如:假如有一个Protect
类,还有一个ProtectInfo
类和一个ProtectData
类,那么这就是无意义命名,Info
与Data
意义并无区别。
如用户类UserList
,
如有一个查询全部用户的函数:queryAllUserName()
二、函数
-
函数体应该尽量短小
-
每个函数应该尽量只做一件事
-
每个函数一个抽象级
这是确保函数只做一件事的关键。需要遵循自定向下读的向下原则。
-
精简switch语句
利用多态实现确保每个switch语句都埋藏在较低的抽象层级。
-
使用描述性的名称
尽量做到见名知意,名称能较好的描述该函数要做的事情
-
函数参数
最好的参数量是0,其次是单参数,然后是双参数,应该尽量避免三参数除非迫不得已。
三、注释
-
时间应该花在修改糟糕的代码上,而不是为其写注释
-
用代码解释自己的意图
-
合理的注释:
- 法律信息。
- 提供信息的注释。
- 对意图的解释。
- 警示作用。
- 公共API中的Javadoc。
-
不合理的注释:
- 自说自话。
- 多样的注释。
- 误导性注释。
- 废话注释。
- 注释掉的代码。
四、格式
-
垂直方向上的区隔。
每组代码展现一种思路,用空行隔开。
-
垂直方向上的靠近
每组代码中紧密相关的代码应该互相靠近。
-
垂直距离
- 变量声明:变量声明应该尽可能靠近它使用的位置。
- 循环中的控制变量应该总是在循环语句中声明。
- 实体类变量应该在类顶部声明。
- 相关的函数, 若果某个函数调用了另一个函数,就应该把他们放在一起,而且调用者应该放在被调用者上面。
- 概念相关,概念相关的代码应该放到一起,相关性越强,距离应该越近。 *
-
水平方向上的区隔与靠近
- 赋值操作符周围加空格以达到强调目的:
- 不在函数名与左括号之间加空格符。
- 赋值操作符周围加空格以达到强调目的:
-
避免缩进
尽可能扩展。 -
空范围
有时候,for,while语句体可能为空,需要确保空范围体的缩进,用括号包起来。
一段标准格式的代码
五、对象和数据结构
模块不应该了解它所操作对象的内部情形。对象隐藏数据,暴露操作。这意味着对象不应通过存取器暴露其内部结构。
更准确地说,得墨忒耳率认为类C的方法只应该调用以下对象的方法:
* C
* 由f创建的对象
* 作为参数传递给f的对象
* 由C的实体变量持有的对象