美文网首页Kotlin
Kotlin简单使用手册

Kotlin简单使用手册

作者: 扬州慢_ | 来源:发表于2017-01-15 14:37 被阅读232次

    在昨天和做android的前辈一番交谈后,觉得很惭愧,许多东西还只是知其然而不知其所以然,也深感自己的技术还太浅薄。以后要更加努力地学习,要着重学习原理、方法论,不能只停留在会用的阶段。

    今天又要献丑分享一些关于使用Kotlin这门新兴的编程语言的一些要注意的地方。因为上一个项目全部使用了kotlin,算是给后面接手的朋友的一份交接文档吧。

    先推荐三篇文章吧:

    Kotlin for android developers为什么说Kotlin值得一试Kotlin: Java 6 废土中的一线希望

    这三篇文章都是我反复阅读参考很多遍的关于kotlin使用的中文教程,当然,有时候遇到了中文教程里讲的不清楚,或者是感觉翻译不太对胃口的,可以直接去查阅官方文档

    遇到问题请善用资料,基本上都能从中得到解答。以下简单介绍一下常见的几个注意点。

    变量类型:可空

    kotlin的特性之一是类型安全。定义变量时需要定义该变量是否为空,一旦要求变量不能为空,那后续的空指针问题自然也不复存在。我们先来看kotiln里是如何定义变量的:

    java:
    
    String str = "test";
    final String str2 = "test2";
    String str3;
    
    kotlin:
    
    var str = "test"
    val str2 = "test2"
    var str3:String ?= null
    

    kotlin使用var,val关键字定义变量,如果在定义变量时直接赋值,则可以不用指定变量类型,否则需要在变量名后使用“:”来指定类型。在类型后加“?”表示该变量可空。如果变量可空,那在后续使用变量时,就必须先判断是否为空。

    另外从代码中可以看出很重要的一点,那就是:从此再也不用写分号啦

    var a:Int = null  //错误,类型后没?,即不可空类型,自然不能等于null
    var a:Int? = null  //正确
    
    val canNull: Int ? = 0 
    canNull.toFloat  //错误,可空变量调用时要判断空
    canNull?.toFloat   //正确,(如果是null,什么都不做)
    canNull!!.Float   //正确,(如果null,报空指针)
    val canNotNull: Int  = 0 
    canNotNull.toFloat  //正确
    

    那如果在定义变量时(例如定义成员变量),又想该变量不为空,又不想子定义时就初始化要怎么办呢?使用lateinit关键字

    lateinit var test:String //正确
    lateinit val test:String //错误
    lateinit var test:Float //错误
    

    关于lateinit关键字的使用限制:

    lateinit modifier is allowed only on mutable properties
    lateinit modifier is not allowed on primitive type properties

    可见,lateinit修饰符只能修饰不可空类型,并且不允许修饰基础类型(四类八种基础类型int, double,boolean等)。

    常用语法:

    switch

    java:
    
    int test = 1;
    switch(test) {
        case 1:
            ...
            break;
        default:
            break;
    }
    
    kotlin:
    
    when (test) {
        1 -> fragment = ShopFragment()
        else -> {
        }
    }
    

    这只是when最简单的用法,但kotlin里when的用处要比switch强大得多,when可以返回值,甚至可以在匹配条件里检测参数类型等,例如:

    val result = when (x) { //返回值
        0, 1 -> "test"
        else -> "else"
    }
    
    when(view) { //检测参数类型,并且可见,在kotlin里,instanceof使用is代替
        is TextView -> view.setText("I'm a TextView")
        else -> view.visibility = View.GONE
    }
    
    var test = 3
    when(view) { //检测参数范围
        in 0..10 -> {
            ...
        }
        else -> {
            ...
        }
    

    更多用法详见教程。

    for循环

    java:
    
    for(int i =0; i < 5; i++) {
    }
    
    kotlin:
    
    for(i in 0..4) {
    }
    
    for (item in listData) { //遍历列表,直接操作列表内的对象
      item.method()
    }
    
    for (i in listData.indices) { //遍历列表带行index
    }
    
    for((i, item) in list.witnIndex()) { //加强版
    }
    
    listData.forEach { it.method() } //变种的for循环
    

    相关文章

      网友评论

      • 96fab5a8aee0:“lateinit修饰符只能修饰不可空类型,并且不允许修饰基础类型” kotlin哪来的基本累心
        扬州慢_:@掀起一片狂澜 kotlin 中的为什么会没有基本类型呢?可能是叫法不同吧这个我没有深究,文中意思是 lateinit 无法修饰 Int,Long这一类类型,因为这些基本类型本身就没有null这个概念。

      本文标题:Kotlin简单使用手册

      本文链接:https://www.haomeiwen.com/subject/hegybttx.html