Kotlin学习之旅第六天
今天的主题是:Kotlin中的习惯用法-第一部分
前言
习惯用法
创建DTOs
函数的默认参数
过滤list
String字符串模板
类型判断
遍历Map
扩展函数
创建单例
—————————————————— Part 1
使用表达式
静态方法
使用命名参数替代setter
使用apply()
处理可空对象
使用as替代is
快速创建JSON
创建DTOs
在Android中,我们经常需要创建Bean,也就是包括了setter,getter,toString等常见代码的一种类,一般用于接收后台返回的JSON格式的数据,在Kotlin里面,我们可以用很简单的语法完成Bean类的编写:
1 | data class Customer(val name: String, val email: String) |
我们定义了一个Customer类,构造方法传入两个参数name, email,这个类包括以下方法:
- 所有属性的 getters (对于 var 定义的还有 setters)
equals()
hashCode()
toString()
copy()
在Kotlin中,这种类也叫做数据类,data class,一个关键字即可完成之前在Java里面需要写的大量模板代码,是不是很方便呢?
函数的默认参数
这个之前在讲函数的时候也提到过,可以减少重载方法的数量
1 | fun foo(a: Int = 0, b: String = "") |
这里定义了一个foo函数,传入a,b两个参数,其中a的默认值为0,b的默认值为空字符串
那么在调用foo的时候,我们可以直接写
1 | foo() |
不传a,b的话,就使用默认值进行运算。
过滤list
1 | val positives = list.filter { x -> x > 0 } |
或者可以更短:
1 | val positives = list.filter { it > 0 } |
String字符串模板
这个之前也提到过,就是在字符串里面,加入其它的字符串变量,在Java中,需要通过format函数来进行赋值,在kotlin中也是变得更加简洁:
1 | println("Name $name") |
$ 加上 变量名 就可以实现在String中插入变量的功能
类型判断
这个特性是经常会用到的,例如在解析JSONObject,或者是需要把JSON转成需要的数据类型时,以前的写法
1 | if(json.getXXX != null){ |
在Kotlin中,通过when + is 来实现
1 | when (x) { |
是不是一目了然,妈妈再也不用担心我看代码看到心烦意乱了?
遍历map/pair类型的list
1 | for ((k, v) in map) { |
如果是在Java里面,我们需要通过key来找value,然后再输出,代码量又是蹭蹭的往上串
扩展函数
emmm,这个之前在函数那一篇文章里面已经讲得比较清楚了,忘了的童鞋可以重温一下:Kotlin学习之旅(D4)-函数与Lambda表达式
直接上代码:
1 | fun String.spaceToCamelCase() { …… } |
String里面是没有spaceToCamelCase这个方法的,但是我们又不想通过继承让所有子类都加上这个方法,那么可以通过扩展函数来实现。
创建单例
单例模式我们经常都会用到,在Java里面的写法也是多种多样,但是所有形式的代码量都没有Kotlin里面来的简洁:
1 | object Resource { |
没错,就是通过object关键字定义单例。
总结
这些习惯用法都是前人通过大量实践总结出来的,可以提高我们的开发效率,所以我们也应该多学习这些用法,努力让自己写出来的代码简洁易懂。
Day 6 - Learn Kotlin Trip, Completed.