写过Android的童鞋,应该都听说过kotlin,谷歌也是极力推荐使用kotlin来写Android。kotlin有着很多的优点,比如:代码精简,空指针异常判断,协程的优势等等。我是看了郭霖大佬《第一行代码Android》第三版之后,当初笔记是写在代码里的,现在把代码重新梳理一遍,写到博客里,顺道照着书再复习一遍Android和kotlin。虽然很多公司仍然用的java写的Android,但是技多不压身嘛嘻嘻。这个笔记只是记录kotlin相关的学习。
Kotlin简介
kotlin是jetBrains公司开发与设计的,因此现在IntelliJ IDEA本身就加入了kotlin支持。
kotlin和java是可以共存的,像Android当中,可以同时拥有.kt文件也可以有.java文件,为什么呢?
首先先搞明白java是 编译型语言 还是 解释型语言。虽然java是先编译后运行,但是他并不是编译型语言。因为java编译之后生成的是class文件,class文件则是放入java虚拟机识别,虚拟机担任的是解释器的角色,class文件解释成二进制数据让计算机执行
java虚拟机只是与class文件打交道,它不关心class文件是哪里来的,因此java与kotlin共存的原理也就了解了,不论是java还是kotlin他们编译生成的文件都是class文件。
第一个HelloKotlin
1 | fun main(){ |
首先安装IDEA,这个直接官网下载就可以了。打开IDEA ,File->new Project,选择Kotlin,然后next,写项目名称,然后finish就可以啦。在项目目录下,src右击-> New -> Kotlin file/Class,填写文件名字,类型选择File即可。然后输入以上代码,第一个Hello Kotlin就ok了
变量和函数
变量
kotlin的变量和java有很大的不同,java中定义变量需要具体声明变量类型,而kotlin只有两种val和var。因为kotlin拥有很优秀的类型推导机制。
1 | //Kotlin |
注意: kotlin代码是不用写分号的,其实写了也没关系,编译器直接无视掉了
kotlin的类型推导也不总是正常工作的,比如某个变量需要延迟赋值的话仍然需要显示声明变量类型才可以
1 | lateinit var a : String |
注意:永远优先使用val,val无法满足需求的时候再改var。
在java中除非主动设定final,否则这个变量一直是可变的。当项目变得复杂的时候,永远不知道这个变量什么时候被谁改掉了,容易导致各种问题,kotlin强制要求必须让开发者主动声明变量是否可变。
函数
1 | fun methodName(a : Int, b : Int) : Int{ |
语法规则: fun 方法名(参数) : 返回值类型{}
参数格式:参数名:参数类型
无返回值就不写返回值类型,不用写return。
语法糖:
1 | //语法糖,当函数中只有一行代码时,可以省去return,用=代替,返回值类型也可省去,kotlin推到机制即可推导出类型 |
这也是我比较喜欢kotlin的一方面,可以少写很多东西(o゚▽゚)o ,越往后学,就会发现很多看起来很复杂的代码,改到kotlin当中,轻轻松松没几行就完成了。
逻辑控制
if条件语句
kotlin的条件语句有两种实现方式 if 和 when
kotlin的if和java的基本没区别
1 | fun largerNum(num1:Int,num2:Int):Int{ |
Kotlin的if语句相比java还有一个额外的功能,他是可以有返回值的
1 | fun largerNum(num1:Int,num2:Int):Int{ |
if语句将每个条件的最后一行代码作为返回值,并将返回值赋值给了value变量。最终将value变量返回。当然以上代码还可以更加精简。
1 | fun largerNum(num1:Int,num2:Int):Int{ |
继续简化
1 | fun largerNum(num1:Int,num2:Int)=if(num1 > num2){ |
是不是觉得kotlin的简化爽的一批。。。
when语句
会java的同学,应该了解switch语句吧,非常不好用,只能传整型变量最为条件,一个一个case比对,还必须每个case写break,十分不爽。那么看了kotlin的when语句解决了以上问题
写个例子:输入学生姓名,返回对应的成绩分数
1 | fun getScore(name:String)=if (name == "Tom"){ |
上面使用了if判断学生姓名,返回分数,用了很多if,else,这个时候就可以考虑使用when了
1 | fun getScore(name : String)=when(name){ |
清清爽爽,而且when语句和if一样也是可以有返回值的,因此也可以用语法糖。
when语句可以使用任意类型的参数,包括类型匹配
1 | //when的类型匹配 |
1 | //when的不带参数用法 |
循环语句
1 | //kotlin的while和java的while没有任何区别 |