A01.编码风格既江湖规矩
A01.编码风格既江湖规矩
编码风格既是江湖规矩,江湖既是非,历史上这样的争辩非常之多。
- 空格和Tab缩进:
0x20
与0x09
}
要不要换行:} else {
和else {
和else
- 大小写,等号对齐等。
总之,一个项目(最好一个团队),只能保持唯一规矩,没有优劣之分。 重点在于Commit或Review时,不能因为排版不同而引发Diff和Merge。
可选
A01A.默认WingsBoot风格在不同项目的Review中,会遵循该项目的编码风格,我的IDE默认是wings-idea-style.xml
- 180字提醒,220字断行,鼓励长命名。
- 单行短
if
,以节省行空间。 xxx {
,方便按行操作,整块注释或复制。- 留有空白,但不留太长大多空白。
- 以明确的命名,取代无意义的机械注释。
推荐
A01B.方法行数2屏一个方法多少行舒服,和脑力能压入多少栈有关,一般2屏可以接受,3屏要来回滚动。 一屏多大呢?在1080P显示器内,大概40行代码,因此2屏大概120行,3屏大概180行。
方法中,整块的set(get())
,可以视为一个有效行,或干脆提取为Mapper方法。 对于行数较多的大方法,应该拆分或提取成有具体功能的小方法的组合。
推荐
A01C.方法参数5个参数列表建议3个以内,不超过5个。即便有类型校验的多参数,也不好辨识或错误输入。
private方法,可以放宽限制,而非private方法,在建议合并参数为一个输入类。
推荐
A01D.泛型参数3个目前Java(8-17)的类型系统仍有很大的历史包袱,相比于其他语音很不完备。
泛型要考虑类型的不变/invariance,协变/covariance,逆变/contravariance。
推荐
A01E.类内成员10个一个类的成员(Field/Method)种类或及数量都不应该过多,容易破坏单一职责或封装。 具有相同模式(如多态方法)或识别度(如同规则注入)的成员,可以视为一种。
推荐
A01F.继承关系3代继承关系是从集体认同的设计分层算起,比如Service层设计,不包括框架层接口, 而当设计框架时,要从框架的模块起点算起。 避免多层Override,多层super.Invoke。
推荐
A01G.内联表达式3个内联(inline)的表达式过计算部过多,会造成不必要的脑力浪费。 可把相关计算提取为有明确含义的变量,然后组合变量语义变换。
推荐
A01H.方法签名宽进严出宽进
指输入参数,使用最大类型,满足使用时,越抽象宽松越好。 严出
指返回值,使用小类型,同输入相反,越具体严谨越好。
以下类型的顺序为从严谨到宽松,从具体到抽象,从小到大。
ArrayList<String>
具体容器,具体元素ArrayList<E>
具体容器,泛型元素List<E>
接口容器,泛型元素Collection<E>
更抽象容器Collection<? extend E>
更抽象接口,更宽松的类型协变