Kotlin Reference (六) Control Flow
most from reference
if表达式
在kotlin中,if是一个表达式,即它返回一个值。kotlin中没有Java中的三元运算符。
// Traditional usage
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// As expression
val max = if (a > b) a else b
如果分支是一个块,并且最后一个表达式是块的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
如果您使用if作为表达式儿不是语句(例如,返回其值或将其分配给变量),则表达式还需要一个else分支。
具体参考if语法。
when表达式
when替换C语言的交换运算符时,最简单的形式就是这样
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
when它的参数与所有分支顺序匹配,直到满足一些分支条件。when也可以用作表达式或作为语句。如果将其用作表达式,则满足分支的值将变为整体表达式的值。如果将其用作语句,则忽略各个分支的值。(就像if,每个分支可以是一个块,其值是块中最后一个表达式的值)。
如果没有分支满足,则else逻辑会执行。if被用作表达式时,else分支是强制性的,除非编译器可以证明所有可能的情况都能覆盖分支条件。
如果许多情况可以用同样的方式处理,分支条件可能与逗号组合:
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
我们可以使用任意表达式(不仅仅是常量)作为分支条件
when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
我们也可以用in 和 !in 关键字判断一个值是否在一个范围或者集合中:
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
我们也可以用is 和 !is 关键字判断一个对象是不是指定的类型。请注意,由于智能转换,您可以访问该类型的方法和属性,而无需任何额外的检查。
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
when表达式也可以用来替换if-else。如果没有参数,则分支条件是简单的布尔表达式,当天剑为真时执行分支:
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
参考when语法。
For 循环
for循环提供迭代器可以遍历任何东西,语法如下:
for (item in collection) print(item)
方法体
for (item: Int in ints) {
// ...
}
综上所述,for循环提供迭代器可以遍历任何东西,即
- 具有成员或扩展功能iterator(),其返回类型
- 有一个成员变量或扩展函数next()
- 有一个成员变量或扩展函数hasNext(),返回值类型为Boolean。
所有这三个功能都需要标记为operator。
for数组上的循环编译的时候不创建基于索引循环的迭代器
如果要遍历具有索引的数组或列表,可以这样做:
for (i in array.indices) {
print(array[i])
}
请注意,这个“范围的迭代器”是最佳的实现,因为没有创建额外的对象。
或者,您可以使用withIndex库函数:
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
具体参考for语法。
while 循环
while和do…while的用法跟以前一样
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y is visible here!
具体参考while语法。
break和continue
具体参考return语法。
Kotlin Reference (六) Control Flow的更多相关文章
- Asynchronous JS: Callbacks, Listeners, Control Flow Libs and Promises
非常好的文章,讲javascript 的异步编程的. ------------------------------------------------------------------------- ...
- SSIS的 Data Flow 和 Control Flow
Control Flow 和 Data Flow,是SSIS Design中主要用到的两个Tab,理解这两个Tab的作用,对设计更高效的package十分重要. 一,Control Flow 在Con ...
- Control Flow 如何处理 Error
在Package的执行过程中,如果在Data Flow中出现Error,那么Data Flow component能够将错误行输出,只需要在组件的ErrorOutput中进行简单地配置,参考<D ...
- 关于Control flow
1.一个package包含一个control flow并且一个或多个data flow. (这个项目叫做 Integration services project,提供了三种不同类型的control ...
- Core Java Volume I — 3.8. Control Flow
3.8. Control FlowJava, like any programming language, supports both conditional statements and loops ...
- SSIS ->> Control Flow And Data Flow
In the Control Flow, the task is the smallest unit of work, and a task requires completion (success, ...
- Control Flow in Async Programs
Control Flow in Async Programs You can write and maintain asynchronous programs more easily by using ...
- A swift Tour(2) Control Flow
Control Flow 用 if 和 switch 来做条件语句,并且用for-in,for,while,和do-while做循环,条件和循环的括号是可以不写的,但是body外面的括号是必须写的 l ...
- [译]Stairway to Integration Services Level 9 - Control Flow Task Errors
介绍 在本文中,我们会实验 MaximumErrorCount和ForceExecutioResult 故障容差属性,并且还要学习Control Flow task errors, event han ...
随机推荐
- linux第四周
一.知识点总结 (一)用户态.内核态和中断 1.内核态:在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态:在低级别的指令状态下,代码 只能在级别允许的特 ...
- Leetcode(93): Restore IP Addresses
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- Socket 是嘛玩意儿(简单聊聊)
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装 ...
- 简单的Sqlite使用方法
Sqlite的作用不言而喻,就是帮助开发者建立本地数据库,存储一些基本信息.不做过多阐述,需要的深入了解的可以找度娘,本文是针对Sqlite小白在使用上提供一些实例. 一.导入Sqlite.swift ...
- 配置linux内核输出所有的log信息
答案:修改内核文件include/linux/printk.h (内核版本为4.9) 修改前 #define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE ...
- [NOIP2017]时间复杂度
题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...
- 混合开发的大趋势之一React Native之简单的登录界面
转载请注明出处:王亟亟的大牛之路 这些天都在学习RN这部分吧,然后写了个简单的登陆业务,从"实战"中讲解吧 还是继续安利:https://github.com/ddwhan0123 ...
- kylin入门到实战:cube详述
版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=306 排版乱?请移步原文获得更好的阅读体验 1.什么是cube? cube是所有dimession的组合,每一种 ...
- Chrome好用的插件:WhatRuns 查看网站使用的技术
Chrome好用的插件:WhatRuns 查看网站使用的技术 这是一款免费的Chrome扩展程序,使用很简单. chrome安装这个插件之后,打开要检测的网站,然后点击WhatRuns 的图标,就开始 ...
- Ubuntu 安装 networkx
参考:ubuntu 下NetworkX的安装和使用 Dependences pip setuptools Commands 1.install networkx sudo pip install ne ...