程序的执行语句分为3种: 顺序语句,条件语句,循环语句;
顺序语句就是代码一行一行的往下执行就行了;
Kotlin的条件语句主要有两种实现方式:if 和 when;
if条件语句:
fun largerNumber(num1: Int, num2: Int): Int {
var value = 0//value 使用var 关键字来声明,因为value需要改变值;
//这个if 和 else if else 和java一样进行判断
if (num1 > num2) {
value = num1
} else if (num2 > 10) {
value = 10
} else {
value = num2
}
return value
}
由于Kotlin中的if是有返回值的,则可以简化成:
/**
* Kotlin使用每个条件语句的最后一行代码作为返回值,并将返回值赋值给了value;
*/
fun largerNumber(num1: Int, num2: Int): Int {
val value = if (num1 > num2) {//由于value不会再变化,则将value声明成val;
num1
} else if (num2 > 10) {
10
} else {
num2
}
return value
}
//或可以直接return if条件语句执行的结果;
fun largerNumber(num1: Int, num2: Int): Int {
return if (num1 > num2) {//return
num1
} else if (num2 > 10) {
10
} else {
num2
}
}
由于上述代码largerNumber()函数只是返回了一下if语句的返回值,所以还可以简写成:
//如果每个 if想使用{},则使用这种写法,返回值类型为Int,Kotlin自动推导;
fun largerNumber2(num1: Int, num2: Int) = if (num1 > num2) {
num1
} else if (num2 > 10) {
10
} else {
num2
}
//如果不使用{}则使用这种写法;
fun largerNumber1(num1: Int, num2: Int) = if (num1 > num2) num1 else if (num2 > 10) 10 else num2
When 条件语句:类似于Java中的switch;
我先使用if 创建一个多else if的条件语句:
//Kotlin中判断字符串或对象相等可以直接使用==关键字,不需要调用equals()方法;
fun getScore(name: String) = if (name == "tom") {
86
} else if (name == "jim") {
77
} else if (name == "jack") {
98
} else if (name == "lily") {
100
} else {
0
}
当判断条件非常多时,则可以使用When;
//当每个case 后面的执行逻辑只有一样代码的时候可以省略{};
fun getScore(name: String) = when (name) {
"tom" -> 86
"jim" -> 77
"jack" -> 98
"lily" -> 100
else -> 0
}
when 语句允许传入一个人任意类型的参数,然后可以在结构体中定义一系列的条件
格式是:
匹配值 -> {执行逻辑}
使用when进行类型匹配:
/**
* Number 数值类型
* Boolean 布尔类型
* Char 字符类型
* String 字符串类型
* Array 数组类型
*
* when 语句进行类型匹配
*
*is 关键字相当于 java中instance of 关键字
*
* Int Long Float Double 等与数字相关的都是Number的子类;
* 所以这里可以使用类型匹配来判断传入的参数到底属于什么类型;
* 当类型指定为Number后,is 后面只能跟Number的子类进行判断;
*/
fun checkNumber(num:Number){
when(num){
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
when语句使用不带参数的用法:可实现复杂的if else if的执行;
//带参数的when就相当于Switch,参数需要用作判断条件case;
//直接使用参数进行比较;
fun getScore2(name: String) = when {
name == "Tom" -> 86
name.startsWith("Tom") -> 86//当需要实现这种效果时,则就需要使用不带参数的when方式;
name == "Jim" -> 86
name == "Jack" -> 86
name == "Lily" -> 86
else -> 0
}
fun largerNumber3(num1: Int, num2: Int) = when {
num1 > num2 -> num1
num2 > 10 -> 10
else -> num2
}
循环语句:
while循环与java的使用一样;
for循环:
区间语法:
升序:
闭区间 -- val range = 0..10//代码表示创建了一个0到10的区间,并且两端都是闭区间,数学的表达方式为[0,10];
开区间 -- val range = 0 until 10 //代码表示创建了一个0到10的区间,数学的表达方式为[0,10);
降序:
闭区间 -- val range = 10 downTo 1//代码表示创建了一个0到10的区间,数学的表达方式为[10,1);
for - in 循环:
for (i in 0..10) {
println(i)//执行结果为 0 1 2 ... 10;打印0到10;即遍历区间的每一个元素;
}
for (i in 0 until 10){
print(i)//执行结果为 0 1 2 ...9;打印0到9;即遍历区间的每一个元素;
}
/**
* for - in 循环每次执行循环默认是会在区间范围内递增1,相当于java中 for i循环的
* 中的i++;
* 当使用step 关键字时,比如 step 2 ,则时每次执行循环会在区间范围内递增2;
* 相当于for-i 循环中的 i=i+2的效果;
*/
for (i in 0 until 10 step 2){
print(i) //运行结果 0 2 4 6 8;
}
/**
* 降序同样也可以使用 step 关键字来跳过区间的一些元素;
*/
for (i in 10 downTo 1) {
print(i) //运行结果 10 9 8 7 6 .. 1;
}