Kotlin简单使用手册

在昨天和做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循环
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,450评论 9 118
  • Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Google玩儿An...
    蓝灰_q阅读 77,103评论 31 489
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 工欲善其事必先利其器,首先要先配置开发环境和选好开发工具,我在这里使用的是Android Studio2.3.3和...
    Orz013阅读 9,319评论 5 1
  • 好友莲约我到她的新家品茶。房子并不大,却别具匠心地在窗台旁做了个小茶室,竹席编制的榻榻米上放着一张古色古香的茶桌,...
    江南烟雨阅读 5,167评论 1 7