Kotlin笔记32——枚举和“when”

声明枚举类

《Kotlin实战》中关于颜色枚举类的,举例代码。

enum class Color {
    RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}

和Java一样,枚举并不是值的列表:可以给枚举类声明属性和方法。引用《Kotlin实战中》举例代码:

enum class Color(
    var r: Int,
    val g: Int,
    val b: Int
) {
    RED(255, 0, 0), ORANGE(255, 165, 0),
    YELLOW(255, 255, 0), GREEN(0, 255, 0),
    BLUE(0, 0, 255), INDIGO(75, 0, 135), VIOLET(238, 130, 238);

    fun rgb() = (r * 265 + g) * 265 + b
}

fun main() {
    println(Color.BLUE.rgb())
}

《Kotlin实战》中这样介绍到:枚举常量用的声明构造方法和属性的语法与之前你看到的常规类一样。当你声明每个枚举常量的时候,必须提供该常量的属性值。注意这个例子向你展示了 Kotlin 语法中唯一必须使用分号的地方如果要在枚举类中定义任何方法,就要使用分号把枚举常量列表和方法定义分开。

使用when处理枚举类

《Kotlin实战》中举例一个彩虹有关的例子。Red、Orange、Yellow、Green、Blue、Indigo、Violet,假设你需要一个函数来告诉每个颜色的中文意思。在Java中可以用switch语句完成,而Kotlin对应的结构是when。

if语句相似,when是一个有返回值的表达式,因此可以写成一个直接返回when表达式体的函数。下面就贴例子的代码(我仿照书中的例子写的):

fun getMnemonic(color: Color) = when (color) {
    Color.RED -> "红色"
    Color.ORANGE -> "橙色"
    Color.YELLOW -> "黄色"
    Color.GREEN ->"绿色"
    Color.BLUE ->"蓝色"
    Color.INDIGO -> "靛蓝"
    Color.VIOLET -> "紫色"
}

fun main() {
    println(getMnemonic(Color.GREEN))
}

上面的代码根据传进来的 color 值找到对应的分支。和 Java不一样,你不需要在每个分支写上break 语句 Java 中遗漏 break通常会导致 bug 如果匹配成功,只有对应的分支会执行也可以把多个值合并到同个分支,只需要用逗号隔开这些值。改写书中的例子:

fun getWarmth(color: Color) = when (color) {
    Color.RED, Color.ORANGE, Color.YELLOW -> "暖色调"
    Color.GREEN -> "中性色调"
    Color.BLUE, Color.INDIGO, Color.VIOLET ->"冷色调"
}

fun main() {
    println(getWarmth(Color.GREEN))
}

希望我这篇文章对学习Kotlin的小伙伴有帮助。推广一下我微信公众号,我会经常更新一下技术干货或者开发踩坑历程,欢迎大家关注我!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值