Kotlin学习——流程控制,when,循环,range工具 kt里的equals if实现类似三元表达式的效果

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。
https://play.kotlinlang.org/byExample/01_introduction/02_Functions
其他关于kt的博客文章如下:
- Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
目录
- 引出
- when(case)
- 循环loops
- for,while,do while
- Iterators 自定义迭代
- range工具
- equals等于
- 类三元表达式
- 总结
引出
1.kt中的when语句具有较大的灵活性;
2.kt中的循环,支持自定义迭代器;
3.range工具,快速定义循环方式,开始,结束,步长;
4.equals等于,==比较值,而 ===比较引用;
5.if语句实现类似三元表达式的效果;
when(case)
Kotlin在构建时提供了更灵活、更清晰的when语句,而不是广泛使用的switch语句。它既可以用作语句,也可以用作表达式。
- 不存在穿透的问题,只会执行其中一个语句
- 有返回值的when,else语句不能省略
package com.tianju.ktFlow/*** 不存在穿透的问题,只会执行其中一个语句*/fun cases(obj: Any): Unit {when(obj){1 -> println("one")"hello" -> println("pet")is Long -> println("Long")!is String -> println("not a string")else -> println("unknown") // 默认语句,可以省略}
}/*** 有返回值的when*/fun whenAssign(obj: Any): Any {val resp = when(obj){1-> "one""hello"->1is Long -> falseelse -> 42 // 此时这条语句不能省略}return resp
}fun main() {cases("hello")cases("1")cases(3.6)cases(2)cases(1)val resp = whenAssign(1)println(resp)}
循环loops
for,while,do while
package com.tianju.ktFlow
// list
val cakes = listOf<String>("cat","rabbit","dog")
fun eatCake() = println("Eat a Cake")
fun throwCake() = println("Throw a cake")fun main() {// for循环for (cake in cakes){println("cake looks like $cake ")}// while循环var cakeEat = 0 // val 类型不能被重新设置while (cakeEat < 3){eatCake()cakeEat ++}// do-while循环var throwCake = 0do {throwCake()throwCake ++}while (throwCake < 2)}
Iterators 自定义迭代
- 定义一个iterator,名字必须是 iterator
- 当list有下一个时,返回animal 即,满足hasNext()
:Boolean,next():Animal
package com.tianju.ktFlowclass Animal(val name:String)class Zoo(val animals:List<Animal>){/*** 定义一个iterator,名字必须是这个;* 当list有下一个时,返回animal*/operator fun iterator():Iterator<Animal>{return animals.iterator()}
}fun main() {val zoo = Zoo(listOf(Animal("tiger"),Animal("lion")))for (animal in zoo){println("the animal is $animal, name is ${animal.name}")}
}
range工具
Kotlin中有一套用于定义范围的工具
- … 表示范围 左闭右闭,包括2
- until 左闭右开,不包括3
- step 步长为2
- downTo 从大到小
- char类型也能用,也支持 step
- 在 if语句中 使用range
package com.tianju.ktFlowfun main() {// .. 表示范围 左闭右闭,包括2for (i in 0..2){println(i)}// until 左闭右开,不包括3for (i in 0 until 3){println(i)}// step 步长为2for (i in 2..8 step 2){println(i)}// 从大到小println("********")for (i in 3 downTo 0){println(i)}println("*******char********")for (c in 'a'..'d'){println(c)}// char也支持 stepfor (c in 'z' downTo 's' step 2){println(c)}// 在 if语句中 使用rangeval x =2if (x in 1..5){println("x is in range from 1 to 5")}if (x !in 6..10){println("x is not in range from 6 to 10")}
}
equals等于
- ==比较值是否相同,相当于 equals
- === 比较两个引用是否指向同一个对象
package com.tianju.ktFlowval authors = setOf("pet","shi","tan")
val writers = setOf("tan","pet","shi")fun main() {// 比较值是否相同,相当于 equalsprintln(authors == writers)println(authors.equals(writers))// 比较两个引用是否指向同一个对象println(authors === writers)
}
类三元表达式
kt 里面没有三元表达式,可以使用if实现
package com.tianju.ktFlow/*** kt 里面没有三元表达式* ternary operator condition ? then : else*/// 可以使用if作为表达式实现
fun max(a:Int,b:Int) = if (a>b) a else bfun main() {println(max(39,45))
}
总结
1.kt中的when语句具有较大的灵活性;
2.kt中的循环,支持自定义迭代器;
3.range工具,快速定义循环方式,开始,结束,步长;
4.equals等于,==比较值,而 ===比较引用;
5.if语句实现类似三元表达式的效果;
相关文章:
Kotlin学习——流程控制,when,循环,range工具 kt里的equals if实现类似三元表达式的效果
Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…...
利用STM32CubeMX解读时钟树
1,低速时钟 LSE是外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。LSI是由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及IWDG(独立看门…...
Unity-链接MySql8.0
链接MySql8.0 1.准备dll 一、找到l18N相关的dll 这里给出一个参考地址 D:\Unity\2020.3.48f1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit在里面找到如下图的四个dll 二、下载数据库链接dll https://downloads.mysql.com/archives/c-net/在这里搜索历史版本(Archiv…...
Hive csv文件导入Hive
一、如何把csv文件导入Hive (1) 在Hive中建立与csv相对应的表 create table if not exists tmp.tmp_wenxin_20231123 (redeem_code_id string comment ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE;创建了一张名为tmp_wenxin_20231123的hive表&am…...
嵌入式的学习需要合理规划时间
低级的欲望放纵即可获得,高级的欲望只有克制才能达成。——卡耐基1、粉丝的误会 很多粉丝,问我, "胡老师我想报您的培训班。" ... 得知我知识业余时间写文章,紧接着又会问, "jg单位这么清闲啊&#…...
HTTP协议发展
HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) 每一代HTTP解决了什么问题? 下图说明了主要功能。 HTTP 1.0 于 1996 年最终确定并完整记录。对同一服务器的每个请求都需要单独的 TCP 连接。 HTTP 1.1 于 1997 年发布。TCP 连接可以保持打开状态…...
杰发科技AC7801——ADC软件触发的简单使用
前言 7801资料读起来不是很好理解,大概率是之前MTK的大佬写的。在此以简单的方式进行描述。我们做一个简单的规则组软件触发Demo。因为规则组通道只有一个数据寄存器,因此还需要用上DMA方式搬运数据到内存。 AC7801的ADC简介 7801的ADC是一种 12 位 逐…...
佳易王个体诊所门诊电子处方软件试用版下载,佳易王电子处方软件的配方模板功能作用与教程
佳易王个体诊所门诊电子处方软件试用版下载,佳易王电子处方软件的配方模板功能作用与教程 1、软件试用版及教程可以点击下方的官网卡片 2、软件中有一个实用的功能,配方模板功能,在开处方单时候可以一键导入配方,节省时间。 而…...
FFmpeg零基础学习(二)——视频文件信息获取
目录 前言正文一、获取宽高信息1、核心代码2、AVFormatContext3、avformat_alloc_context4、avformat_open_input5、avformat_find_stream_info6、av_dump_format7、av_find_best_stream End、遇到的问题1、Qt Debug模式avformat_alloc_context 无法分配对象,而Rele…...
探索 Vue 中的 bus.$emit:实现组件通信的强大工具
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
2017年五一杯数学建模A题公交车排班问题解题全过程文档及程序
2017年五一杯数学建模 A题 公交车排班问题 原题再现 随着徐州市经济的快速发展,公交车系统对于人们的出行扮演着越来越重要的角色。在公交车资源有限的情况下,合理的编排公交车的行车计划成为公交公司亟待解决的问题。以下给出公交车排班问题中的部分名…...
【c++】——类和对象(下) ——内存管理
作者:chlorine 专栏:c专栏 目录 💻 C/C内存分布 💻C语言中动态内存管理方式:malloc/calloc/realloc/free 编辑 💻C内存管理方式 👉new/delete操作内置类型 👉new和delete操作自定义类型 …...
大数据平台/大数据技术与原理-实验报告--部署全分布模式Hadoop集群
实验名称 部署全分布模式Hadoop集群 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.10.16-2023.10.20 实验仪器设备以及实验软硬件要求 专业实验室(配有cen…...
Android Gradle 升级到7.x及Maven推送问题
7.0以下的Android插件工程使用Maven上传时脚本如下所示。 plugins {id com.android.libraryid kotlin-androidid maven }// 源代码一起打包 task androidSourcesJar(type: Jar) {archiveClassifier.set(sources)from android.sourceSets.main.java.sourceFiles }uploadArchive…...
【实战】K8S Helm部署Redis Cluster Redisinsight
文章目录 前言部署Redis Cluster安装Redis Insight写在最后 前言 在Web服务的开发过程中,Redis一直以来都有着举足轻重的作用。基本上所有的后端服务都会用这个中间件实现具体的业务场景,比如常作为系统缓存、分布式锁,也可以实现排名、定位…...
3.前端--HTML标签-文本图像链接【2023.11.25】
1.HTML常用标签(文本图像链接) 文本标签 标题 <h1> - <h6> 段落<p> 我是一个段落标签 </p> 换行 <br /> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta ht…...
ctfshow刷题web入门--1--ljcsd
文章目录 ctf.show。信息搜集web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20。爆破。知识1.1 播种随机数生成器-mt_srand。参考web21--重点web22--做不出来web23web24web25web26web27web28。。。命令执行。知识1 绕过正则表达式…...
乘法原理 LeetCode 828. 统计子串中的唯一字符
我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。 例如:s "LEETCODE" ,则其中 "L", "T","C","O","D" 都是唯一字符,…...
python桌面开发PyQt6库和工具库QTDesigner安装和配置
一、安装PyQt6 二、安装pyqt6-tools 三、安装外部工具 四、创建QTDesigner 1.首先查找designer.exe的路径(可以自己在窗口中选择,也可以使用Everything搜索) 2.使用Everything搜索后会出现多个designer.exe,选中,OpenPath 3.选择…...
火柴棒等式
枚举 只要在保证等式正确的基础上判断火柴棒有没有用完就可以 因为数比较小,而且我不知道最大的等式中的数是多少,索性就设置为999了 还好对效率要求不大(doge) 要不然就得自己慢慢改最大数来试了 代码如下: #in…...
[RK3566-Android11] 基于SPI驱动的LED灯带控制:从硬件配置到动态效果实现
1. 为什么选择SPI驱动LED灯带? 在嵌入式开发中,控制LED灯带是常见需求。传统GPIO控制方式简单直接,但在RK3566这类高性能平台上,当系统负载较高时(比如开机阶段或运行复杂应用),GPIO的时序控制会…...
国内自动驾驶L4赛道的公司已经这么多了!
点击下方卡片,关注“自动驾驶之心”公众号戳我-> 领取自动驾驶近30个方向学习路线近期,社区在L4赛道上的公司进行了汇总,发现已经很多公司入局。主机厂方面有小鹏、特斯拉、长安;技术提供商有文远、小马、哈啰、元戎、Apollo、…...
Onekey Steam Depot清单下载器:三步快速获取游戏清单的完整指南
Onekey Steam Depot清单下载器:三步快速获取游戏清单的完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为Steam游戏清单的复杂获取流程而烦恼吗?Onekey Stea…...
协作与迭代:当Code Review意见砸过来,CI流水线又红了
协作与迭代:当Code Review意见砸过来,CI流水线又红了 上周三深夜,我在仓库里提交了一段SPI驱动优化代码。自觉逻辑清晰,性能提升明显,满心等着合入。第二天一早,企业微信弹出三条Code Review通知,紧接着CI流水线标红——一个隐蔽的时序bug在QEMU仿真里被逮了出来。这场…...
体系结构论文(106):MobileKernelBench: Can LLMs Write Efficient Kernels for Mobile Devices?
MobileKernelBench: Can LLMs Write Efficient Kernels for Mobile Devices?【阿里巴巴26年paper】这篇文章在讲什么这篇文章研究的是:LLM 能不能帮我们给移动端设备写高质量 kernel。这里的“移动端 kernel”不是服务器 GPU 上那种 CUDA kernel,而是面…...
一键部署UI-TARS-desktop:体验多模态AI智能体的便捷操作
一键部署UI-TARS-desktop:体验多模态AI智能体的便捷操作 1. UI-TARS-desktop简介 UI-TARS-desktop是一款基于Qwen3-4B-Instruct-2507模型的多模态AI智能体应用,它通过轻量级的vLLM推理引擎提供服务,为用户带来便捷的智能交互体验。这个开源…...
FastAPI项目里那个烦人的favicon.ico 404报错,3分钟教你彻底搞定它
FastAPI开发中favicon.ico报错的深度解决方案与技术内幕 当你启动FastAPI开发服务器时,控制台突然跳出GET /favicon.ico HTTP/1.1" 404 Not Found的红色警告,这场景是不是很熟悉?作为一个长期使用FastAPI的开发者,我完全理解…...
STM32定时器外部计数模式实战:高精度频率计设计与优化
1. 为什么选择外部计数模式做频率计 在嵌入式开发中,测量信号频率是个常见需求。我最初尝试用外部中断方式实现,发现当信号频率超过100kHz时,CPU中断响应就跟不上了。后来改用输入捕获模式,虽然精度提升到0.5%,但测量范…...
为什么93%的企业NER项目卡在第2.7阶段?——基于奇点大会27家头部厂商落地数据的断点诊断模型
第一章:为什么93%的企业NER项目卡在第2.7阶段? 2026奇点智能技术大会(https://ml-summit.org) “第2.7阶段”并非官方标准,而是工业界对NER(命名实体识别)落地过程中一个高频失败临界点的戏称——它介于完成模型训练&…...
SOA架构实战:从企业服务总线(ESB)到微服务的演进之路
SOA架构实战:从企业服务总线(ESB)到微服务的演进之路 当企业IT系统从单体架构迈向分布式架构时,SOA(面向服务的架构)曾是最重要的技术范式之一。然而随着云计算和容器技术的普及,传统的ESB(企业服务总线&am…...
