跳至主要內容

A01.编码风格既江湖规矩

trydofor原创规则易读排版大约 3 分钟

A01.编码风格既江湖规矩

编码风格既是江湖规矩,江湖既是非,历史上这样的争辩非常之多。

  • 空格和Tab缩进:0x200x09
  • }要不要换行:} 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> 更抽象接口,更宽松的类型协变