【KtAndroid - 4】新颖的流程控制

2020-04-26  本文已影响0人  会飞的小魚

0. 序篇

接上篇的留的小问题。

companion object {
        val TEST_FIELD_1 = "我是Kotlin中的成员常量1"
        const val TEST_FIELD_2 = "我是Kotlin中的成员常量2"
}

关于以上两种定义常量的方式在转化成Java代码后是:

1.png

调用:

2.png

如果是下图:

3.png

报错!

4.png

综上结论:

1. Kotlin中新颖的流程控制

流程控制我的都知道:顺序、循环、分支。在cc++java等编程语言中,这些流程控制几乎都是一样的。

然而Kotlin为我们的流程控制提供了许多新特性,让我们一起来看看。

一. if (条件)分支

传统用法如下:

public class JavaFile {
    public static void main(String[] args) {
        int m = 3;

        //if ...
        if (m == 1) System.out.println("m = 1");

        //if ... else ...
        if (m == 2) {
            System.out.println("m = 1");
        } else {
            System.out.println("m != 1");
        }

        //三目运算
        int b = m == 1 ? m : 3;
    }
}

Kotlin中的新用法:

fun main() {
    var a: Int = 3
    var b: Int = 4

    var d = if (a > b) a else b

    var e: Int = if (a > b) {
        var a1 = a + 10
        a1
    } else {
        var b1 = b + 10
        b1
    }
    println("a=${a}")
    println("b=${b}")
    println("d=${d}")
    println("e=${e}")
}

运行结果:

5.png

**注意:kotlin中并不支持 三目运算 **

如果需要类似操作

var d = if (a > b) a else b

二. if 区间

在kotlin中if的新用法不仅仅是那么简单,同时它也支持区间判断

在之前的文章 【KtAndroid -2 】基础语法 中我已经提到过for循环区间的使用。接下来我们来看看if区间是如何使用的

//if区间的用法
fun main() {
    var a = 10

    if (a in 1 .. 10) {
        println("a如果等于1~10中的任意一个数,将打印该语句。")
    }

    if (a in 1 until 10){
        println("a如果等于1~10且不包含10(即:1~9)中的任意一个数,将打印该语句。")
    }

    if(a in 1 until 10 step 2){
        println("a按照步进区间判断如果等于1、3、5、7、9中的任意一个数,将打印该语句。")
    }
}

运行结果:

6.png
//if区间的用法
fun main() {
    var a = 9

    if (a in 1 .. 10) {
        println("a如果等于1~10中的任意一个数,将打印该语句。")
    }

    if (a in 1 until 10){
        println("a如果等于1~10且不包含10(即:1~9)中的任意一个数,将打印该语句。")
    }

    if(a in 1 until 10 step 2){
        println("a按照步进区间判断如果等于1、3、5、7、9中的任意一个数,将打印该语句。")
    }
}

运行结果:

7.png

2. when表达式

when表达式类似于java中的switch

fun main() {
    var x: Int = 5
    when (x) {
        1 -> println("x == 1")
        2 -> println("x == 2")
        3 -> println("x == 3")
        4 -> println("x == 4")
        5 -> println("x == 5")
        else -> println("x == 其他值")
    }
}

运行结果:

当然,还有多值语句:

fun main() {
    var x: Int = 5
    
    when (x) {
        1, 2, 3, 4 -> println("x等于1,2,3,4中的任意一个")
        else -> {
            println("x任何一个值都不等于")
            println("我是块语句,我可以打印多条语句!")
        }
    }
}

结果:

9.png

关于->的说明,->是lambda表达式,你暂且可以将它当做一个匿名函数,由于不好表述,我就用以下代码作为解释。

///例如java中的
public static void main(String[] args) {
    int x = 5;
    switch (x) {
        case 1:
        case 2:
        case 3:
        case 4:
            func(x);
        default: {
            System.out.println("x任何一个值都不等于");
            System.out.println("我是块语句,我可以打印多条语句!");
        }
    }
}

public static void func(int x) {
    System.out.println("x等于1,2,3,4中的任意一个");
}

when的用法还有很多:

//集合判断
fun main() {
    val items = setOf("apple", "banana", "kiwi")
    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}
//方法判断
fun main() {
    println(func4(0))
}

fun func4(code: Int): String = when (code) {
    0 -> "登录成功!"
    -1 -> "登录失败!"
    else -> "未知错误!"
}

...

至于其他操作,如:区间is 等,就自己去试试吧。

3. 循环(for、while、 do ... while)

对于三大流程控制中的循环一块,比起条件控制,循环控制简直最常用的一块了。

然鹅初次涉及编程的人大概也是最头疼这一块了,在寻常的循环控制当中,简单地迭代、遍历已经能满足程序的运作。但是kotlin却为我们提供了更加新颖的流程控制。

一. for循环

首先来看for循环

java程序中:

public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
}

Kotlin中相同实现功能则是:

fun main(args: Array<String>){
    for(i in 0 .. 9){
        println(i)
    }
}

java中迭代集合:

public static void main(String[] args) {
    List<String> array = new ArrayList();
    array.add("one");
    array.add("two");
    array.add("three");

    for (String s : array) {
        System.out.println(s);
    }
}

kotlin中迭代集合:

fun main(args: Array<String>){
    val arr:Array<String> = arrayOf("one","two","three")
    for (s in arr) {
        println(s)
    }
    
    //按遍历索引
    for (i:Int in arr.indices) {
        println("i=$i --- arr=${arr[i]}")
    }
    
    //键、值遍历
    for ((i: Int, v: Any) in arr.withIndex()) {
        println("i=$i ----- v=$v")
    }
}

二. while、do ... while 循环

与java几乎无异了,

while

java代码:

public static void main(String[] args) {
    int i = 0;
    while (i <= 10) {
        System.out.println(i++);
    }
}

kotlin代码:

fun main(){
    var i: Int = 0;
    while (i in 0..9) {
        println(i++)
    }
}

do ... while

java代码:

public static void main(String[] args) {
    int m = 0;
    do {
        System.out.println(i++);
    } while (m <= 10);
}

kotlin代码:

fun main(){
    int m = 0
    do {
        println(i++)
    } while (m in 0 until 11);
}

循环这一块多说无益,需要自己结合各种kotlin中的新特性来理解。

4. 总结

上一篇 下一篇

猜你喜欢

热点阅读