when
关键字是一个有返回值的表达式,也就是它可以返回一个值。下面说说它的各种用法。
when处理枚举类
在Java中我们一般使用
switch
来处理枚举类,比如我想对每一种枚举值返回一个结果,就可以使用switch来处理。这种处理的需求在Kotlin中使用
when
关键字来完成。下面是具体的代码。
Kotlin枚举类
enum class ColorEnum(val r: Int, val g: Int, val b: Int, val colorName: String){
RED(255, 255, 255, "红色"), GREEN(0, 255, 0, "绿色"),
BLUE(0, 0, 255, "蓝色");
Java使用switch处理枚举类
public int getValue(ColorEnum colorEnum){
int value = 0;
switch (colorEnum){
case RED:
value = 1;
break;
case BLUE:
value = 2;
break;
case GREEN:
value = 3;
break;
return value;
Kotlin使用when处理枚举类
fun getValue(colorEnum: ColorEnum) =
when(colorEnum){
ColorEnum.RED -> 1;
ColorEnum.BLUE -> 2;
ColorEnum.GREEN -> 3;
是不是简洁了很多,当枚举常量匹配时,返回对应的箭头后面的值。由于这里when
是表达式,有返回值。同时这里的类型推导
也可以让我们不需要显式指定函数返回值类型。
同时上面的代码不需要写break
,当我们需要多个匹配项目返回同一个值时,我们可以这样写。
Kotlin多个匹配项目返回同一个值
fun getValue2(colorEnum: ColorEnum) =
when(colorEnum){
ColorEnum.RED, ColorEnum.BLUE -> 1
ColorEnum.GREEN -> 3
when匹配任意对象
Java中的switch
的分支条件必须是枚举常量
、字符串
和数字值
。而Kotlin中的when
可以使用任何对象,我们这里举一个简单的颜色混合的例子来说明。
Kotlin代码
fun mix(color1: ColorEnum, color2: ColorEnum) =
when(setOf<ColorEnum>(color1, color2)){
setOf(ColorEnum.RED, ColorEnum.GREEN) -> "黄色"
setOf(ColorEnum.RED, ColorEnum.BLUE) -> "紫色"
setOf(ColorEnum.BLUE, ColorEnum.GREEN) -> "黑色"
else -> throw Exception("不知道什么颜色")
上面的例子中的setOf()
对应于Java里面的Set集合
,它也是不关注其中元素的顺序。所以上面的枚举匹配时也不会关注于元素的顺序,只要其中的元素是匹配的即可。else
分支等同于switch
里面的default
分支,当与所有项都不匹配时执行。
不带参数的when
我们注意到,上面的对象在比较时,必须要创建额外的集合对象,这在性能上会有一定的损失,这里我们使用另外一种方法实现上面同样的功能,同时避免额外的对象创建。
Kotlin代码
fun mix2(color1: ColorEnum, color2: ColorEnum) =
when{
(color1 == ColorEnum.RED && color2 == ColorEnum.GREEN) ||
(color1 == ColorEnum.GREEN && color2 == ColorEnum.RED) -> "黄色"
(color1 == ColorEnum.RED && color2 == ColorEnum.BLUE) ||
(color1 == ColorEnum.BLUE && color2 == ColorEnum.RED) -> "紫色"
(color1 == ColorEnum.BLUE && color2 == ColorEnum.GREEN) ||
(color1 == ColorEnum.GREEN && color2 == ColorEnum.BLUE) -> "黑色"
else -> throw Exception("不知道什么颜色")
虽然代码量有所增加,可读性也好像变差了一些,但是少了对象的创建,性能有所提升。
上面的例子看出Kotlin的设计理念就是简洁明了,用更少的代码做更多的事,后续我们还会提到when
关键字的其他使用场景。
今天,我们来学习一下Kotlin的when关键字。when关键字是一个有返回值的表达式,也就是它可以返回一个值。下面说说它的各种用法。when处理枚举类在Java中我们一般使用switch来处理枚举类,比如我想对每一种枚举值返回一个结果,就可以使用switch来处理。这种处理的需求在Kotlin中使用when关键字来完成。
地址:http://kotlinlang.org/docs/reference/control-flow.html
日期:2017年 05月 28日 星期日
译者:LinkyIf 表达式在 Kotlin 中,if 是一个表达式,也就是说,它返回一个值。所以不存在三元操作符号(condition ? then : else),
因为一个 if 语句可以实现这个功能。// 传统用法
var max
if条件语句
Kotlin 提供了几种实现条件逻辑的机制,其中最常见的是 if-else 语句。如果 if 关键字后面括在圆括号内的表达式求值为 true,则会执行该分支中的代码(即,紧跟在后面的括在大括号内的代码)。否则,会执行 else 分支中的代码
if (x == 2) {
println("x等于2")
} else {
println("x不等于2")
在 Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条
Kotlin 的 when 类似于 Java 的 switch 。
用 if 写的话,是这样的,
fun getStudentScore(name: String) = if (name == "James") {
} else if (name == "Wade") {
} else if (name == "Harden") {
} else {
Kotlin 中判断字符是否相等可以直接用 == 。
当判断条件比较多时,适合用 when ,上
程序的执行
语句分为3种: 顺序
语句,
条件语句,循环
语句;
顺序
语句就是代码一行一行的往下执行就行了;
Kotlin的
条件语句主要有两种实现方式:if 和 when;
if
条件语句:
fun largerNumber(num1: Int, num2: Int): Int {
var value = 0//value 使用var
关键字来声明,因为value需要改变值;
//这个if 和 else if else 和
java一样进行
判断
if (num1 > num2) {
提到 when,大家都会联想到 Java 中的 switch,然而在 kotlin 中,when 显然比 Java 中的 switch 要强大得多。首先,我们先来看看 when 的特点:
它可以作为表达式使用
使用更加安全
强大灵活的分支结构
可以不带参数
接下来,我来带大家逐步领略这些特点。以下面这段 Java 功能代码为例:
switch(animal) {
case EAGLE:...
提到 when,大家都会联想到 Java 中的 switch,然而在 kotlin 中,when 显然比 Java 中的 switch 要强大得多。首先,我们先来看看 when 的特点:
它可以作为表达式使用
使用更加安全
强大灵活的分支结构
可以不带参数
接下来,我来带大家逐步领略这些特点。以下面这段 Java 功能代码为例:
switch(animal) {
case EAGLE:...
Kotlin Camera是基于Kotlin编程语言开发的一个用于Android平台的相机框架。相机是手机上常用的功能之一,而相机框架则是开发者需要使用的工具之一。Kotlin Camera优点在于它的开发语言Kotlin极大地提高了代码的易读性和可维护性,其次,它提供了一个简单易用的API,可以轻松地实现相机的基本功能,如拍照、录像、预览等。Kotlin Camera还提供了多种参数配置,如拍摄分辨率、画质等,以及预览尺寸、缩放比例等,使开发者可以根据自己的需求灵活地配置相机。此外,Kotlin Camera还支持自定义相机界面和操作逻辑,方便开发者编写符合自己APP风格的相机应用。总之,Kotlin Camera为开发者提供了一个快速开发相机应用的最佳框架,让相机应用开发变得更加简单。