当前位置: 首页 > news >正文

Kotlin基础——枚举、When、in、for

枚举

声明只有值的枚举

enum class Color {RED, GREEN, BLUE
}

此外还可以增加属性和方法,如果需要在枚举类中定义方法,要使用分号把枚举常量列表和方法定义分开,这也是Kotlin唯一必须使用分号的地方

enum class Color(val r: Int, val g: Int, val b: Int) {RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);fun rgb() = (r * 256 + g) * 256 + b
}

When

可使用多行表达式函数体

fun getRgb(color: Color) =when (color) {Color.RED -> "255,0,0"Color.GREEN -> "0, 255, 0"Color.BLUE -> "0, 0, 255"}

上面只会匹配对应分支,如果需要多个值合并,则使用逗号隔开

fun getRgb(color: Color) =when (color) {Color.RED, Color.GREEN -> "255,255,0"Color.BLUE -> "0, 0, 255"}

when可以使用任何对象,如下使用set进行判断(不分顺序)

fun getRgb(c1: Color, c2: Color) =when (setOf(c1, c2)) {setOf(Color.RED, Color.GREEN) -> "255,255,0"setOf(Color.GREEN, Color.BLUE) -> "0,255,255"else -> throw Exception("none")}

如果没有给when提供参数,则分支条件为布尔表达式

fun getRgb(c1: Color, c2: Color) =when {(c1 == Color.RED && c2 == Color.GREEN) || (c1 == Color.GREEN && c2 == Color.RED) -> "255,255,0"(c1 == Color.GREEN && c2 == Color.BLUE) || (c1 == Color.BLUE && c2 == Color.GREEN) -> "0,255,255"else -> throw Exception("none")}

使用When优化if

对于如下类结构

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Int, val right: Int) : Expr

计算加法时,使用if如下,代码块中的最后表达式即为返回值,但不适用于函数(需要显示return)

fun eval(e: Expr): Int =if (e is Num) {e.value} else if (e is Sum) {eval(e.left) + eval(e.right)} else {throw IllegalArgumentException("")}

可使用when对其进行优化

fun eval(e: Expr): Int =when (e) {is Num -> {e.value}is Sum -> {eval(e.left) + eval(e.right)}else -> {throw IllegalArgumentException("")}}

in

可使用in判断一个值是否在一个区间/集合内,反之使用 !in

fun isNum(c: Char) = c in '0'..'9'
fun isNotNum(c: Char) = c !in '0'..'9'println("Kotlin" in setOf("Java", "C"))

可用于when中进行判断

fun recognize(c: Char) = when (c) {in '0'..'9' -> "digit"in 'a'..'z' -> "letter"else -> "not know"
}

可用于比较任何实现了Comparable接口的对象,如下比较字符串将按照字母表顺序

println("Kotlin" in "Java".."Z")

for

如判断奇偶数的函数

fun isEven(i: Int) = when {i % 2 == 0 -> "偶数"else -> "奇数"
}

for循环可使用区间表示两个值之间的间隔,如下分别表示[1,10]、[1,10)

for (i in 1..10) {print(i)print("是")println(isEven(i))
}for (i in 1 until 10) {print(i)print("是")println(isEven(i))
}

如果需要反向,且设置步长(可为负数),可使用

for (i in 10 downTo 1 step 2) {print(i)print("是")println(isEven(i))
}

还可以用for遍历集合

val chartBinary = TreeMap<Char, String>()for (c in 'A'..'D') {val binary = Integer.toBinaryString(c.toInt())chartBinary[c] = binary;
}for ((chat, binary) in chartBinary) {println("$chat = $binary")
}

如果需要跟踪下标,可使用withIndex()

val list = arrayListOf("A", "B")
for ((index, element) in list.withIndex()) {println("$index: $element")
}

相关文章:

Kotlin基础——枚举、When、in、for

枚举 声明只有值的枚举 enum class Color {RED, GREEN, BLUE }此外还可以增加属性和方法&#xff0c;如果需要在枚举类中定义方法&#xff0c;要使用分号把枚举常量列表和方法定义分开&#xff0c;这也是Kotlin唯一必须使用分号的地方 enum class Color(val r: Int, val g: …...

C++编程题目------平面上的最接近点对(分治算法)

题目描述 给定平面上n个点&#xff0c;找出其中的一对点的距离&#xff0c;使得在这n个点的所有点对中&#xff0c;该距离为所有点对中最小的。 输入格式 第一行一个整数 n&#xff0c;表示点的个数。 接下来 n 行&#xff0c;每行两个实数 x,y &#xff0c;表示一个点的行…...

Linux下的文件操作和文件管理

文章目录 应用编程文件操作文件描述符open函数write函数read函数close函数lseek函数文件操作例子 文件管理文件基本知识文件类型文件共享空洞文件错误处理退出程序原子操作fcntl和ioctl截断文件stat函数软链接和硬链接 应用编程 系统调用(system call)是Linux内核提供给应用层…...

设计模式之桥梁模式

什么是桥梁模式 桥梁模式&#xff08;Bridge Pattern&#xff09;也称为桥接模式&#xff0c;属于结构型模式&#xff0c;它主要目的是通过组合的方式建立两个类之间的联系&#xff0c;而不是继承。桥梁模式将抽象部分与它的具体实现部分分离&#xff0c;使它们都可以独立地变…...

“从部署到优化,打造高效会议管理系统“

目录 引言一、部署单机项目 - 会议OA1.1 硬件和软件环境准备1.2 检查项目1.3 系统部署1.后端部署 二、部署前后端分离项目 - SPA项目后端部署2.前端部署 总结 引言 在现代化办公环境中&#xff0c;会议是组织沟通、决策和合作的重要方式之一。为了提高会议的效率和质量&#x…...

Facebook广告效果数据获取

一、背景 公司每年在Facebook和Google上投放了大量的广告&#xff0c;我总不能让老板登录Facebook广告投放平台上去看广告效果&#xff0c;其实老板只关注每天花了多少钱引来了多少客户&#xff0c;每个客户平均花费多少钱&#xff0c;其它的他才不关心&#xff0c;有Facebook…...

nlp之文本转向量

文章目录 代码代码解读 代码 from tensorflow.keras.preprocessing.text import Tokenizer # 标记器(每一个词&#xff0c;以我们的数值做映射&#xff0c;)words [LaoWang has a Wechat account., He is not a nice person., Be careful.] # 把这句话中每一个单词&#xf…...

【luckfox】添加压力传感器hx711

文章目录 前言一、参考资料二、电路图三、驱动四、makefile——添加驱动五、dts——使能gpio5.1 参考5.2 改动1—— hx117节点5.3 改动2——引脚节点5.4 已经被定义的引脚5.5 gpio源码 六、改动总结——使能hx711七、验证驱动添加八、编写测试文件8.1 测试代码8.2 配置编译环境…...

C++11的lambda表达式

lambda来源于函数式编程的概念。C11这次终于把lambda加进来了。 lambda表达式有如下优点&#xff1a; 1、声明式编程风格&#xff1a;就地匿名定义目标函数或函数对象&#xff0c;不需要额外写一个命名函数或者函数对象。以更直接的方式去写程序&#xff0c;好的可读性和可维护…...

矩阵特征值与特征向量的理解

各位朋友大家好&#xff0c;我是小C哈哈哈&#xff0c;很高兴认识大家&#xff0c;在这里&#xff0c;我会将一些枯燥难懂的数学和算法知识以图片或动画的形式通俗易懂的展现给大家&#xff0c;希望大家喜欢。 线性代数中的矩阵特征值与特征向量这两个基本概念总是让很多人摸不…...

云原生安全:如何保护云上应用不受攻击

文章目录 云原生安全的概念1. 多层次的安全性2. 自动化安全3. 容器安全4. 持续监控5. 合规性 云原生安全的关键挑战1. 无边界的环境2. 动态性3. 多云环境4. 容器化应用程序5. API和微服务 如何保护云上应用不受攻击1. 身份验证和访问控制示例代码&#xff1a; 2. 数据加密示例代…...

如何在用pip配置文件设置HTTP爬虫IP

首先&#xff0c;定义问题&#xff1a;在 Pip 中设置HTTP爬虫IP服务器&#xff0c;以便在网络上进行访问和下载。 亲身经验&#xff1a;我曾经遇到过类似问题&#xff0c;通过设置HTTP爬虫IP服务器成功解决了网络访问问题。 数据和引证&#xff1a;根据 pip 官方文档&#xff…...

2023MathorCup高校数模挑战赛B题完整解题代码教程

赛道 B&#xff1a; 电商零售商家需求预测及库存优化问题 问题背景&#xff1a; 电商平台存在着上千个商家&#xff0c;他们会将商品货物放在电商配套的仓库&#xff0c; 电商平台会对这些货物进行统一管理。通过科学的管理手段和智能决策&#xff0c; 大数据智能驱动的供应链…...

《动手学深度学习 Pytorch版》 10.7 Transformer

自注意力同时具有并行计算和最短的最大路径长度这两个优势。Transformer 模型完全基于注意力机制&#xff0c;没有任何卷积层或循环神经网络层。尽管 Transformer 最初是应用于在文本数据上的序列到序列学习&#xff0c;但现在已经推广到各种现代的深度学习中&#xff0c;例如语…...

ORACLE-递归查询、树操作

1. 数据准备 -- 测试数据准备 DROP TABLE untifa_test;CREATE TABLE untifa_test(child_id NUMBER(10) NOT NULL, --子idtitle VARCHAR2(50), --标题relation_type VARCHAR(10) --关系,parent_id NUMBER(10) --父id );insert into untifa_test (CHILD_ID, TITLE, RELATION_TYP…...

MySQL篇---第四篇

系列文章目录 文章目录 系列文章目录一、并发事务带来哪些问题?二、事务隔离级别有哪些?MySQL的默认隔离级别是?三、大表如何优化?一、并发事务带来哪些问题? 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对 同一数据进行操作…...

em/px/rem/vh/vw单位的区别

一、绝对长度单位 1.px 表示像素&#xff0c;显示器上每个像素点大小都是相同的 二、相对长度单位 2.em 相对于当前对象内文本的字体尺寸&#xff0c;如未设置对行内文本字体的尺寸&#xff0c;则相对于浏览器的默认字体&#xff08;1em16px&#xff09; em值不是固定的&…...

【C++】多态 ③ ( “ 多态 “ 实现需要满足的三个条件 | “ 多态 “ 的应用场景 | “ 多态 “ 的思想 | “ 多态 “ 代码示例 )

文章目录 一、" 多态 " 实现条件1、" 多态 " 实现需要满足的三个条件2、" 多态 " 的应用场景3、" 多态 " 的思想 二、" 多态 " 代码示例 一、" 多态 " 实现条件 1、" 多态 " 实现需要满足的三个条件 &q…...

创建一个Keil项目

1、创建项目 2、选择存放的文件夹&#xff0c;还有设置项目名 3、选择型号&#xff08;因为没有STC,用下面这个替代&#xff0c;功能差不多&#xff09; 4、选择不用启动文件 5、就会得到下面这个&#xff0c;可以在Source Group 1下面编写代码了 6、右键source Group 1,添加c语…...

Xray的简单使用

xray 简介 xray 是一款功能强大的安全评估工具&#xff0c;由多名经验丰富的一线安全从业者呕心打造而成&#xff0c;主要特性有: 检测速度快。发包速度快; 漏洞检测算法效率高。支持范围广。大至 OWASP Top 10 通用漏洞检测&#xff0c;小至各种 CMS 框架 POC&#xff0c;均…...

STM32F103C8T6的读保护功能,到底怎么用才安全?一个真实案例带你避坑

STM32读保护功能实战指南&#xff1a;从原理到避坑全解析 记得去年接手一个工业控制器项目时&#xff0c;团队里有位新人工程师在调试STM32F103C8T6时不小心触发了读保护&#xff0c;导致整批样品芯片集体"罢工"。那天的紧急加班让我深刻意识到——读保护功能就像一把…...

如何用Untrunc开源工具拯救损坏的视频文件:从理论到实践的完整指南

如何用Untrunc开源工具拯救损坏的视频文件&#xff1a;从理论到实践的完整指南 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc …...

macOS极简部署:OpenClaw与Qwen3-14B镜像云端联调指南

macOS极简部署&#xff1a;OpenClaw与Qwen3-14B镜像云端联调指南 1. 为什么选择云端联调 去年冬天&#xff0c;当我第一次尝试在本地MacBook Pro上部署OpenClaw时&#xff0c;整整两天时间都耗在了环境配置上。从Homebrew版本冲突到Node.js权限问题&#xff0c;再到CUDA驱动不…...

Wan2.2-T2V-A5B在自媒体场景实战:批量生成诗意文案短视频

Wan2.2-T2V-A5B在自媒体场景实战&#xff1a;批量生成诗意文案短视频 1. 为什么自媒体需要轻量级视频生成工具 在内容创作领域&#xff0c;短视频已经成为最主流的内容形式之一。特别是结合诗意文案的短视频&#xff0c;在各大平台都拥有极高的用户粘性和传播度。然而&#x…...

OpenClaw模型微调:让Phi-3-mini适配你的专属工作流

OpenClaw模型微调&#xff1a;让Phi-3-mini适配你的专属工作流 1. 为什么需要微调Phi-3-mini&#xff1f; 当我第一次将Phi-3-mini接入OpenClaw时&#xff0c;发现这个"聪明"的小模型在处理我的专业领域任务时总有些力不从心。它能够理解通用指令&#xff0c;但当我…...

Unity3D RPG游戏开发:从零构建角色扮演游戏的核心系统

1. 环境准备与项目初始化 第一次打开Unity Hub时&#xff0c;新手常会被各种版本和选项搞得晕头转向。我建议直接安装最新的LTS版本&#xff08;比如2022.3&#xff09;&#xff0c;这个版本就像游戏界的"稳定版安卓系统"&#xff0c;既不会太老缺少功能&#xff0c;…...

C语言void指针与函数指针的深度解析与应用

1. 深入理解void指针的本质void指针是C语言中一个独特而强大的工具&#xff0c;它本质上是一个"无类型"的指针。与普通指针不同&#xff0c;void指针不关联任何具体的数据类型&#xff0c;这使得它具有特殊的属性和限制。1.1 void指针的基本特性void指针的声明方式很…...

OpenClaw自动化测试:百川2-13B量化模型驱动Web应用爬虫

OpenClaw自动化测试&#xff1a;百川2-13B量化模型驱动Web应用爬虫 1. 为什么选择OpenClaw做Web自动化测试 去年接手一个内部管理系统重构项目时&#xff0c;我遇到了一个典型痛点&#xff1a;每次前端迭代后&#xff0c;都需要人工遍历几十个页面检查基础功能是否正常。这种…...

Spotless许可证头管理终极指南:如何自动化年份更新与版权保护

Spotless许可证头管理终极指南&#xff1a;如何自动化年份更新与版权保护 【免费下载链接】spotless Keep your code spotless 项目地址: https://gitcode.com/gh_mirrors/sp/spotless Spotless是一款强大的代码格式化工具&#xff0c;能够帮助开发者自动管理许可证头&a…...

ARM单片机位带操作原理与应用详解

1. ARM单片机位带操作基础回顾在嵌入式开发中&#xff0c;位带操作(Bit-Banding)是Cortex-M系列处理器提供的一个非常实用的功能特性。简单来说&#xff0c;它允许开发者通过访问特定内存地址的方式&#xff0c;直接操作某个寄存器的单个比特位&#xff0c;而无需进行传统的&qu…...