android开发之&android中的swift,kotlin基础语法(三)

696 阅读3分钟
控制流

if表达式:
Kotlin 中,if 是表达式,它可以返回一个值。
是除了condition ? then : else)之外的唯一一个三元表达式

var max = 1    
if (max < 2){        
    max = 2    
}else{        
    max = 3    
}    
//if作为表达式    
var max2 = if (2 > 1) 2 else 1    
//if分支可以作为块,最后一个表达式是该块的值    
val max3 = if (2 > 1){        
    println("2")        
    a    
}else{        
    println("1")        
    1    
}

when表达式:
when会对所有的分支进行检查直到有一个条件满足。when 可以用做表达式或声明。如果用作表达式的话,那么满足条件的分支就是总表达式。如果用做声明,那么分支的的的值会被忽略。(像 if 表达式一样,每个分支是一个语句块,而且它的值就是最后一个表达式的值)

when(1111){        
    1       ->      println("1")        
    2       ->      println("2")        
    else    ->      println("none")    
}    
//分支条件可以连在一起    
when(2222){        
    1,2     ->      print("1 or 2")        
    else    ->      println("none")    
}    
//可以用任意表达式作为分支的条件    
when (3333) {        
    parseInt(333) -> print("s encode x")        
    else -> print("s does not encode x")    
}    
//可以用 in 或者 !in 检查值是否值在一个集合中:    
when (100) {        
    in 1..100 -> print("0 - 100")        
    !in 10..20 -> print("10 - 20")        
    else -> print("none")    
}    
//when 也可以用来代替 if-else if 。如果没有任何参数提供,那么分支的条件就是简单的布尔表达式,当条件为真时执行相应的分支:    
fun dd(a:Int,b:Int){        
    when{            
        a < b -> println("a小于b")            
        a > b -> println("a大于b")            
        else -> println("a等于b")        
    }    
}

循环:for 循环  和  while 循环  两种

fun main(args: Array<String>) {    
    /**     
    * for循环     
    */    
    for (i in 1..20){        
        if (i % 2 == 0){            
            continue        
        }        
        println(i)    
    }    
    /**     
    * while循环 和   do...while循环     
    */    
    var number = 1    
    var times = 0    
    var total = 0    
    while (total < 15050){        
        total += number        
        number += 1        
        times += 1    
    }    
    println("$number 加到15050的次数是:$times")     
    do {        
        total += number        
        number += 1        
        times += 1    
    }while (total<15050)
}

多元判断

fun main(args: Array<String>) {    
    val a = 5    
    val b = 10    
    val result = if (a > b) "大于" else b - a    
    when (result) {        
        in 1..5 -> {            
            println("1到5之间")        
        }        
        1,3,5 -> {            
            println("1,3,5")        
        }        
        (9-6) -> {            
            println("值是3")        
        }        
        is Int -> {            
            println("值是Int型")        
        }        
        else -> {            
            println("值是String型")        
        }    
    }
}

返回和跳转:Kotlin 有三种机构跳转操作符:return break 结束最近的闭合循环 continue 跳到最近的闭合循环的下一次循环

fun main(args: Array<String>) {      
    //break 和 continue 标签    
    //在 Kotlin 中表达式可以添加标签。标签通过 @ 结尾来表示,比如:abc@,fooBar@ 都是有效的(参看语法)。使用标签语法只需像这样:     
    //现在我们可以用标签实现 break 或者 continue 的快速跳转:     
    loop@ for (i in 1..100) {        
        for (j in i..100) {            
           if (true)            
                break@loop        
        }    
    }     
//返回到标签处在字面函数,局部函数,以及对象表达式中,函数可以在 Kotlin 中被包裹。return 允许我们返回到外层函数。最重要的例子就是从字面函数中返回,还记得我们之前的写法吗:    
var ints = mutableListOf<Int>(1,2,3,4,5,6,7)    
fun foo() {        
    ints.forEach {            
        if (it  == 0) return            
        print(it)        
    }    
}      
//return 表达式返回到最近的闭合函数,比如 foo (注意这样非局部返回仅仅可以在内联函数中使用)。如果我们需要从一个字面函数返回可以使用标签修饰 return :    
fun foo2() {        
    ints.forEach lin@{            
        if (it == 0)            return@lin            
        println(it)        
    }    
}     
//现在它仅仅从字面函数中返回。经常用一种更方便的含蓄的标签:比如用和传入的 lambda 表达式名字相同的标签。   
fun foo3() {        
    ints.forEach {            
        if (it == 0) return@forEach            
        print(it)        
    }    
}     
//另外,我们可以用函数表达式替代字面函数。在函数表达式中使用 return 语句可以从函数表达式中返回。    
fun foo4() {        
    ints.forEach(fun(value:  Int){            
        if (value == 0) return            
        print(value)        
    })    
}}