侧边栏壁纸
  • 累计撰写 416 篇文章
  • 累计创建 65 个标签
  • 累计收到 150 条评论

目 录CONTENT

文章目录

Kotlin学习笔记-常见语法if,for,when,label等

Z同学
2021-07-01 / 0 评论 / 0 点赞 / 1,029 阅读 / 4,462 字
温馨提示:
本文最后更新于 2021-12-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍一些常见的语法例如if、for,when,标签,循环等

条件控制

if表达式

介绍一个if语句,包含一个布尔表达式和一条或者多条语句

实例:

//传统用法  比较两个数值的大小,并进行赋值
var a = 1;
var b = 3;
var max=b;
if (a > b) {
    max = a
}
//使用else
var max1:Int
if(a>b){
    max1=a
}else{
    max1=b
}

//表达式模式
var max2= if(a>b) a else b



//第三种表达式的 实际写法是这样,但是我们可以省略括号
var max3 = if(a>b){
    println("Choose a")
    a
}else{
    println("choose b")
    b
}
//以上三种形式得到的数据是一样的。
使用区间

介绍可以使用in 运算符来检查某个数值是否在指定区间内。区间格式为x..y

实例:

var a1=5
var a2=9
if (a1 in 1..8){
    println("a1 在区间内")
}else{
    println("a1 不在区间内")
}

if (a2 in 1..8){
    println("a2 在区间内")
}else{
    println("a2 不在区间内")
}

输出结果:

a1 在区间内
a2 不在区间内
When 表达式

介绍: when 将它的参数和所有分支条件顺序比较。直到某个分支满足条件

可以将其理解成java 之中的Switch 操作符

实例1:

var x:Int=2
// 表达式模式
when(x){
    1 -> print("x==1")
    2 -> print("x==2")
    else ->{//等同于Switch 之中的default
        print("x 不是1 也不是2")
    }
}

注意
1.如果两个分支处理结果相同,可以通过”,“ 逗号,将比较条件合并

2.其中的else 等同于Switch 之中的default。其他分支都不满足的情况下才会取得else里面的值

实例2:

    when (x) {
        0, 1 -> print("x == 0 or x == 1")
        2 -> print("x==2")
        else -> { 
            print("x 不是1 也不是2")
        }
    }

实例3:

var y="zinyan"
when(y){
    "zin" -> {
        println("匹配上了 zin")
    }
    "yan" -> {
        println("匹配上了 yan")
    }
    "zinyan" -> {
        println("匹配上了 zinyan")
    }
    else->{
        println("全部都没有匹配上")
    }
}

输出:

匹配上了 zinyan

检查一个值在(in) 或者不在(!in)一个区间或者集合之中

实例4:

x=9
when(x){
    in 1..10 -> println("x 在[1,10]区间")
    in 1..20 -> println("x 在[1,20]区间")
    !in 20..25 -> println("x 不在[20,25]区间")
    else -> println("x 不在这几个条件范围内")
}

输出结果:

x=9  x 在[1,10]区间
x10  x 在[1,10]区间
x=11  x 在[1,20]区间
x=-1  x 不在[20,25]区间
 x=25  x 不在这几个条件范围内

实例5:

    var items = setOf("apple","banana","kiwi")
when{
    "orange" in items -> println("juicy")
    "apple" in items -> println("apple is fine too")
}

输出结果:

apple is fine too

检查一个值是(is) 或者不是(!is)一个特定类型的值

通常配合Any进行判断

实例:

var x1:Any =23
 
 when (x1) {
     is Int -> print(" x 是Int 数据")
     is String -> println("x 是String")
     is Boolean -> println("x 是 Boolean")
     else -> print("x is funny")
 }

实例2:

    println("结果:${isDataFormat(123)}")
    println("结果:${isDataFormat("123")}")
}

fun isDataFormat(x: Any): String = when (x) {
    is Int ->" x 是Int 数据"
    is String -> "x 是String"
    is Boolean -> "x 是 Boolean"
    else -> "不知道这个是什么数据"
}

when也可以代替if-else 来进行使用。如果不提供参数

所有的分支条件都是简单的布尔表达式,当其中一个分支条件为真时。执行该分支

实例:

class Dx() {
    fun isDog(): Boolean {
        return false
    }

    fun isCat(): Boolean {
        return true
    }
}

fun main(args: Array<String>) {
    var x:Dx= Dx()
    when{
        x.isDog()-> println("x 是狗")
        x.isCat()-> println("x 是猫")
        else -> println("啥也不是")
    }
}

循环控制

for 循环

介绍:for循环,主要对任何提供迭代器(iterator)的对象进行遍历。

关键方法:indices 可以获取集合对象的id值

var items = listOf("apple","banana","kiwi")
for(item in items){
    println(item)
}
//下面这两种的遍历方式,会被编译器优化而不会创建额外对象。
for(index in items.indices){
    println("item at $index is ${items[index]}")
}
println("直接获取数组的 id 和values")
for((index,value ) in items.withIndex()){
    println("item at $index is $value")
}

输出结果:

apple
banana
kiwi
item at 0 is apple
item at 1 is banana
item at 2 is kiwi
直接获取数组的 id 和values
item at 0 is apple
item at 1 is banana
item at 2 is kiwi


以上为正常循环,如果需要执行倒叙循环 可以加上downTo 函数和step函数

实例:

for (i in 4 downTo 1) print(i) // 打印结果为: "4321"
for (i in 1..4 step 2) print(i) // 打印结果为: "13"
for (i in 4 downTo 1 step 2) print(i) // 打印结果为: "42"
for (i in 1 until 10) { // i in [1, 10), 不包含 10
     println(i)
}
while 和do ... while 循环

介绍:和for循环一样,主要对任何提供迭代器(iterator)的对象进行遍历。

循环的结构为:

//while 循环
while( 布尔表达式 ) {
  //循环内容
}

//do...while 循环
do {
       //代码语句
}while(布尔表达式);

和Java之中的while与do...while一样。

do...while循环相对于while循环会至少循环一次。

实例:

println("while 使用")
 var x = 5
 while (x < 10 ) {
     println(x++)
 }
 println("do... while 使用")
 x=5
do {
    println(x++)
}while (x<5)

输出结果:

while 使用
5
6
7
8
9
do... while 使用
5
循环中断与跳转

介绍:在java之中我们可以通过break,continuereturn 来实现跳转。而Kotlin也是一样。

return:结束循环,结束当前的函数.

break:终止当前循环,但是函数继续.

continue: 结束当前循环,执行下一轮循环.

实例:

for (i in 1..5) {
    if (i == 3) continue
    println(i)
    if (i > 4)
        break
}

输出结果:

1
2
4
5

标签(Label)

介绍:在Kotlin中任何表达式都可以使用标签来标记.标签的格式为标识符+@ 符号组成.标签的标识符是可以自定义.

而通常使用标签会配合Break,Continue或者return来使用.

因为通过标签可以决定方法执行后的跳转对象.

实例1:

zin@ for (i in 1..10) {
    print("i:$i")
    for (j in 1..10) {
        if (j == 2){
            println("--")
            continue@zin
        }else {
            print("j:$j")
        }
    }
    println("继续执行循环")
}
println("继续执行函数")

返回结果

i:1j:1--
i:2j:1--
i:3j:1--
i:4j:1--
i:5j:1--
i:6j:1--
i:7j:1--
i:8j:1--
i:9j:1--
i:10j:1--
继续执行函数

上面的案例之中,如果将continue 跟换成break

输出结果:

i:1j:1--
继续执行函数

总结:

通过在中断与跳转函数后面加上标签.可以将程序运行步骤切换到标签标注的表达式执行.

附录
上面例子的Demo代码。

https://zinyan.com/upload/2021/07/Demo1-dd8bd4b4a3d546789312d12aac554342.kt

0

评论区