Kotlin入门(2)控制流

目录

1、条件表达式

1.1        if语句

1.2        用表达式代替 condition ? then : else if

2、when语句

3、循环语句

3.1        for语句

3.2        while / do...while语句

3.3        迭代器

4、定义范围

4.1        循环访问

增量为1

自定义增量

反顺序访问

4.2        检查值是否在范围内

5、等式检查


1、条件表达式

1.1        if语句

语法与Java无异

if (count == 42) {
    println("I have the answer.")
} else if (count > 35) {
    println("The answer is close.")
} else {
    println("The answer eludes me.")
}

不难发现String语句总是重复出现,Kotlin提供一种条件表达式简化以上重复

//根据 if-else 表达式的结果
//为 answerString 赋予了一个初始值

val answerString: String = if (count == 42) {
    "I have the answer."
} else if (count > 35) {
    "The answer is close."
} else {
    "The answer eludes me."
}

println(answerString)

//每个条件分支都隐式地返回其最后一行的表达式的结果
//因此无需使用 return 关键字

1.2        用表达式代替 condition ? then : else if

Kotlin 中没有三元运算符,即condition ? then : else if

  • 一元运算符:只需要一个数据就可以进行操作的运算符。例如:取反!、自增++、自减--
  • 二元运算符:需要两个数据才可以进行操作的运算符。例如:加法+、赋值=
  • 三元运算符:需要三个数据才可以进行操作的运算符。

一个条件后面会跟一个问号(?),如果条件为truthy ,则问号后面的表达式A将会执行;

表达式A后面跟着一个冒号(:),如果条件为falsy ,则冒号后面的表达式B将会执行。

fun max(a: Int, b: Int) = if (a > b) a else b        

//if是这里的一个表达式:它返回一个值

println(max(99, -42))   //99

 使用Java的三元运算符,与其对比

int a = 99;
int b = 42;

// 数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B;
// 判断a > b是否成立,如果成立将a的值赋值给max;如果不成立将b的值赋值给max。二者选其一

int max = a > b ? a : b; // 最大值的变量
System.out.println("最大值:" + max); // 99

2、when语句

fun main() {
    println(whenAssign("Hello"))
    println(whenAssign(3.4))
    println(whenAssign(1))
    println(whenAssign(MyClass()))
}

fun whenAssign(obj: Any): Any {
    val result = when (obj) {                   // 1
        1 -> "one"                              // 2
        "Hello" -> 1                            // 3
        is Long -> false                        // 4
        else -> 42                              // 5
    }
    return result
}

class MyClass
  1. 这是一个表达式。when
  2. 将值设置为 if 等于 1。"one"
  3. 将值设置为 if等于 Hello。1。
  4. 将值设置为 if 是 Long的实例。false
  5. 如果上述任何条件均不满足,则设置值“42”。  与语句不同表达式中通常需要默认分支,除非编译器可以检查其他分支是否涵盖所有可能的情况。

 

3、循环语句

3.1        for语句

for在 Kotlin 中的工作方式与在大多数语言中相同。

fun main(args: Array<String>) {
    val cakes = listOf("carrot", "cheese", "chocolate")

    for (cake in cakes) {                      //遍历cakes         
        println("Yummy, it's a $cake cake!")
    }

}

//Yummy, it's a carrot cake!

//Yummy, it's a cheese cake!

//Yummy, it's a chocolate cake!

 

3.2        while / do...while语句

while结构和do-while结构的工作方式与大多数语言类似。

fun eatACake() = println("Eat a Cake")
fun bakeACake() = println("Bake a Cake")

fun main(args: Array<String>) {
    var cakesEaten = 0
    var cakesBaked = 0
    
    while (cakesEaten < 5) {                    // 在条件为 true 时执行块。
        eatACake()
        cakesEaten ++
    }
    
    do {                                        // 首先执行块,然后检查条件
        bakeACake()
        cakesBaked++
    } while (cakesBaked < cakesEaten)

}

//Eat a Cake
//Eat a Cake
//Eat a Cake
//Eat a Cake
//Eat a Cake   5次

//Bake a Cake
//Bake a Cake
//Bake a Cake
//Bake a Cake
//Bake a Cake
//Bake a Cake  6次

3.3        迭代器

通过在类中实现运算符,可以在类中定义自己的迭代器。iterator

class Animal(val name: String)

class Zoo(val animals: List<Animal>) {

    operator fun iterator(): Iterator<Animal> {         // 1
        return animals.iterator()                       // 2
    }
}

fun main() {

    val zoo = Zoo(listOf(Animal("zebra"), Animal("lion")))

    for (animal in zoo) {                                   // 3
        println("Watch out, it's a ${animal.name}")
    }

}

//Watch out, it's a zebra
//Watch out, it's a lion
  1. 定义类中的迭代器iterator。它必须被命名并具有修饰符operator
  2. 返回满足以下方法要求的迭代器:
    • next():Animal     会返回迭代器的下一个元素,并且更新迭代器的状态
    • hasNext():Boolean   用于检测集合中是否还有元素
  3. 使用用户定义的迭代器 循环遍历 zoo中的animal。

4、定义范围

4.1        循环访问

增量为1

for(i in 0..3) {            
    print(i)
}
print(" ")    //0123


//像C/C++/Java中的'for(i=0; i<=3; ++i)'一样

迭代 

//像C/C++/Java中的'for(i=0; i<3; ++i)'

for(i in 0 until 3) {        
    print(i)
}
print(" ")

//012

 支持字符char范围

//字母顺序循环访问 char 范围

for (c in 'a'..'d') {        
    print(c)
}
print(" ")

//abcd

自定义增量

//增量为2

for(i in 2..8 step 2) {     
    print(i)
}
print(" ")

//2468

反顺序访问

for (i in 3 downTo 0) {      
    print(i)
}
print(" ")

//3210
//反序,且增量为2

for (c in 'z' downTo 's' step 2) { 
    print(c)
}
print(" ")

//zxvt

 

4.2        检查值是否在范围内

val x = 2
if (x in 1..5) {           
    print("x is in range from 1 to 5")
}
println()


//2 is in range from 1 to 5


if (x !in 6..10) {         
    print("x is not in range from 6 to 10")
}


//2 is not in range from 6 to 10

5、等式检查

==       :等于,用于结构比较

===     :全等于

val authors = setOf("Shakespeare", "Hemingway", "Twain")
val writers = setOf("Twain", "Shakespeare", "Hemingway")

println(authors == writers)   
// 调用并设置忽略元素顺序  true
//authors. equals (writers)

println(authors === writers)  
// false
//authors不全等于writers

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值