写在最前面

这系列文章是总结《第一行代码》中对Kotlin的介绍而写下的,是自己的总结和经验分享
适合有过Java使用经验,或者有面向对象编程经验的读者速成Kotlin
如果您是完全的0基础,可能阅读上会有一些困难

分号

kotlin中是不需要在结尾加分号的

变量

只能使用val 和 var 作为变量
val:不可变的变量
var:可变的变量

显示声明

我们可以显式声明变量,直接告诉kt我们生成的变量的类型

1
val a:Int = 10

指定了不可变变量a的类型是int

对象数据类型

在Kotlin中,原本Java的基本数据类型都变成了数据对象类型,拥有自己的方法和继承结构,对应下来为:
Int Long Short Float Double Boolean Char Byte

函数

定义函数

比方说

1
2
3
fun methodName(param1:Int , param2:Int):Int {
return 0
}

methodName就是方法名,没什么好说的
括号内的是参数列表,每个的格式是“参数名字:类型”,多个之间使用 , 分开
冒号后面是返回类型,不写即为空

当一个函数只有一行代码的时候,Kotlin允许我们不编写函数体,直接将唯一的代码写在尾部并用等号连接
fun methond(num1:Int,num2:Int): Int = max(num1,num2)
甚至因为Kt优秀的推导机制,可以写作:
fun methond(num1:Int,num2:Int) = max(num1,num2)

逻辑控制

if-else

Kt中的if else 和Java完全相同,并且在此基础上增加了一个特性:它可以具有返回值
Kt中的if else 的返回值是语句中每一个条件最后一行代码的返回值,比如我们需要一个获得二者中更大值的函数,我们可以写作:

1
2
3
4
5
6
7
8
9
fun LargeNum(num1:Int,  num2:Int): Int{
val value if(num1 > num2) {
num1
}else{
num2
}

return value
}

最终可以精简为:
fun LargeNum(num1:Int , num2:Int) = if(num1 > num2) num1 else num2

when

when可以看作是switch的强化版
when允许传入一个任意类型的参数,之后在when的结构体中定义一系列的条件:

1
2
3
when(变量){
匹配值-> {执行的语句}
}

比如一个查询学生成绩的代码可以写为:

1
2
3
4
5
6
fun getScore(name:String) = when(name){
"A" -> 86
"B" -> 77
"C" -> 0
else -> 60
}

除了精准匹配之外,when还支持类型匹配

1
2
3
4
5
6
7
fun checkNumber(num:Number){
when(num){
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("??")
}
}

此外,when语句也可以不带参数,把对应的表达式完整写在结构体中即可:

1
2
3
4
5
fun getScore(name:String) = when{
name == "A" -> 86
name == "B" -> 70
else -> 60
}

Kotlin中,判断字符串或对象是否相等可以直接使用==

循环语句

while循环和Java完全相同
for-i被kotlin直接舍弃,而for each 被大幅度加强为了for in

区间
我们可以使用..来创建一个区间,比如val range = 0..10 两端都是闭区间,意味着0和10都被包含

有了区间之后我们就可以使用它来进行for循环了,比如

1
2
3
4
5
fun main()}{
for(i in 0..10){
println(i)
}
}

不过我们知道:在程序设计中,还是左闭右开的范围更实用,我们可以使用until来设计一个左闭右开的区间
val range = 0 until 10

step
正常情况,for in使用递增,以此来达到我们想要的for-i效果,不过我们可以利用step关键字来跳过某一步
for(i in 0 until 10 step 2){}
这里的step2表示每次以2作为间隔来递增,即每一次都是i = i+2的效果

downTo
利用downTo进行降序的区间,两边都是闭区间。如10 downTo 1即是[10,1]

step同样可以被用于downTo