前言
最近google举行的开发者大会,将kotlin作为android开发的第一语言,当然大家都知道为什么,oracle因为android用java的原因,一直告google侵权要求赔偿,google在android7.0的时候甚至直接换成了openjdk。
学习kotlin的原因
当然,我并不觉得第一语言换成kotlin就不用好好学习java了,虽然kotlin与java100%互通,但是android的源码都是java写的,如果要阅读android源码的话,还是要好好学java的。那么为什么要学习kotlin呢,上个项目用java起码写了2w+行代码,我确实感觉到的java要写的代码太多了,看起来复杂好多,所以一接触到kotlin,看到它简单的语法和并且也能直接进行adnroid开发的时候,我就觉得还是有必要学习这门语言的。
学习kotlin的目标
对kotlin的学习,我希望的还是能把它融入到android的开发中,不管公司以后需不需要,我平时自己练手的时候还是可以用到的,希望这段时间对kotlin的学习可以让我能够熟练的运用这门语言进行android开发吧。
kotlin基础
目前因为国内kotlin的资料还不是很多,因此学习的方式也就是常规的几种–官网,视频和书籍。当然我这里也有一套kotlin的教学视频,百度云地址是:kotlin视频。我是通过阅读官网的官方文档进行学习的,我感觉这样会更全面,理解也会更加深入。下面介绍kotlin环境的配置及kotlin的基本用法。
1.kotlin开发环境的配置
我这边是在idea上进行kotlin的开发的,首先点击File—>Setting,进入设置界面:
然后进入plugins,搜索kotlin,就可以看到如下界面了:
我这里是安装过的,没安装过的点击右边的install等待插件安装好重启idea就好了,创建一个新的kotlin项目,就可以进行kotlin的编写了
2.kotlin的基本用法
在项目里新建一个kotlin文件,就可以开始kotlin的学习了。
(1)kotlin的方法声明:
kotlin是函数式编程,可以有类也可以没有类,方法可以直接在外部声明调用也可以在类里面调用。例如一个两个数相加的方法:
fun sum(a: Int, b: Int): Int {
return a + b
}
kotlin的参数是需要做类型声明的,只是声明方式和java 有点区别而已,还有返回值,有的话可以在方法的()结尾加上:对应的数据类型,来声明返回值是什么类型,如果返回的是无意义的内容(即没有返回值)时,可以申明如下:
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
加上Unit,就相当与void,也可以不加,默认就是没有返回值的。
当然,上述的两个数相加的方式还有更简单的方法:
fun sum(a: Int, b: Int) = a + b
这样直接在方法的()结尾为方法赋值,这样看起来代码简洁了很多。
(2)kotlin变量的声明:
kotlin变量声明的关键字有两种:val和var
val:表示不可变变量,一般用来表示变量的值
var:表示可变变量,一般用来表示可以变的变量
变量的声明有以下几种写法
val a=3
var b="hehe"
b="cc"
val c:Int =3
像上面那样,var类型的可以更改,而val类型的你更改编译器就会报错,声明的时候可以带上数据类型也可以不带。
(3)string模板的使用:
在kotlin中,字符串里面可以用类似jquery的写法直接获取变量的值
例如:
var a = 1
val s1 = "a is $a"
a = 2
val s2 = "${s1.replace("is", "was")}, but now is $a"
运行的结果是:
a was 1, but now is 2
(4)kotlin里的条件判断
条件判断语句在各个语言里大同小异
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
}
return b
}
也可以用下面这种更简洁的写法:
fun maxOf(a: Int, b: Int) = if (a > b) a else b
(5)kotlin里的非空校验
kotlin里对空类型的检查十分严格,只有在声明方法返回值参数后面加上‘?’的方法才能返回空,所以不用像java那样频繁的做空类型检查
fun parseInt(str: String): Int? {
// ...
}
像以上这种声明的方法才可以返回null,没有像这样声明的方法返回null编译器也是会报错的。
(6)kotlin里的循环和list
要列一组list的值并且遍历打印它,代码如下:
val items = listOf<String>("苹果", "香蕉", "橘子")
for (item in items) {
println(item)
}
也可以这样
for (index in items.indices) {
println("item at $index is ${items[index]}")
}
用while循环遍历
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}
when的循环遍历方式
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
(7)kotlin对范围的使用
kotlin对那种包含在什么范围内给了简答的写法,比如1<=x<=10
以前在java中是这么写的
if(x>=1&&x<=10)
在kotlin中有更加简便的写法
val x=10;
if(x in 1..x){
println("this is in range")
}else{
println("this is out of range")
}
即上面的 x in 1..10,表示的就是1<=x<=10。
在循环中遍历也可以加上这样的范围判定,而且不用声明x
for (x in 1..5) {
print(x)
}
这样的结果就是
12345
step关键字
配合step使用就是这样子:
for(x in 1..10 step 3){
print(x)
}
结果是
14710
也就是说,step关键字表示的是除了能被后面跟着的数整除的数。
(8)kotlin的表达式
val items= listOf<String>("apple","苹果","香蕉")
items.filter { it.startsWith("a")}
.sortedBy { it }.map { it.toUpperCase() }
.forEach { println(it) }
上面的程序实际上是将首字母为a的 字符串全部转为大写,最终的结果是APPLE