most from reference

if表达式

在kotlin中,if是一个表达式,即它返回一个值。kotlin中没有Java中的三元运算符。

  1. // Traditional usage
  2. var max = a
  3. if (a < b) max = b
  4. // With else
  5. var max: Int
  6. if (a > b) {
  7. max = a
  8. } else {
  9. max = b
  10. }
  11. // As expression
  12. val max = if (a > b) a else b

如果分支是一个块,并且最后一个表达式是块的值:

  1. val max = if (a > b) {
  2. print("Choose a")
  3. a
  4. } else {
  5. print("Choose b")
  6. b
  7. }

如果您使用if作为表达式儿不是语句(例如,返回其值或将其分配给变量),则表达式还需要一个else分支。

具体参考if语法

when表达式

when替换C语言的交换运算符时,最简单的形式就是这样

  1. when (x) {
  2. 1 -> print("x == 1")
  3. 2 -> print("x == 2")
  4. else -> { // Note the block
  5. print("x is neither 1 nor 2")
  6. }
  7. }

when它的参数与所有分支顺序匹配,直到满足一些分支条件。when也可以用作表达式或作为语句。如果将其用作表达式,则满足分支的值将变为整体表达式的值。如果将其用作语句,则忽略各个分支的值。(就像if,每个分支可以是一个块,其值是块中最后一个表达式的值)。

如果没有分支满足,则else逻辑会执行。if被用作表达式时,else分支是强制性的,除非编译器可以证明所有可能的情况都能覆盖分支条件。

如果许多情况可以用同样的方式处理,分支条件可能与逗号组合:

  1. when (x) {
  2. 0, 1 -> print("x == 0 or x == 1")
  3. else -> print("otherwise")
  4. }

我们可以使用任意表达式(不仅仅是常量)作为分支条件

  1. when (x) {
  2. parseInt(s) -> print("s encodes x")
  3. else -> print("s does not encode x")
  4. }

我们也可以用in 和 !in 关键字判断一个值是否在一个范围或者集合中:

  1. when (x) {
  2. in 1..10 -> print("x is in the range")
  3. in validNumbers -> print("x is valid")
  4. !in 10..20 -> print("x is outside the range")
  5. else -> print("none of the above")
  6. }

我们也可以用is 和 !is 关键字判断一个对象是不是指定的类型。请注意,由于智能转换,您可以访问该类型的方法和属性,而无需任何额外的检查。

  1. fun hasPrefix(x: Any) = when(x) {
  2. is String -> x.startsWith("prefix")
  3. else -> false
  4. }

when表达式也可以用来替换if-else。如果没有参数,则分支条件是简单的布尔表达式,当天剑为真时执行分支:

  1. when {
  2. x.isOdd() -> print("x is odd")
  3. x.isEven() -> print("x is even")
  4. else -> print("x is funny")
  5. }

参考when语法

For 循环

for循环提供迭代器可以遍历任何东西,语法如下:

  1. for (item in collection) print(item)

方法体

  1. for (item: Int in ints) {
  2. // ...
  3. }

综上所述,for循环提供迭代器可以遍历任何东西,即

  • 具有成员或扩展功能iterator(),其返回类型

    • 有一个成员变量或扩展函数next()
    • 有一个成员变量或扩展函数hasNext(),返回值类型为Boolean。

所有这三个功能都需要标记为operator。

for数组上的循环编译的时候不创建基于索引循环的迭代器

如果要遍历具有索引的数组或列表,可以这样做:

  1. for (i in array.indices) {
  2. print(array[i])
  3. }

请注意,这个“范围的迭代器”是最佳的实现,因为没有创建额外的对象。

或者,您可以使用withIndex库函数:

  1. for ((index, value) in array.withIndex()) {
  2. println("the element at $index is $value")
  3. }

具体参考for语法

while 循环

while和do…while的用法跟以前一样

  1. while (x > 0) {
  2. x--
  3. }
  4. do {
  5. val y = retrieveData()
  6. } while (y != null) // y is visible here!

具体参考while语法

break和continue

具体参考return语法

Kotlin Reference (六) Control Flow的更多相关文章

  1. Asynchronous JS: Callbacks, Listeners, Control Flow Libs and Promises

    非常好的文章,讲javascript 的异步编程的. ------------------------------------------------------------------------- ...

  2. SSIS的 Data Flow 和 Control Flow

    Control Flow 和 Data Flow,是SSIS Design中主要用到的两个Tab,理解这两个Tab的作用,对设计更高效的package十分重要. 一,Control Flow 在Con ...

  3. Control Flow 如何处理 Error

    在Package的执行过程中,如果在Data Flow中出现Error,那么Data Flow component能够将错误行输出,只需要在组件的ErrorOutput中进行简单地配置,参考<D ...

  4. 关于Control flow

    1.一个package包含一个control flow并且一个或多个data flow. (这个项目叫做 Integration services project,提供了三种不同类型的control  ...

  5. Core Java Volume I — 3.8. Control Flow

    3.8. Control FlowJava, like any programming language, supports both conditional statements and loops ...

  6. SSIS ->> Control Flow And Data Flow

    In the Control Flow, the task is the smallest unit of work, and a task requires completion (success, ...

  7. Control Flow in Async Programs

    Control Flow in Async Programs You can write and maintain asynchronous programs more easily by using ...

  8. A swift Tour(2) Control Flow

    Control Flow 用 if 和 switch 来做条件语句,并且用for-in,for,while,和do-while做循环,条件和循环的括号是可以不写的,但是body外面的括号是必须写的 l ...

  9. [译]Stairway to Integration Services Level 9 - Control Flow Task Errors

    介绍 在本文中,我们会实验 MaximumErrorCount和ForceExecutioResult 故障容差属性,并且还要学习Control Flow task errors, event han ...

随机推荐

  1. ELK之elasticsearch5.6的安装和head插件的安装

    这里选择的elasticsearch为5.6的新版本,根据官方文档有几种暗装方式: https://www.elastic.co/guide/en/elasticsearch/reference/cu ...

  2. 20145321 《Java程序设计》第6周学习总结

    20145321 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入输出 10.1 InputStream OutputStream 1.数据有来源与目的,衔接两者的是串流 ...

  3. 20145240《网络对抗》Web基础

    Web基础 实验后回答问题 什么是表单? 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

  4. SpringMVC基于注解方式的quartz

    项目框架: SpringMVC.MyBatis.JSP 1. 首先配置spring.xml文件 <?xml version="1.0" encoding="UTF- ...

  5. Vue.js项目部署在Tomcat服务器上

    1.在本地的Vue框架中 执行npm run build  将我们的项目打包到dist 文件夹中 2.在服务器上的Tomcat的 webapps文件夹下,新建一个文件夹如:frontvue 3.启动t ...

  6. 分布式文档存储数据库(MongoDB)副本集配置

    副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...

  7. LA 5713 秦始皇修路

    https://vjudge.net/problem/UVALive-5713 题意: 秦朝有n个城市,需要修建一些道路使得任意两个城市之间都可以连通.道士徐福声称他可以用法术修路,不花钱,也不用劳动 ...

  8. go入门环境配置

    1.安装golang(64位).MinGW(64位).LiteIDE(32位) 下载golang安装包,双击安装,默认安装目录:C:\Go: MinGW安装包(x86_64-4.8.2-release ...

  9. bash-文件表达式

    一点例子: #!/bin/bash # test-file: Evaluate the status of a file FILE=~/.bashrc if [ -e "$FILE" ...

  10. Generator 函数的异步应用

    异步编程对 JavaScript 语言太重要.Javascript 语言的执行环境是“单线程”的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Generator 函数如何完成异步操作. 传 ...