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"->1
        is Long -> false
        else -> 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 = 0
    do {
        throwCake()
        throwCake ++
    }while (throwCake < 2)

}

Iterators 自定义迭代

  • 定义一个iterator,名字必须是 iterator
  • 当list有下一个时,返回animal 即,满足hasNext(): Boolean,next(): Animal
package com.tianju.ktFlow

class 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.ktFlow

fun main() {

    // .. 表示范围 左闭右闭,包括2
    for (i in 0..2){
        println(i)
    }

    // until 左闭右开,不包括3
    for (i in 0 until 3){
        println(i)
    }

    // step 步长为2
    for (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也支持 step
    for (c in 'z' downTo 's' step 2){
        println(c)
    }

    // 在 if语句中 使用range
    val x =2
    if (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.ktFlow

val authors = setOf("pet","shi","tan")
val writers = setOf("tan","pet","shi")

fun main() {
    // 比较值是否相同,相当于 equals
    println(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 b

fun main() {
    println(max(39,45))
}

总结

1.kt中的when语句具有较大的灵活性;
2.kt中的循环,支持自定义迭代器;
3.range工具,快速定义循环方式,开始,结束,步长;
4.equals等于,==比较值,而 ===比较引用;
5.if语句实现类似三元表达式的效果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/188031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

张弛声音变现课,惊悚电影配音篇

在提供惊悚片的声音配音服务时&#xff0c;配音员旨在制造一种让观众的心率加快、情绪紧张的气氛。惊悚片侧重于心理层面的紧张和预期的恐怖&#xff0c;声音在塑造这种心理效应中起到了至关重要的作用。演员需通过对声音的精细雕琢和调整来强化电影的悬念和紧迫感。以下是为惊…

C语言SO EASY(ZZULIOJ1220: SO EASY)

题目描述 Superbin最近在研究初等数论&#xff0c;初等数论 是研究数的规律&#xff0c;特别是整数性质的数学分支。它是数论的一个最古老的分支。它以算术方法为主要研究方法&#xff0c;主要内容有整数的整除理论、同余理论、连分数理论和某些特殊不定方程。 是定义在正整数…

2017年2月16日 Go生态洞察:Go 1.8版本的革新

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

rocky8.9配置K8S集群kubernetes,centos同理

rocky8.9配置K8S集群 节点主机名IP地址mastertang1192.168.211.101node1tang2192.168.211.102node2tang3192.168.211.103 1&#xff09;准备工作 全部主机都配置静态ip vi /etc/sysconfig/network-scriptsTYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DE…

华为ensp:单臂路由

通过单臂路由实现vlan之间的互通 将vlan和trunk配置好&#xff0c;我直接就在r1上演示单臂路由 我们要在r1的e0/0/0上面随便配置个ip&#xff0c;如果你不在接口上配置ip那就无法开启协议 R1 interface e0/0/0 进入真实接口随便配置个ip ip add 192.168.10.1 24 再进入子接…

YOLOV7主干改进,使用fasternet轻量化改进主干(完整教程)

1&#xff0c;Pconv&#xff08;来自Fasternet&#xff09;&#xff08;可作为模型中的基础卷积模块使用&#xff09; 论文链接&#xff1a;https://arxiv.org/abs/2303.03667 2&#xff0c;为了大家方便的使用&#xff0c;这里我对原本的PConv的代码做了部分的改动&#xff0…

Executors(线程池操作类)

一&#xff0c;常用方法 二&#xff0c;案例 package XianChengChildren;import java.util.concurrent.*;public class ThewadPoolTest1 {public static void main(String[] args) throws Exception { // ExecutorService pool new ThreadPoolExecutor(3,5,8, // …

C++类与对象(6)—初始化列表、explicit关键字、static成员

目录 一、初始化列表 1、定义 2、注意事项 3、尽量使用初始化列表初始化 4、初始化顺序 二、 explicit关键字 1、定义 三、static成员 1、定义 2、特性 3、例题 一、初始化列表 下面这段代码可以正常编译&#xff1a; class A { private:int _a1;//成员声明int…

企业海外分部,如何实现安全稳定的跨境网络互连?

如今&#xff0c;众多企业广泛采取数字化业务系统&#xff0c;如OA、ERP及CRM等&#xff0c;来提升其业务运营效率。同时&#xff0c;私有云与公有云混合架构也逐渐普及化。 具体来说&#xff0c;很多企业选择将研发系统部署在公司本地的私有云环境&#xff0c;以此确保数据安全…

pgz easyexcel如何给excel文件添加自定义属性

免费API方式 直接上传URL,自定义修改Excel 视频演示【内含接口地址】 https://www.ixigua.com/7304510132812153385 前情提示 | 功能说明 多选仅支持微软office、office365系列Excel。因为WPS宏功能需要企业版且付费生成xlsx、xlsm等文件,office和WPS均可以打开,均可以单…

BTC 复兴:Ordinals 带来创新活力,BitVM 与 BitStream 相继问世

除了备受瞩目的 ETF&#xff0c;今年 Bitcoin 生态迎来全新的发展活力和机遇。Ordinals 协议的横空出世&#xff0c;以此为基础诞生的 BRC20 协议给整个比特币生态带去了一波新的能量&#xff0c;迎来铭文热度高涨。而诸如 BitVM、BitStream 等新技术甫一问世&#xff0c;便引发…

学习分布式事务Seata看这一篇就够了,建议收藏

一、事务的特性 ACID特性 A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么全部不执行&#xff0c;不可能出现部分成功部分失败的情况。 C&#xff08;Consistency&#xff09;&#xff1a;一致…

Python编程技巧 – Lambda函数

Python编程技巧 – Lambda函数 Python Programming Skills – Lambda Functions By JacksonML 2023-11-25 在前文介绍过Python函数&#xff0c;一个函数用def关键字声明&#xff0c;不带或带有参数&#xff0c;并以冒号结束&#xff1b;函数块根据结果由解释器确定返回值动态…

计数问题+约瑟夫问题(map)

目录 一、计数问题 二、约瑟夫问题 一、计数问题 #include<iostream> #include<map> using namespace std; int main() {int n,x;cin>>n>>x;map<int,int>m;for(int i1;i<n;i){if(i>1 && i<10){m[i];}else{int temp i;while (…

MYSQL基础知识之【添加数据,查询数据】

文章目录 前言MySQL 插入数据通过命令提示窗口插入数据使用PHP脚本插入数据 MySQL 查询数据通过命令提示符获取数据使用PHP脚本来获取数据内存释放 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博…

【Jenkins】jenkins发送邮件报错:Not sent to the following valid addresses:

jenkins报错未能发送邮件到指定邮箱 注意&#xff1a;这是在系统配置中修改 在系统配置》邮件通知中添加配置信息 注意&#xff1a;这个是在项目的配置下修改 配置完成后&#xff0c;重新执行发送邮件成功&#xff01;&#xff01;&#xff01;

Python实现一箭穿心

文章目录 &#x1f384;效果&#x1f3f3;️‍&#x1f308;Turtle模块&#x1f339;代码&#x1f33a;代码讲解 &#x1f384;效果 &#x1f3f3;️‍&#x1f308;Turtle模块 Turtle是一个绘图工具&#xff0c;是Python标准库中的一个模块。它提供了一种简单而直观的方式来创…

在JVM中 判定哪些对象是垃圾?

目录 垃圾的条件 1、引用计数法 2、可达性分析 3、强引用 4、软引用 5、弱引用 6、虚引用 判断垃圾的条件 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾收集器负责管理内存&#xff0c;其中的垃圾收集算法用于确定哪些对象是垃圾&#xff0c;可以被回收…

Linux的基本指令(二)

目录 前言 学前补充 touch指令 mkdir指令 rmdir指令 rm指令 通配符* man指令 cp指令 mv指令(重要) 补充内容&#xff1a; 1、如何快速在Linux中写出代码 2、如何看待如此多的Linux指令 cat指令 前言 关于Linux的基本指令我们会分三到四篇文章进行分析&#xff0c…