0
点赞
收藏
分享

微信扫一扫

Android Notes|思码逸问题处理记录 ing


前言

从年初开始,我司便开始将思码逸作为了 OKR 必选项,从开始的抵触,到现在的坦然,也算是被锤之路...

简单附上对应问题解决的思路或者方式,以便于小伙伴类似直接操作。

个人对于思码逸的看法,其实多属于还是基于阿里一些规范,虽说有点繁琐,甚至有些许难受,长远来看,未尝不是一件好事儿。

点滴做起,基于思码逸,一起来改善自己代码吧~

先附上阿里编码指南:

  • ​​p3c​​

Local variable and method parameter names should comply with a naming convention

截取一段问题代码截图:

Android Notes|思码逸问题处理记录 ing_3c

问题为:命名不规范导致。

这里默认命名正则表达式为:

  • ^[a-z][a-zA-Z0-9]*$:

一般看具体类型,使用不同命名方式,不过客户端大部分还是小驼峰形式吧。

[p3c]Magic values, except for predefined, are forbidden in coding.

下面截取一段问题代码,以及官方描述提示:

Android Notes|思码逸问题处理记录 ing_Android_02

大概的意思就是,不允许出现未定义的魔法值。

而所谓的魔法值,则是在代码中出现未定义的类型:文本、type 等。

按照业务实际需求进行统一管理即可。

Static non-final field names should comply with a naming convention

提示如下:

Android Notes|思码逸问题处理记录 ing_3c_03

大概的意思就是静态非 final 命名不规范,这里直接追加 final 即可。

Jump statements should not be redundant

问题代码如下:

Android Notes|思码逸问题处理记录 ing_基本类型_04

提示如下:

  • Jump statements such as ​​return​​​ and ​​continue​​ let you change the default flow of program execution, but jump statements that direct the control flow to the original direction are just a waste of keystrokes.

Fix:

  • 独立出来,不满足条件直接 return 即可。

Deprecated code should be removed

问题代码如下:

Android Notes|思码逸问题处理记录 ing_基本类型_05

提示如下:

  • 此规则旨在用作跟踪标记为已弃用的代码的一种方式。弃用的代码最终应该被删除。

Fix:

  • 历史包袱,只能看具体代码,具体分析,如果有替代则使用推荐的。(真是一句废话...

Unused method parameters should be removed

问题代码如下:

Android Notes|思码逸问题处理记录 ing_Android_06

提示如下:

  • 未使用的参数具有误导性。无论传递给此类参数的值如何,行为都是相同的。

附上对应代码图:

Android Notes|思码逸问题处理记录 ing_代码规范_07

当然以下是一些例外情况:

  • that are annotated with ​​@javax.enterprise.event.Observes​
  • in overrides and implementation methods
  • in interface ​​default​​ methods
  • in non-private methods that only ​​throw​​ or that have empty bodies
  • in annotated methods, unless the annotation is ​​@SuppressWarning("unchecked")​​​ or ​​@SuppressWarning("rawtypes")​​, in which case the annotation will be ignored
  • in overridable methods (non-final, or not member of a final class, non-static, non-private), if the parameter is documented with a proper javadoc.

[p3c]To judge the equivalence of floating-point numbers, == cannot be used for primitive types, while equals cannot be used for wrapper classes.

问题代码如下:

Android Notes|思码逸问题处理记录 ing_包装类_08

提示如下:

  • 浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断

如何 Fix?

  • 本质理解为一个精度问题,例如某些情况下 0.1 和 0.111 是相等的。

只需要将原本的 == 替换为 Float.compare(a,b) == 0 即可。

Others 知识点回顾:

回顾基本数据类型和包装类型:

基本类型

包装类型

boolean

Boolean

char

Character

int

Integer

byte

Byte

short

Short

long

Long

float

Float

double

Double

而它们之间区别如下:

  • 基本类型均有默认值,而包装类型初始化则是 NULL。也就是说基本类型可以用直接使用,而包装类型必须实例化后才可以使用;
  • 包装类型实际是对象的引用,new 一个包装类型的时候,实际上生成了一个指针指向此对象,而基本类型则事直接存储数据值;

这里额外回顾下 == 和 equals 区别吧:

  • == 对于基本类型来说是比较值,对于引用类型来说则是比较引用地址;
  • equals 默认情况下是比较引用地址,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了比较值,所以说一般情况下 equals 比较的是值是否相等。

THK

  • ​​你真的懂 == 和 equals 的区别吗?​​
举报

相关推荐

0 条评论