kotlin变量、函数及程序逻辑控制
内容来自郭霖《第一行代码(第三版)》,本文仅作为本人学习加强记忆之用
变量
val(value):用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应java中的final变量
var(variable):用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重新赋值,对应Java当中的非final变量
Java和kotlin数据类型对照表
Java基本数据类型 | Kotlin对象数据类型 | 数据类型说明 |
---|---|---|
int | Int | 整型 |
long | Long | 长整型 |
short | Short | 短整型 |
float | Float | 单精度浮点型 |
double | Double | 双精度浮点型 |
boolean | Boolean | 布尔型 |
char | Char | 字符型 |
byte | Byte | 字节型 |
小结:
- kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型,在Java中int是关键字,而在kotlin中成了一个类,它拥有自己的方法和继承结构;
- 永远优先使用val来声明一个变量,而当val没有办法满足你的需求时才用var,这样设计出来的程序会更加健壮,也更加符合高质量的编程规范;
函数
定义函数的语法规则:
fun methodName(param1:Int,param2:Int):Int{
return 0
}
fun(function的简写)是定义函数的关键字,无论你定义什么函数,都一定要使用fun来声明;
methodName函数名称,可以根据自己的喜好起任何名字;
函数名后面紧跟着一对括号,里面用来声明该函数接收什么参数,参数数量可以是任意多个,参数声明格式是参数名:参数类型
,其中参数名是可以随便定义的,如果不想接收任何数据,这部分可以不写;
参数括号后面的那部分是可选的,用于声明该函数返回什么类型的数据,上述实例就表示该函数会返回一个Int类型的数据;
最后两个大括号之间的内容就是函数体了,我们可以在这个里面编写该函数的具体逻辑;
语法糖
当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数的尾部,中间用等号连接即可,例如:
fun largerNumber(num1:Int,num2:Int):Int{
return max(num1,num2)
}
上述函数改用语法糖写法如下:
fun largerNumber(num1:Int,num2:Int)=max(num1,num2)
程序的逻辑控制
程序的执行语句主要分为三种:顺序语句、条件语句和循环语句
条件语句
Kotlin中的条件语句主要有if和when
if语句
fun largerNumber(num1:Int,num2:Int):Int{
var value=0
if(num1>num2){
value=num1
}else{
value=num2
}
return value
}
kotlin中if语句相较于Java多了一个额外的功能,它是可以有返回值的,返回值就是if语句每一个条件中最后一行代码的返回值。因此,上述代码就可以简化成:
fun largerNumber(num1:Int,num2:Int):Int{
val value=if(num1>num2){
num1
}else{
num2
}
return value
}
由于这里没有重新赋值的情况,因此可以用val关键字来声明value变量,最终将value变量返回
由于value其实也是一个多余的变量,我们可以直接将if语句返回,这样可以继续精简如下:
fun largerNumber(num1:Int,num2:Int):Int{
return if(num1>num2){
num1
}else{
num2
}
}
由于函数体只有一行代码,可以改用语法糖写法,继续精简如下:
fun largerNumber(num1:Int,num2:Int)=if(num1>num2){
num1
}else{
num2
}
继续精简,压缩成一行代码:
fun largerNumber(num1:Int,num2:Int)=if(num1>num2)num1 else num2
when语句
例如一个查询考试成绩的功能,输入一个学生姓名,返回该学生的考试的分数的函数,先用if语句来实现,如下:
fun getScore(name:String)=if(name=="Tom"){
86
}else if(name=="Jim"){
77
}else if(name=="Jack"){
95
}else if(name="Lily"){
100
}else{
0
}
改成when语句写法,如下:
fun getScore(name:String)=when(name){
"Tom"->86
"Jim"->77
"Jack"->95
"Lily"->100
else ->0
}
when语句允许传入一个任意类型的参数,然后可以在when的结构体中定义一些列的条件,格式是:
匹配值->{执行逻辑}
当执行逻辑只有一行代码时{}
可以省略,when除了精确匹配之外,还可以进行类型匹配,例如:
fun checkNumber(num:Number){
when(num){
is Int->println("number is Int")
is Double->println("number is Double")
else ->println("number not support")
}
}
循环语句
kotlin区间的概念
val range=0..10
上述代码表示一个0到10的区间,并且两端都是闭区间,这意味着0到10这两个端点都是包含在区间中的,用数学的方式表达出来就是[0,10]
val range=0 until 10
上述代码表示创建了一个0到10左闭右开区间,数学表达式式[0,10)
for-in循环
for(i in 0..10){
println(i)
}
打印结果,如下:
0
1
2
3
4
5
6
7
8
9
10
Process finished with exit code 0
for(i in 0 until 10 step 2){
println(i)
}
打印结果,如下:
0
2
4
6
8
Process finished with exit code 0
使用downTo
关键字降序区间
fun forTestFun4(){
for(i in 10 downTo 0){
println(i)
}
}
打印结果如下:
10
9
8
7
6
5
4
3
2
1
0
Process finished with exit code 0