kotlin Control Flow

从零构建安卓论坛App:MVVM架构、协程与Room数据库实战 在移动应用开发领域,构建一个功能完整、体验流畅的客户端应用是核心技能。其关键在于采用合理的架构模式实现关注点分离,并高效处理数据流与异步任务。MVVM(Model-View-ViewModel)架构是当前Android官方推荐的主流模式,它通过ViewModel管理UI相关数据,并利用LiveData或StateFlow实现数据驱动UI更新,极大地提升了代码的可测试性与可维护性。在实际工程中,网络请求、本地数据持久化与复杂的UI交互是常见挑战。通过集成Retrofit和OkHttp可以构建稳健的网络层,而R 阅读详情

kotlin流程控制语句,官网:https://kotlinlang.org/docs/reference/control-flow.html

Control Flow: if, when, for, while

kotlin中的流程语句主要有四个 if when  for while,现在一个个来.

If Expression

In Kotlin, if is an expression, i.e. it returns a value. Therefore there is no ternary operator (condition ? then : else), because ordinary if works fine in this role

在Kotlin中,如果是表达式,即返回一个值。 因此,没有三元运算符(条件?then:else),因为普通if在此角色下工作正常

//传统写法
fun main(){
    var a:Int  = 3;
    var b:Int = 4;
    if(a>b){
        print("a大于b")
    }else{
        print("a小于b")
    }
}

上面是传统写法,其实还有更简单的写法,使用表达式的方式

//表达式
fun main(){
    var a:Int  = 3;
    var b:Int = 4;
    val max = if (a > b) a else b
    print("max-->"+max);
}

如果if或者else里面下的逻辑代码特别多,那使用这个就行不通了,那还是要和Java中的if...else一样

如果分支可以是块,并且最后一个表达式是块的值,这点就比Java强很多了

//表达式
fun main(){
    var a:Int  = 3;
    var b:Int = 4;
    val max = if (a > b) {
        print("Choose a")
        a
    } else {
        print("Choose b")
        b
    }
    print(max)
}

 if或者else语句的最后一句是表达式中的值,那么这个时候if表达式的返回值就是这个值了,

When Expression

when语句就好比Java中的switch,但是比switch强很多

fun main(args:Array<String>){
    var x:Int=1
    when (x) {
        1 -> print("x == 1")
        2 -> print("x == 2")
        else -> { // Note the block
            print("x is neither 1 nor 2")
        }
    }
}

when依次将其参数与所有分支匹配,直到满足某些分支条件。 when可以用作表达式或语句。 如果将其用作表达式,则满足的分支的值将成为整个表达式的值。 如果将其用作语句,则忽略各个分支的值。 (与if一样,每个分支可以是一个块,其值是该块中最后一个表达式的值。)

如果其他分支条件都不满足,则评估else分支。 如果将when用作表达式,则else分支是必需的,除非编译器可以证明所有可能的情况都被分支条件覆盖(例如,枚举类条目和密封类子类型)

如果许多情况下应以相同的方式处理,则分支条件可以用逗号组合,比如

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

上面0和1处理方式是一样的,则可以放在一块处理.

我们可以使用任意表达式(不仅是常量)作为分支条件

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

相当于Java中的case中不一定是常量 在kotlin中表达式也可以作为case的条件

我们还可以检查范围或集合中处于或!

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}

在kotlin中用于在某个范围可以使用..比如1到100 可以写成这样 1..100 代码表示

var i = 1..100

For Loops

for (item in collection) print(item)

在kotlin中for表达式要比Java中书写更容易, 跟groovy语法比较像 在kotlin中for循环的写法

for (item: Int in ints) {
    // ...
}

简单的例子:

fun main(args:Array<String>){
    val list = listOf<Int>(1,2, 3,4)
    for(item:Int in list){
        println("item-->"+item)
    }
}

for循环不一定一定要使用集合或者数组,也可以使用范围,这点在Java中是没有这个语法的

fun main(args: Array<String>){
    for (i in 1..3) {
        println(i)
    }
}

for循环在有些需求我们要求是倒序 那么在kotlin中怎么写呢? kotlin中提高了downTo

fun main(args:Array<String>){
    for (i in 6 downTo 5) {
        println(i)
    }
}

downTo后面的数字表示倒序到那 上面是5表示从6到5 就二个数字

downTo后面的数字不能大于前面的数字

 

安卓原生开发为何是初创企业的生存基础设施 安卓原生开发是移动应用开发的基础技术路径,指基于Android SDK、直接调用系统API构建高性能、高可控性客户端的能力。其核心原理在于绕过Web容器或跨端中间层,实现对硬件传感器、后台服务、离线存储及厂商推送等底层能力的稳定访问。相比H5、小程序或跨平台方案,原生开发在弱网适配、消息送达率、启动性能和隐私合规等方面具备不可替代的技术价值。典型应用场景包括社区团购实时订单同步、智能硬件蓝牙联动、车载Android Auto集成、金融类App安全保活等强交互、低延迟、高可靠性需求领域。对于资源有限的初创企业 阅读详情

相关推荐

Kotlin协程与流式编程实践:解析营销语音设置指令处理

本文探讨了在Android开发中如何利用Kotlin协程和Flow API处理IoT设备的营销语音设置指令。通过一个真实案例,展示了流式编程在异步网络下载、文件操作和MQTT消息响应等复杂业务场景中的应用。文章详细解析了核心代码架构,包括数据解析、语音下载、条件分支处理等关键环节,并强调了流式编程在声明式表达、组合性和错误处理方面的优势。同时提供了协程调度、线程安全、错误反馈等最佳实践,以及性能优化和测试策略建议。该方案为类似异步业务逻辑处理提供了可复用的实现模式。

学无止境 152

Kotlin Reference (六) Control Flow

if表达式在kotlin中,if是一个表达式,即它返回一个值。kotlin中没有Java中的三元运算符。// Traditional usage var max = a if (a < b) max = b// With else var max: Int if (a > b) { max = a } else { max = b }// As expression val

498

关于HC32F460 输出可调占空比PWM波遇到的问题记录

文章目录问题记录一、问题分析二、解决方法总结 问题记录 芯片:HC32F460系列 功能:PWM电机调速 最近产品开发,需要用到HC32的PWM输出来控制电机的转速。参考官方的例程很快就完成了相关的功能,但是,后面在测试,重复开关电机的时候,发现电机的转速时大时小。 一、问题分析 一开始,怀疑是相关寄存器的设置出错导致的问题。因此在设置PWM输出时加上LOG打印,上机测试并没有发现问题。 用示波器抓取波形,这是正常状态下的波形(上电默认配置成5kHz,70%占空比输出) 这是转速较小时的波形输出 .

Top0_0lll的博客 6165

Kotlin Reference (四) control flow

KotLin 流程控制:if 、when、for、while 及 break、continue、return

打渔还是晒网 —— stone 991

Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++

部分参考:https://mp.weixin.qq.com/s/2GZAJAUPHTXFOKDRv-D21Q 一、下载源码 https://github.com/opencv 二、源码编译 ① 在cmake中添加源码编译路径和生成路径,第一次点击configure。 ② 添加contrib路径 第一次configure后,找到OPENCV_EXTRA_MODULES_PATH,将contrib路径添加进来,注意要具体到modules/,继续configure。 ..

zaibeijixing的专栏 1万+

从零开始:手把手教你用Verilog搭建一个可配置的Cache模块(以Vortex GPGPU为例)

本文详细介绍了如何使用Verilog从零开始搭建一个可配置的Cache模块,以Vortex GPGPU为例。内容涵盖Cache设计基础、模块接口与参数化设计、核心子模块实现、仲裁与一致性机制、功能验证与性能调优等关键环节,适合RTL设计初学者和希望深入理解Cache工作原理的工程师。通过实战指南,读者可以掌握硬件代码分析技巧,提升Cache模块的设计能力。

weixin_42552315的博客 441

Kotlin 8. Kotlin Control Flow: When, For, While, Range 等使用

介绍 `When`, `For`, `ForEach`, `While`, `Do-While`, `Range: ..` 等使用。

破浪会有时的博客 406

【全局路径规划模块全覆盖算法】(三)代码实现:Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 1832

Kotlin的学习日志(二)Control Flow

有关于流程控制的部分,代码如下,有任何错误的地方,请指出,谢谢 /** * Created by Gray on 2017/5/26. */ /* 流程控制 1、if表达式 ifTest() 2、When代替了switch whenTest() whenTest2()

wagg1993323的博客 683

hadoop 切片机制详解

hadoop切片机制详解

congge 1万+

【YOLOv11工业级实战】15. YOLOv11海洋监测实战:珊瑚礁健康评估(水下图像增强|机器人搭载)

摘要:本文针对珊瑚礁健康评估的海洋监测需求,基于YOLOv11提出解决方案,聚焦水下色偏、悬浮物干扰、珊瑚形态复杂三大难题。引用全球珊瑚礁监测网络(GCRMN)标准,采用CoralNet数据集,通过Jaffe-McGlamery物理模型引导增强与悬浮物去除算法,在浑浊水域(能见度<5m)实现87.3%的健康珊瑚识别率,藻类误判率低至7.2%。介绍了以BlueROV2水下机器人和Jetson AGX Orin为核心的部署方案,结合水下SLAM定位技术,实现珊瑚健康的实时评估与三维覆盖率计算。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1644

3:kotlin 逻辑控制(Control flow)

向其他语言一样,kotlin也有循环和逻辑控制。

qq_40104261的博客 825

使用自制的NTC测量模块测试Plecs的热仿真效果

可以测试:您完全可以用这个模型来测试热仿真。NTC 模型是连接电气域和热域的关键桥梁。实现闭环:通过这种方式,您创建了一个高度真实的正反馈闭环系统:负载增加 -> 损耗增加 -> 温度升高 -> NTC 阻值变化 -> 控制电路可能因此调整(如降低频率或电流)-> 损耗变化 -> 温度变化。应用场景:这对于设计过温保护 (OTP) 电路风扇控制系统以及分析热失控条件非常有用。单位:确保热域中使用的单位( Kelvin 或 Celsius )与您的 C-Script 模型输入期望的单位一致。

311

Kotlin-06.控制流程(control flow)

官方文档: http://kotlinlang.org/docs/reference/control-flow.html 2.when语句/when表达式 3.循环 在循环中 Kotlin 支持传统的 break 和 continue 2.while循环 优快云博客: http://blog.youkuaiyun.com/qq_32115439/article/details/73304865 GitHub博客:http://lioil.win/2017/06/15/Kotlin-contr

jackson61的博客 128

最新Python爬虫实战(入门爬虫篇)——案例18:某气象局全国天气预报数据采集(详细爬虫思路截图 + 抓包动图演示+完整爬虫代码+详细注释)

本次案例针对某气象局天气预报网的静态HTML页面,实现了全国各地区天气数据的全自动化爬取,和之前案例17的动态接口爬虫不同,本次案例聚焦于静态页面的爬虫实现,覆盖了从抓包分析、请求模拟、数据解析到数据存储的完整爬虫流程,非常适合入门学习者巩固基础,核心知识点和实现要点总结如下:首先是页面分析的核心逻辑,静态HTML页面的数据爬取,核心在于通过浏览器开发者工具,完成完整的抓包分析和标签结构定位。

努力让自己发光,对的人才能迎着光而来 27万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

彻底防反编译:Kotlin/Native代码混淆实战指南

Kotlin/Native作为跨平台开发的利器,其编译生成的原生代码面临着被反编译分析的风险。本文将系统讲解如何通过代码混淆技术保护Kotlin/Native应用,涵盖工具选型、配置实践和效果验证,帮助开发者构建安全加固的应用防护体系。 ## 混淆前的风险评估 原生代码通常被认为比字节码更难逆向,但实际上通过反编译工具、逆向分析工具等仍可对Kotlin/Native编译产物进行反编译和静态分析

gitblog_00777的博客 1083

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

fritz2组件开发实战:从零开始创建可复用Web组件

fritz2是一个基于Kotlin的响应式Web应用开发框架,它利用协程和数据流构建现代化Web应用。本文将带你从零开始学习如何使用fritz2创建可复用的Web组件,掌握组件开发的核心技巧和最佳实践。 ## 为什么选择fritz2开发Web组件? fritz2采用独特的响应式编程模型,通过Store管理应用状态,结合Kotlin的类型安全特性,让Web组件开发更加可靠和高效。其核心优势包括:

gitblog_07555的博客 433

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java flowable,如何在RxJava中明确表示Flowable的完成?

I'm trying to create a Flowable which is wrapping an Iterable. I push elements to my Iterable periodically but it seems that the completion event is implicit. I don't know how to signal that processin...

weixin_39945445的博客 305

KotlinPoet:从零开始构建Kotlin代码生成器的终极指南

KotlinPoet是一个强大的Kotlin和Java API,专门用于生成`.kt`源代码文件。这个开源工具让开发者能够以编程方式创建Kotlin类、函数、属性等代码结构,彻底改变了手动编写重复代码的传统方式。无论你是构建注解处理器、数据库映射工具,还是需要动态生成代码的任何场景,KotlinPoet都能显著提高开发效率,减少错误。 ## 🎯 场景引入:为什么我们需要代码生成器? 想象一下

gitblog_01132的博客 921

PESecurity vs 其他PE检测工具:优势与局限深度分析

在Windows二进制文件安全检测领域,**PE文件安全检测工具**是开发者和安全分析师的重要帮手。它们能够快速识别EXE/DLL文件是否启用了关键安全机制,如ASLR、DEP、Control Flow Guard等。今天我们将深入对比**PESecurity**这款PowerShell模块与其他同类工具的核心差异,帮助你选择最适合的检测方案。 ## 🔍 PESecurity核心功能解析 P

gitblog_00031的博客 325

CKEditor 4 Table Resize 插件合并单元格(Rowspan)缩放修复解析与手动回归测试指南

本篇技术指南以 CKEditor 4 仓库中的手动测试用例 [tests/plugins/tableresize/manual/rowspan.md](https://link.gitcode.com/i/e67b83db56ca8f60892dd9268e1bf72d) 为核心,深入讲解 Table Resize(表格列宽拖拽缩放)插件在处理合并单元格(`rowspan`)时的底层原理、历史 B

gitblog_01196的博客 393

android之R8混淆引起Java与Kotlin混编异常Didn‘t find class on path: DexPathList

记一次R8导致Java与Kotlin混编异常Didn't find class on path: DexPathLis

zhukui66的专栏 1万+

2023 Android面试核心指南:从JVM到Framework,性能优化与架构设计全解析

在移动开发领域,深入理解Java虚拟机(JVM)内存模型与垃圾回收机制是构建高性能应用的基础。JVM通过堆、栈、方法区等内存区域的协同管理,以及分代收集等GC算法,保障了应用的稳定运行。在Android平台上,ART虚拟机针对移动设备特性进行了深度优化,其并发复制GC等策略有效减少了停顿时间。掌握这些底层原理,对于解决内存泄漏、优化应用性能具有重要价值。特别是在Android开发中,对Binder IPC机制和事件分发流程的透彻理解,能帮助开发者构建响应迅速、体验流畅的应用。本指南聚焦于Android面试中

weixin_34319111的博客 396

Android组件化开发核心技术与最佳实践

组件化开发是Android应用架构的核心方法论,其本质是通过模块解耦提升代码复用率与团队协作效率。从技术原理看,Android组件可分为基础UI组件、架构组件和功能型组件三大类,其中Jetpack组件库通过ViewModel、LiveData等实现了生命周期感知与数据持久化。在工程实践中,组件化能显著提升构建速度(热词:模块化架构),并支持动态功能交付(热词:App Bundle)。典型应用场景包括电商应用的支付模块动态加载、新闻应用的UI组件复用等。现代Android开发中,Retrofit+OkHttp

weixin_30735745的博客 321

Android统一开发标准深度解析:从MVVM架构到工程化实践

在移动开发领域,架构模式是构建可维护、可扩展应用的核心基础。MVVM(Model-View-ViewModel)作为一种主流架构,通过数据绑定和生命周期感知机制,实现了UI逻辑与业务逻辑的清晰分离,其原理在于利用观察者模式确保数据状态与界面呈现的一致性。这种架构的技术价值在于显著提升了代码的可测试性和团队协作效率,是应对复杂业务场景的工程化基石。在实际应用场景中,结合Android Jetpack组件库(如ViewModel、LiveData/StateFlow)和统一的代码规范,能够有效解决项目碎片化与维

weixin_33802505的博客 422
上一篇: android Auto animate layout updates
下一篇: 重学设计模式
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值