携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的21天,点击查看活动详情
为了活动小家电,接着上篇搞!
- 警告:直接使用参数命名,避免频繁使用。
“不洁”
users.filter{ it.job == Job.Developer }
.map{ it.birthDate.dayOfMonth }
.filter{ it <= 10 }
.min()
“干净的”
users.filter{ user -> user.job == Job.Developer }
.map{ developer -> developer.birthDate.dayOfMonth }
.filter { birthDay -> birthDay <= 10 }
.min()
此外,我们可以说,使用 Kotlin 的次数越多,不变性越受欢迎,原因如下。
- 更喜欢使用 val 而不是 var
- 更喜欢只读属性而不是可变属性
- 喜欢只读集合而不是可变集合
- 更喜欢使用提供 copy() 的数据类
功能
在 Kotlin 中使用函数的规则是什么?
- 规则一:函数必须很小。
- 第二条规则:函数必须小于那个。
你为什么说长功能不好?
因为长函数
- 难以测试
- 阅读困难
- 难以重复使用
- 造成冗余
- 有很多改变的理由(因为有很多代码)
- 难以调试
因为它确实
此外,在 Kotlin 中编写函数时还有其他规则:
- 许多参数被分组到对象或使用列表中(前提是它们属于同一类型)。
- 函数不得有副作用(副作用是 GRADA)
- 函数的最大缩进级别为 2 深度。
- if/else/while 语句包含单行块
- 长的描述性名称比简短的神秘名称更好。
- 您需要更改代码以使其更易于阅读和重建。
- 应用命令查询分离原则。
*
*通常称为命令查询分离(CQS),它是命令式计算机编程的一个原则。每个方法都应该是执行操作的命令或将数据返回给调用者的查询,但不能同时是两者。
查询:返回结果并且不改变系统的可观察状态(无副作用)。
命令:更改系统状态,但不返回值。
例子
- 使用 when 子句时
“不洁”
fun parseProduct(response: Response?): Product? {
if (response == null) {
throw ClientException("Response is null")
}
val code: Int = response.code()
if (code == 200 || code == 201) {
return mapToDTO(response.body())
}
if (code >= 400 && code <= 499) {
throw ClientException("Invalid request")
}
if (code >= 500 && code <= 599) {
throw ClientException("Server error")
}
throw ClientException("Error $code")
}
“干净的”
fun parseProduct(response: Response?) = when (response?.code()){
null -> throw ClientException("Response is null")
200, 201 -> mapToDTO(response.body())
in 400..499 -> throw ClientException("Invalid request")
in 500..599 -> throw ClientException("Server error")
else -> throw ClientException("Error ${response.code()}")
}