Kotlin简单使用手册
来源:互联网 发布:知乎 江南七怪的实力 编辑:程序博客网 时间:2024/05/12 14:45
在昨天和做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 //错误,类型后没?,即不可空类型,自然不能等于nullvar 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 = 3when(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循环
- Kotlin简单使用手册
- GDB简单使用手册
- JUnit简单使用手册
- mysql 简单使用手册
- SIPp简单使用手册
- SVN简单使用手册
- SIPp简单使用手册
- Mac Git简单使用手册
- zlib简单使用手册
- SIPp简单使用手册
- instruments简单使用手册
- git简单使用手册
- Retrofit简单使用手册
- Jumpserver3.0简单使用手册
- Typora简单使用手册
- Kotlin简单使用
- Kotlin简单开发-RecyclerView
- Toolbar Kotlin 简单使用
- java.util包数据结构互相转换
- 关于协同过滤
- 转换VC工程为UNICODE版的方法
- MySQL 5.7 双主复制+keepalived,常规业务一般够用了
- 瀑布流UICollectionViewFlowLayout/UICollectionViewLayout
- Kotlin简单使用手册
- 黑马程序员_Java基础_我的Day26学习笔记
- React-native ListView 必须点击屏幕才会加载数据
- 338. Counting Bits
- webpack + vue.js + vue route
- MySQL索引原理及慢查询优化
- hibernate之关联映射
- error LNK2001: unresolved external symbol _IID_ISampleGrabberCB
- 交换两个变量的值