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

news2024/11/16 10:27:08

在这里插入图片描述

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语句实现类似三元表达式的效果;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KVM虚拟机的NAT网络模式原理及过程展示

NAT的方式及原理 NAT方式是KVM安装后的默认方式。 它支持主机与虚拟机的互访&#xff0c;同时也支持虚拟机访问互联网&#xff0c;但不支持外界访问虚拟机。 default是宿主机安装虚拟机支持模块的时候自动安装的。 其中 virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接…

Python编程技巧 – Lambda函数

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

【Linux】:信号的产生

信号 一.前台进程和后台进程1.前台进程2。后台进程3.总结 二.自定义信号动作接口三.信号的产生1.键盘组合键2.kill信号进程pid3.系统调用1.kill函数2.raise函数3.abort函数 四.异常五.软件条件六.通过终端按键产生信号 一.前台进程和后台进程 1.前台进程 一个简单的代码演示 …

【Spring集成MyBatis】MyBatis注解开发

文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查 使用注…

Leetcode—83.删除排序链表中的重复元素【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—83.删除排序链表中的重复元素 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* deleteDuplicates(struct ListNode* head) {i…

张弛语言课,战争电影配音声音细致声音来复原战场

为战争片进行声音配音是一项挑战性的工作&#xff0c;它要求精确再现战场的紧张感和复杂情绪。配音人员和声音设计团队必须创造出真实的战争声景&#xff0c;从战斗的轰鸣声到士兵的呐喊&#xff0c;这些声音元素都需细致打造&#xff0c;以传递战争的惨烈、英勇和人性的复杂。…

工作中死循环害死人

背景&#xff1a;研发的一段代码&#xff0c;循环一直没有跳出&#xff0c;导致其他依赖逻辑有问题&#xff0c;生产事故导致9万左右数据不正常。 这里while&#xff08;true&#xff09;真的不要轻易用 &#xff0c;后来研发改动限制mysql的id切分步长&#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; 文章图文…

移动机器人路径规划(七)--- 基于MDP的路径规划MDP-Based Planning

目录 1 什么是MDP-Based Planning 2 worst-case analysis for nondeterministic model 3 Expected Cost Planning 4 Real Time Dynamic Programming&#xff08;RTDP&#xff09; 1 什么是MDP-Based Planning 之前我们从起点到终点存在很多可执行路径&#xff0c;我们可以…

可验证随机函数(VRF)

文章目录 一、背景以及场景共识发展第一代 POW “以力取胜”第二代 POS/DPOS “民主投票”第三代 VRF “运气抽签” 二、可验证随机函数&#xff08;VRF&#xff09;快速开始1. VRF是什么?2. MD5 hash函数和VRF&#xff08;Verifiable Random Function&#xff09;区别3. VRF-…

日历视图,轻松解决时间管理难题丨三叠云

日历组件 路径 仪表盘设计 >> 组件 功能简介 仪表盘新增「日历」组件。日历组件是以日历图的形式去呈现数据的一种方式&#xff0c;支持【列表模式】和【面板模式】。 【列表模式】&#xff1a; 通过日历方式筛选数据&#xff0c;数据将会以列表的方式呈现。 【面…

视频图片提取秘籍:从指定时长中提取想要的视频封面

在如今的内容丰富的互联网世界中&#xff0c;视频已经成为大家获取信息、娱乐和交流的重要方式之一。而视频的封面或图片&#xff0c;作为视频内容的“名片”&#xff0c;往往决定了观众是否愿意点击和进一步了解视频内容。视频图片提取&#xff0c;通常也被称为视频封面提取&a…

Python实现一箭穿心

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

【教学类-06-10】20231125(55格版)X-Y之间“乘法*题”(以1-9乘法口诀表为例)(0-9乘法口诀表 最大81)

图片展示 &#xff08;随机打乱排序&#xff09; 正序 背景需求&#xff1a; 2023年11月24日&#xff0c;准备了一些题目&#xff0c;分别给大4班孩子介绍“5以内加法、5以内减法、5以内加减混合”““10以内加法、10以内减法、10以内加减混合”“”20以内加减混合“七款学具…

Datax安装部署及读取MYSQL写入HDFS

一.DataX简介 1.DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/Data…

openpnp - 丝杠安装调整的总结

文章目录 openpnp - 丝杠安装调整的总结概述笔记发现的问题 - X轴有回差发现的问题 - 丝杠两边的轴承座中心有高差(不同轴)备注END openpnp - 丝杠安装调整的总结 概述 设备定制回来后, 丝杠没敢动(开始是小白, 也没发现丝杠的相关问题. 因为看到同学自己安装丝杠那么痛苦, 最…

【刷题宝典NO.5】

有效的括号 https://leetcode.cn/problems/valid-parentheses/ 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必…

数仓中数据清洗的方法

在数据采集的过程中&#xff0c;需要从不同渠道获取数据并汇集在数仓中&#xff0c;采集的原始数据首先需要进行解析&#xff0c;然后对不准确、不完整、不合理、格式、字符等不规范数据进行过滤清洗&#xff0c;清洗过的数据才能更加符合需求&#xff0c;从而使后续的数据分析…

5、LED流水灯

LED流水灯 思路&#xff1a;每次LED灯熄灭后&#xff0c;下一个LED灯亮 #include <REGX52.H> #include <INTRINS.H>void Delay500ms() //12.000MHz {unsigned char i, j, k;_nop_();i 4;j 205;k 187;do{do{while (--k);} while (--j);} while (--i); }void m…