美文网首页
【KtAndroid - 4】新颖的流程控制

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

作者: 会飞的小魚 | 来源:发表于2020-04-26 20:48 被阅读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

综上结论:

  • const修饰的常量是直接常量,何为直接常量?(直接能通过类名.常量名)的常量。按照上图所说也就是publc static final ...。而上图所说TEST_FIELD_1则是间接常量,需要通过对象.getTEST_FIELD_1
  • const只能修饰类级别的常量字段,何为类级别(就是成员常量,非方法常量也就是我们经常所说的局部常量)

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. 总结

  • kotlin中 if 有了更多、更新颖的用法,如:if(x > 1 .. 10)var m = if(x > 1 .. 10)...
  • kotlin中 多分支并不是传统的 switch 而是 when 表达式,在when 表达式else 等同于 switch 中的 default: 语句。
  • ifwhen 表达式,循环都支持区间
  • 在循环中以indices可遍历下标,withIndex()可遍历键值

相关文章

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

    0. 序篇 接上篇的留的小问题。 关于以上两种定义常量的方式在转化成Java代码后是: 调用: 如果是下图: 报错...

  • Python程序结构

    2018年6月27日笔记 python流程控制 1.python流程控制语句结构 4种流程控制语句结构:ifif ...

  • 4、流程控制

    重点: 其中:for、while、dowhile归为一类。 主要有两点: 1、把表达式的可能性较大的尽量往前放2、...

  • 04-流程控制及while循环

    流程控制 流程: 计算机执行代码的顺序,就是流程。 流程控制: 对计算机代码执行顺序的控制,就是流程控制。 流程分...

  • 5-流程控制

    流程控制 流程 计算机执行代码的顺序就是流程 流程控制 对计算机代码执行顺序的管理就是流程控制 流程分类 流程控制...

  • day03

    今日内容介绍 1、引用类型变量的创建及使用 2、流程控制语句之选择语句 3、流程控制语句之循环语句 4、循环高级 ...

  • 二级-2.Python流程控制

    流程控制 流程:计算机执行代码的顺序就是流程。 流程控制:对计算机代码执行顺序的管理就是流程控制。 流程控制一共分...

  • js流程控制

    2 - 流程控制 2.1 流程控制概念 2.2 顺序流程控制 ​ 顺序结构是程序中最简单、最基本的流程控制,它...

  • JAVA(4)流程控制

    流程控制 条件语句之 if 如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那...

  • 4.md

    4. 流程控制语句 除了 while 语句,Python还拥有在其他语言里常见的控制语句,以及一些好玩的语句。 4...

网友评论

      本文标题:【KtAndroid - 4】新颖的流程控制

      本文链接:https://www.haomeiwen.com/subject/sixswhtx.html