1、if表达式

在kotlin中一切都是表达式,都可以返回一个值。所以if表达式也总是返回一个value。所以可以:
var s = if (isExit) x else y
这样我们就不需要java中那样得三元符“?:”

2、when表达式

与java中的switch/case类似,但是要强大的多。这个表达式会匹配分支,如果有匹配的则运行右边的表达式。
  • 对于默认的选项可以增加else分支(与java中的defualt类似)
  • 与java的switch/case不同的是,参数可以是任何类型,也可以是一个条件
  • 一个条件也可以是多个逗号分隔的值
如:
when(x){0, 1 -> print("1")2 -> print("2")else -> {print("else")...}
}

同样作为表达式也可以返回一个值,如:

val a = when(x){...
}

当需要返回一个值时,由于必须要返回,所以必须覆盖所有的可能性分支或实现else,否则不会被编译成功。当不需要返回时,则不需覆盖所有可能性。

更强大的是,我们可以检测参数类型进行判断,如:
when(view){is TextView -> view.setText("test")is EditText -> toast("value is ${view.getText()}")else -> view.visibility = View.GONE
}

通过is判断后,参数会被自动转型,所以不需要明确的做类型转换。

它还可以检测参数是否在一个数组范围甚至是一个集合范围内,如:
val cost = when(x){in 0..10 -> "cheap"in 10..100 -> "regular"in specialValues -> "special"else -> "not raded"
}

它甚至可以摆脱参数,代替if/else链,如:

val res = when{x in 0..10 -> "cheap"y.contains("hello") -> "hello world"v is EditText -> v.getText()else -> ""
}

注意:(1)使用when时参数可以为null,如果没有匹配的分支则什么都不发生或执行else分支。

         (2)如果有多个分支满足条件,当匹配到第一个时即返回,其他匹配的分支不再执行

3、for循环

kotlin提供了很多集合的操作符可以使我们不必过多的使用for,但是for仍是有用的。
for(item in collection){...
}

在for中我们也可以使用ranges,如:

for(index in 0..parent.getChirldCount() - 1){...
}

对于迭代一个Collection(array或list)的index,可以使用Collection的indices属性,如

for(index in array.indices){...
}

通过观察源码可以指定,indices是一个IntRange类型,它的值是0..size-1,所以说它是一个collection所有index的range。

4、while和do/while

这两个不是特别常用,基本与java和上面的用法类似。

5、try和throw

在kotlin中几乎一切都是表达式,都可以返回一个值,所以可以
val a = try{ ... }catch{ null }
fun do( ... ): Persion? = throw Expection()
注意:上面的例子可以看到,返回一个exception时,虽然与返回类型不相同也是可以的。

6、range

Range表达式使用一个“..”操作符,它是被定义实现了了一个RangeTo方法
if(i in 0..10){...
}

Range用于任何可以被比较的类型,但对于数字类型比较器会转换为类似java的简单代码来避免额外开销来优化它。
而且注意,数字类型的Range可以用于迭代,如:
for(i in 0..10){....
}

Range默认是自增长的,如果是for(i in 10..0)则不会做任何事情,这时可以使用downTo,如:
for(i in 10 downTo 0){...
}

我们还可以使用step来定义间隙,如:
for(i in 1..4 step 2){...
}

上面的代码只会遍历到1、3

如果想创建一个开区间,可以使用until,如:
for(i in 0 until 4){...
}

就等同于0..3,不包括最后的。

kotlin学习笔记——过程控制和Range表达式相关推荐

  1. kotlin学习笔记——枚举、封闭类

    1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...

  2. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  3. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  4. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  5. Kotlin学习笔记(一)

    文章目录 Kotlin学习笔记 变量申明 只读变量 类型推断 编译时常量 引用类型和基本数据类型 if表达式 when String 模板 函数头 函数参数 Unit函数 Nothing类型 反引号中 ...

  6. Kotlin学习笔记19 阶段复习1

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 基础部分 Kotlin学习笔记 第一章开始 第二章 基础_积跬步 至千里-CSDN博客 类与继承 Kotlin学习笔记 第 ...

  7. Kotlin学习笔记--Kotlin之集合

    Kotlin学习笔记--Kotlin之集合 集合类 1. List 集合 1.1 不可变list 1.2 可变list MutableList 1.3 集合遍历 1.4 List的操作函数 1.5 l ...

  8. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  9. Kotlin学习笔记(2)- 空安全

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

最新文章

  1. 广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B...
  2. QT的QDialog类的使用
  3. linux用的那国语言,在linux上可以使用什么变成语言
  4. php链接远程socket,php使用socket获取远程图片
  5. CompletableFuture详解~getNow
  6. 2017.3.29 lis 失败总结
  7. [MySQL 5.6] MySQL 5.6 group commit 性能测试及内部实现流程
  8. 冲刺CCNA2.0(200-120)认证考试TK视频讲解
  9. 【java】监听器、box和JFrame的应用
  10. vue watch 修改滚动条_只需要这几个vue快捷开发技巧,看完技术提升30%!!!!...
  11. WordPress网站配置腾讯云cdn缓存
  12. vue——动态吸顶组件
  13. linux redhat下载地址
  14. word树状分支图_word中插入树状图的两种方法
  15. android n改铃声,来电铃声自定义,我”响“你快乐!
  16. 【C++/OOP】(侯捷著) (转)
  17. 愚人节的礼物(HDU1870)
  18. 富友集团由盈转亏:收购事项完成后未变更,旗下富友支付多次被罚
  19. 对脏写、脏读、不可重复度、幻读的理解笔记
  20. 我问 ChatGPT Java 编程语言的优缺点是什么?它这么回答……

热门文章

  1. php之变量覆盖漏洞讲解
  2. ActiveRecord多表查询
  3. java 关键字volatile的作用
  4. Spring学习(五)bean装配详解之 【XML方式配置】
  5. 关于表格动态添加行并处理相关表单元素的一些修改
  6. 关于分布式系统的数据一致性问题(三)
  7. 2017.12.18
  8. struts2中访问servlet API
  9. sed教程(七)之特殊字符
  10. 20131127-正则表达式