Kotlin学习之旅(D6)-Kotlin Idioms part 1

版权声明:本文作者为BlueLzy,原出处为CSDN博客 - http://blog.csdn.net/blue_zy,转载请注明出处。 https://blog.csdn.net/blue_zy/article/details/83053703

Kotlin学习之旅第六天

今天的主题是:Kotlin中的习惯用法-第一部分

前言

Kotlin学习之旅(D1)-学习计划&基本语法

Kotlin学习之旅(D2)-基本语法

Kotlin学习之旅(D3)-类与继承

Kotlin学习之旅(D4)-函数与Lambda表达式

Kotlin学习之旅(D5)-高级语法

习惯用法

  • 创建DTOs

  • 函数的默认参数

  • 过滤list

  • String字符串模板

  • 类型判断

  • 遍历Map

  • 扩展函数

  • 创建单例

    —————————————————— Part 1

  • 使用表达式

  • 静态方法

  • 使用命名参数替代setter

  • 使用apply()

  • 处理可空对象

  • 使用as替代is

  • 快速创建JSON

创建DTOs

在Android中,我们经常需要创建Bean,也就是包括了setter,getter,toString等常见代码的一种类,一般用于接收后台返回的JSON格式的数据,在Kotlin里面,我们可以用很简单的语法完成Bean类的编写:

data class Customer(val name: String, val email: String)

我们定义了一个Customer类,构造方法传入两个参数name, email,这个类包括以下方法:

  • 所有属性的 getters (对于 var 定义的还有 setters)
  • equals()
  • hashCode()
  • toString()
  • copy()

在Kotlin中,这种类也叫做数据类,data class,一个关键字即可完成之前在Java里面需要写的大量模板代码,是不是很方便呢?

函数的默认参数

这个之前在讲函数的时候也提到过,可以减少重载方法的数量

fun foo(a: Int = 0, b: String = ""){...}

这里定义了一个foo函数,传入a,b两个参数,其中a的默认值为0,b的默认值为空字符串

那么在调用foo的时候,我们可以直接写

foo()

不传a,b的话,就使用默认值进行运算。

过滤list

val positives = list.filter { x -> x > 0 }

或者可以更短:

val positives = list.filter { it > 0 }

String字符串模板

这个之前也提到过,就是在字符串里面,加入其它的字符串变量,在Java中,需要通过format函数来进行赋值,在kotlin中也是变得更加简洁:

println("Name $name")

$ 加上 变量名 就可以实现在String中插入变量的功能

类型判断

这个特性是经常会用到的,例如在解析JSONObject,或者是需要把JSON转成需要的数据类型时,以前的写法

if(json.getXXX != null){
    if (json.getXXX instanceOf Foo){
        ....
    } else if (json.getXXX instanceOf Bar){
        ...
    } else {
        ...
    }
}

在Kotlin中,通过when + is 来实现

when (x) {
    is Foo //-> ……
    is Bar //-> ……
    else   //-> ……
}

是不是一目了然,妈妈再也不用担心我看代码看到心烦意乱了?

遍历map/pair类型的list

for ((k, v) in map) {
    println("$k -> $v")
}

如果是在Java里面,我们需要通过key来找value,然后再输出,代码量又是蹭蹭的往上串

扩展函数

emmm,这个之前在函数那一篇文章里面已经讲得比较清楚了,忘了的童鞋可以重温一下:Kotlin学习之旅(D4)-函数与Lambda表达式

直接上代码:

fun String.spaceToCamelCase() { …… }

"Convert this to camelcase".spaceToCamelCase()

String里面是没有spaceToCamelCase这个方法的,但是我们又不想通过继承让所有子类都加上这个方法,那么可以通过扩展函数来实现。

创建单例

单例模式我们经常都会用到,在Java里面的写法也是多种多样,但是所有形式的代码量都没有Kotlin里面来的简洁:

object Resource {
    val name = "Name"
}

没错,就是通过object关键字定义单例。

总结

这些习惯用法都是前人通过大量实践总结出来的,可以提高我们的开发效率,所以我们也应该多学习这些用法,努力让自己写出来的代码简洁易懂。

Day 6 - Learn Kotlin Trip, Completed.


猜你喜欢

转载自blog.csdn.net/blue_zy/article/details/83053703