变量和函数

变量

// val为常量,一旦赋值就不可变
val a = 10
val a: Int = 10
a = 3 // 报错// var为变量
var a = 10
a = 3
var b: Int = 20
b = 2

函数

 fun add(a: Int, b: Int): Unit {a += b // 报错,参数默认val
}fun add(a: Int, b: Int) {var x: Int = ax += b
}fun add(a: Int, b: Int): Int {return a + b // 或者val c = a + b  retun c
}// 还可以再精简
fun add(a: Int, b: Int) = a + b// 调用函数
val a: Int = 1
val b: Int = 2
add(a, b) // 返回值为Unit的函数
val c = add(a, b) // 返回值为Int的函数

逻辑控制

if条件语句

val a: Int = 1
val b: Int = 2
var v: Int = 0
if (a > b) {v = a
} else {v = b
}// 也可以写成
var v = if (a > b) a else b // var v = if (a > b) {a} else {b}等价var v = if (a == 1) a else if (a == 2) b else c

when条件语句

var a: Int = 0
when (a) {1 -> Log.d("tag", "1")2 -> Log.d("tag", "2")else -> Log.d("tag", "else")
}when {a == 1 -> Log.d("tag", "1")a == 2 -> Log.d("tag", "2")else -> Log.d("tag", "else")
}fun get(a: Int) = when(a) {1 -> Log.d("tag", "1")else -> Log.d("tag", "2")
}

循环语句

val range = 1..10 // 1到10闭区间
for (i in 1..10) // 从1到10遍历
for (i in 1 until 10) // 从1到9遍历
for (i in 10 downTo 1) // 从10到1遍历
for (i in 1 until 10 step 2) // 相当于for (int i = 1; i < 10; i += 2)

面向对象

类与对象

open class Person(val age: Int) {init {val x = ageLog.d("tag" , "init x = $x")}constructor(): this(1) {Log.d("tag", "constructor")}fun print() {Log.d("tag", "Person")}
}class Student(val id: Int, age: Int) : Person(age) {init {Log.d("tag", "init student")}
}

接口

interface Study {fun read() { // 默认实现Log.d("tag", "default read")}fun say() {Log.d("tag", "default say")}
}open class Person(val age: Int) {init {val x = ageLog.d("tag" , "init x = $x")}constructor(): this(1) {Log.d("tag", "constructor")}fun print() {Log.d("tag", "Person")}
}class Student(val id: Int, age: Int) : Person(age), Study { // 继承接口init {Log.d("tag", "init student")}override fun read() { // 重写Log.d("tag", "student read")}
}fun doStudy(study: Study) { // 调用接口函数study.read()study.say()
}// 调用方法
val student = Student(1, 2)
doStudy(student)

数据类和单例类

data class data(val a: String, val b: String) // 数据类// object单例类,实现为饿汉单例
object get {fun print() {Log.d("tag", "this is a class")}
}// 单例类使用
get.print() // 不需要创建对象// 伴生对象实现懒汉单例
// 第一种实现:顶层val + by lazy
val instance by lazy {Instance()
}class Instance {fun print() {Log.d("tag", "Instance")}
}// 第二种实现:伴生对象实现
class Test private constructor() {companion object {val instance: Test by lazy {Test()}}fun print() {Log.d("tag", "instance")}
}

List(MutableList), ArrayList, Map(MutableMap), Set(MutableSet)

List & MutableList

// 创建
val a: List<Int> = listOf(1, 2, 3) // 不加List<Int>也可以自己推断
val b: MutableList<Int> = MutableListOf(1, 2, 3) // 同上// 查询
val x = a[0] // 1
val x = a.indexOf(1) // 0
val x = a.slice(0..1) // [1, 2]// 添加
b.add(1) // 末尾加
b.add(0, 1) // 指定索引加// 删除
b.remove(2) // 按值删
b.removeAt(1) // 按索引删// 排序
val sorted = roList.sorted()              // 升序
val desc = roList.sortedDescending()
val custom = roList.sortedBy { -it }// 转换
val x: List<Int> = b.toList()// 去重
val list = listOf(1,2,2,3)
val unique = list.distinct()    // [1,2,3]
```
ArrayList(基本和数组还有List一样,为List底层)
Set & MutableSet
```kotlin
// 创建
val a: Set<Int> = setOf(1, 2, 3)
val b: MutableSet<Int> = mutableSetOf(1, 2, 3)
val c = linkedSetOf(1, 4, 2) // 有序// 操作
b.add(5)
b.remove(5)// 集合运算
val a = setOf(1,2,3)
val b = setOf(3,4,5)
val union = a union b           // [1,2,3,4,5]
val inter = a intersect b       // [3]
val diff  = a subtract b        // [1,2]
```
Map & MutableMap
```kotlin
// 创建
val roMap: Map<String, Int> = mapOf("a" to 1, "b" to 2)
val mutMap: MutableMap<String, Int> = mutableMapOf()
val linkedMap = linkedMapOf("c" to 3, "a" to 1) // 有序// 遍历
roMap.forEach { (k, v) -> println("$k=$v") }
for ((k, v) in roMap) { ... }// 转换
val swapped = roMap.map { (k, v) -> v to k }.toMap() // 值变键
```

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C#】GraphicsPath的用法

在 C# 中&#xff0c;GraphicsPath 是 GDI 提供的一个非常强大的类&#xff0c;用于创建和操作复杂图形路径。它可以用来绘制直线、曲线、多边形等形状&#xff0c;并支持判断点是否在路径内或路径的轮廓上。一、基本概念GraphicsPath 类功能&#xff1a;添加各种几何图形&…

C语言32个关键字

文章目录数据类型1、数据类型&#xff08;12个&#xff09;控制语句2、控制语句关键字&#xff08;12个&#xff09;存储类型3、存储类型关键字&#xff08;4个&#xff09;其他关键字4、其他关键字&#xff08;4个&#xff09;​一共32个关键字分为 数据类型 1、数据类型&am…

粒子滤波|粒子滤波的相关算法理论介绍

在自动控制、导航、目标跟踪等众多领域&#xff0c;系统状态估计是获取真实状态的关键环节。由于观测信号常受噪声干扰&#xff0c;滤波技术成为提取可靠信息的核心手段。本文将围绕目标跟踪技术中的滤波算法理论展开&#xff0c;重点解析粒子滤波框架的原理与应用。一、动态系…

Jenkins+Gitee+Docker容器化部署

写在前文 本文主要是通过Jenkins的maven项目版本GiteeDocker-maven插件来进行部署的&#xff0c;本文没有使用dockerfile/docker-compose。 本文默认已经安装了Docker 1、安装Jenkins Step1、创建文件夹当作映射jenkins的home文件夹 mkdir /app/jenkins Step2、赋权&#xff…

[Meetily后端框架] 多模型-Pydantic AI 代理-统一抽象 | SQLite管理

第5章&#xff1a;人工智能模型交互&#xff08;Pydantic-AI 代理&#xff09; 欢迎回来&#xff01; 在上一章第四章&#xff1a;文字记录处理逻辑中&#xff0c;我们学习了TranscriptProcessor如何将冗长的会议记录分解为称为"块"的较小片段&#xff0c;因为人工…

利用DeepSeek实现rust调用duckdb动态链接库的duckdb CLI

提示词&#xff1a;请用rust调用duckdb-rs实现一个duckdb CLI,支持语法突出显示和计时&#xff0c;还支持命令行管道输入输出 Cargo.toml [package] name "duckdb-cli" version "0.1.0" edition "2024"[dependencies] duckdb "1.3.1&qu…

C++,从汇编角度看《虚拟继承的邪恶》

刷到一篇文章&#xff1a; 作者&#xff1a; 原文&#xff1a;虛擬繼承的邪惡 讨论到这样的一个程序&#xff0c;最终输出什么&#xff1f;&#xff1f;&#xff1f; 代码有简化命名 using namespace std;class A { public:A(int a 0) : v(a) {};int v; };template <type…

多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解

我们来详细讲解如何在合作捕食者-猎物游戏中结合 PPO (Proximal Policy Optimization) 算法。我们将聚焦于 CTDE&#xff08;Centralized Training, Decentralized Execution&#xff0c;集中训练、分散执行&#xff09; 模式&#xff0c;因为这是处理合作多 Agent 任务的常用且…

Web应用文件上传安全设计指南

引言 在当今的Web应用中&#xff0c;文件上传功能已成为基础且必要的服务能力&#xff0c;但不当的设计可能带来目录遍历、代码注入、服务端资源耗尽等安全风险。本文从威胁模型、安全设计原则、技术实现三个维度&#xff0c;系统阐述安全文件上传架构的设计要点。 一、威胁模型…

用 React Three Fiber 实现 3D 城市模型的扩散光圈特效

本文介绍了如何使用 React Three Fiber&#xff08;R3F&#xff09;和 Three.js 实现一个从中心向外扩散的光圈特效&#xff08;DiffuseAperture 组件&#xff09;&#xff0c;并将其集成到城市 3D 模型&#xff08;CityModel 组件&#xff09;中。该特效通过动态调整圆柱几何体…

【牛客刷题】COUNT数字计数

文章目录 一、题目介绍二、题解思路三、算法实现四、复杂度分析五 、关键步骤解析5.1 数字分解5.2 三种情况处理5.2.1 情况1: d < c u r d < cur d<cur(完整周期)5.2.2 情况2: d = c u r d = cur d=cur(混合周期)5.2.3 情况3: d > c u r d > cur d>cu…

AGV穿梭不“迷路”CCLinkIE转Modbus TCP的衔接技巧

在AGV控制系统集成中&#xff0c;工程师常面临一个现实难题&#xff1a;如何让CCLinkIE总线与Modbus TCP设备实现高效通信&#xff1f;这种跨协议的连接需求&#xff0c;往往需要耗费大量时间调试。本文将通过实际案例解析&#xff0c;为制造行业工程师提供可复用的解决方案。【…

【代码随想录】刷题笔记——哈希表篇

目录 242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 454. 四数相加 II 383. 赎金信 15. 三数之和 18. 四数之和 242. 有效的字母异位词 思路 代码 class Solution {public boolean isAnagram(String s, String t) {if (s.length() ! t.length()…

Python爬虫实战:研究messytables库相关技术

1. 引言 在当今数字化时代,互联网上存在着大量有价值的数据。然而,这些数据通常以不规则的格式存在,尤其是表格数据,可能包含复杂的表头、合并单元格、不规则布局等问题。传统的数据处理工具往往难以应对这些挑战。 网络爬虫技术可以帮助我们从网页上自动提取数据,而 mes…

Vue3的组件通信方式

通信方式适用层级数据流向复杂度Props/Emits父子组件单向/双向★☆☆v-model父子组件双向★☆☆Provide/Inject跨层级组件自上而下★★☆事件总线任意组件任意方向★★★Pinia/Vuex全局状态任意方向★★☆Refs模板引用父子组件父→子★☆☆作用域插槽父子组件子→父★★☆Web W…

创客匠人:大健康创始人IP如何用“社会责任”构建品牌护城河

一、商业与责任的失衡困局部分大健康IP将利润置于首位&#xff0c;甚至牺牲用户利益&#xff0c;导致品牌形象脆弱。某保健品公司因夸大宣传被曝光后&#xff0c;尽管销量曾达千万&#xff0c;却因缺乏社会认同&#xff0c;一夜之间崩塌&#xff0c;证明没有社会责任支撑的商业…

AI:机器人未来的形态是什么?

机器人未来的形态将受到技术进步、应用场景需求和社会接受度的综合影响&#xff0c;以下是对未来机器人形态的预测&#xff0c;涵盖技术趋势、设计方向和应用场景&#xff1a; 1. 形态多样化与通用化 人形机器人&#xff08;Humanoid Robots&#xff09;&#xff1a; 趋势&…

创建 UIKit 项目教程

一、打开 XCode&#xff0c;选择 iOS 下的 App&#xff0c;然后点 Next二、Interface 选择 Storyboard&#xff0c;然后点 Next三、删掉 Main.storyboard四、删掉 SceneDelegate.swift五、AppDelegate.swift 只保留第一个函数六、在 AppDelegate.swift 文件里的 application 函…

防爬虫君子协定 Robots.txt 文件

1.什么是robots.txt ? robots.txt是一个位于网站根目录的文本文件,用于指导搜索引擎爬虫如何访问和抓取网站内容。它遵循特定的语法规则,是网站与爬虫通信的重要工具。当搜索引擎访问一个网站时,它首先会检查该网站的根域下是否有一个叫做robots.txt的纯文本文件。Robots.…

浅谈 Python 中的 yield——生成器对象与函数调用的区别

我们来看这么一个例子&#xff1a; def greeter():name yield "你是谁&#xff1f;"yield f"你好&#xff0c;{name}"g greeter() print(next(g)) # → "你是谁&#xff1f;" print(g.send("张三")) # → "你好&#xf…