2.Kotlin 程序的逻辑控制(if when写法)

程序的执行语句分为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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值