当前位置: 首页 > news >正文

Kotlin小节

1、Kotlin只提供引用类型这一种数据类型。

2、===和!==的含义

=== 计算两个实例是否指向同一引用
!== 计算两个实例是否不指向同一引用

3、条件表达式给变量赋值

var healthstr = if(health == 100)"It is excellent" else "It is awful"

4、when表达式

是Kotlin的另一个控制流工具。类似于if/else语句,
when表达式允许你编写条件式,非常适合有三到四个分支的情况。

相比以前的if/else语句,when表达式能让代码更简洁易读。实践经验表明,只要代码包含else if分支,都建议改用when表达式。

5、asList()和toList()的区别

asList():仍然保持对原始Array的引用。 这意味着该列表的突变也会改变基础Array 。

toList():只是将Array的值复制到一个新的List ,但是之后没有任何延续的链接。

6、const变量

不在函数或类内,它是文件级变量。

const val NUMBER_VALUE = 10;//定义const变量

在项目范围内,你都能看到或使用这个文件级变量(当然,有需要的
话,可以添加可见性修饰符,修改其可见性)。文件级变量保持着初
始化状态,一直到应用程序执行结束。

文件级变量在定义时就必须赋值,否则代码就无法编译(在第15章,
你会看到这方面的代码异常)。这种强制要求可避免代码异常,例
如,你正要使用某个变量,而它却没有值。

7、单表达式函数语法

只需要使用赋值运算符=后跟表达式就可以了。

8、Unit函数

如函数无返回值时,返回类型为Unit类型。

通过使用Unit作为返回类型,Kotlin解决了这一难题。Unit表示一
个函数不返回任何东西,同时,也能兼容需要和一些类型打交道的泛
型函数。无论有无类型,都不是问题,这正是Kotlin使用Unit的原
因。

9、具名函数参数

如果不用具名函数值参,就必须按函数头的定义,严格按顺序
传入值参。而有了具名函数值参,传入值参时就可以不管函数头的参
数顺序了。

private fun formlate(str: String = "abc"): String {//设置形参默认值为abcvar healthstr1 = "healthstr"health = 56;healthstr1 = when (health) {100 -> "A"90 -> "B"80 -> "C"60 -> "D"else -> { formlate1(number = 90, str = "www")//具名函数参数}}println("healthWhen:$healthstr1, str:$str")return healthstr1
}
private fun formlate1(str: String = "abc", number: Int) = when (health) {100 -> "A"90 -> "B"80 -> "C"60 -> "D"else -> {"str:$str, number:$number"}

10、TODO函数返回值类型为Nothing类型

TODO()函数调用后的语句不执行。

fun main(arrays: Array<String>) {   
tesetTODU()
}
fun tesetTODU(){println("Test will be processed")
    TODO()println("Test is processed")
}

10、java文件引用kt文件方法和变量

java文件里应用kt文件中文件级别方法或者变量,需要使用”类名+kt“ 去调用

public class RunMain {public static void main(String[] args) {System.out.println("hello world!"+TestDemoKt.formlate("DEF"));}
}
 fun formlate(str: String = "abc"): String {//设置形参默认值为abcvar healthstr1 = "healthstr"health = 56;healthstr1 = when (health) {100 -> "A"90 -> "B"80 -> "C"60 -> "D"else -> {formlate1(number = 90, str = "www")//具名函数参数}}println("healthWhen:$healthstr1, str:$str")return healthstr1
}

11、匿名函数,又叫做lamada表达式

在一对花括号里定义匿名函数。

var customFunction2:(String)->String = {var num = 10"num:$num it:$it"
}

在花括号的后面跟上一对空的圆括号,表示调用匿名函数。圆括号不能省。

println(customFunction2("elena"))

返回值:没有return关键字,为了返回数据,匿名函数会隐式或自动返回函数体最后一行语句的结果。

参数:参数的类型放在匿名函数的类型定义中,参数名则放在函数定义中。

it关键字语法只适用于一个参数的情况。匿名函数支持多个参数。如
果有多个参数,需要使用命名参数。

如果一个函数的lambda参数排在最后,或者是唯一的参数,那么括住
lambda值参的一对圆括号就可以省略。所以之前的代码:

一个参数的情况:

fun  functionAsParamTest2(customFunction6 :(String , Int) -> String ){println("customFunction6:"+customFunction6("nnn",999))
}
functionAsParamTest2({name:String, age:Int ->var num = 99"num:$num name:$name age:$age"
})
就可以简写成这样:
functionAsParamTest2{name:String, age:Int ->var num = 99"num:$num name:$name age:$age"
}

两个参数的情况:

functionAsParamTest3(888,{name:String, age:Int ->var num = 99"num:$num name:$name age:$age"
})

可以简写成这样:

functionAsParamTest3(888){name:String, age:Int ->//匿名函数作为参数,最好写在最后var num = 99"num:$num name:$name age:$age"
}

三个参数的情况:

functionAsParamTest4(888,"teacher",{name:String, age:Int ->//三个参数的情况,匿名函数排在参数列表最后,可以省区圆括号var num = 99"num:$num name:$name age:$age"
})

可以简写成这样:

functionAsParamTest4(888,"teacher"){name:String, age:Int ->//三个参数的情况,匿名函数排在参数列表最后,可以省区圆括号var num = 99"num:$num name:$name age:$age"
}

使用这种简略语法后,代码更简洁易读,能够让人快速抓住重点。这种简略写法只支持lambda参数排在最后的情况,所以,定义函数时,建议把函数类型的参数放在最后,以方便调用者使用。

12、函数引用(形参类型是函数类型)

函数形参类型是函数类型,函数引用作为值参。使用时需要::加上函数名即可。

形参函数的返回值需要是Unit类型。

functionReference("student", ::getPersonInfo)
//函数引用
fun functionReference(career:String ,getInfo:(String, Int)->Unit){println("career:$career,"+getInfo)
}
fun getPersonInfo(name:String, age:Int){"name:$name,age:$age"
}

13、返回类型是函数类型

var function = functionReturnFunction()

println(function("egg", 100))

fun functionReturnFunction(): ((String, Int) -> String) { //返回类型是函数类型return { name: String, age: Int ->println("返回值为函数")//只返回函数本身,不执行函数体"name:$name ,age:$age"}
}

14、安全调用操作符(?.)

var str : String? = null;
str = "yyy"
var len = str?.length
println(str)

15、let安全调用函数

任何类型的数据都可以调用let函数。

it是非空的,即,调用let函数的变量不为null时,执行let函数内部的语句。

let函数作用:1、创建新值2、调用其他函数

16、!!.非空断言操作符

字符串为空时,抛出空指针异常。

var str : String? = null;

str = "yyy"

//!!.非空断言操作符,
var newStr = str!!.capitalize()
println(newStr)

17、?:空合并操作符

如果左边的求值结果是null,就使用右边的结果值。可以避免null值得出现。

var str : String? = null;
//str = "yyy"
var newstr = str?:"xxx"
println(newstr)

18、解构

List集合支持在解构语法。只要是集合结果都可以用解构赋值。

解构语法:list集合可以同时给多个变量赋值。例如:

var str = "bu,gou,yan,xiao"
val (str1,str2,str3,str4) = str.split(',')
println("str1:$str1,str2:$str2,str3:$str3,str4:$str4")

相关文章:

Kotlin小节

1、Kotlin只提供引用类型这一种数据类型。 2、和!的含义 计算两个实例是否指向同一引用 ! 计算两个实例是否不指向同一引用 3、条件表达式给变量赋值 var healthstr if(health 100)"It is excellent" else "It is awful" 4、when表达式 是Kotlin的另…...

西安电子科技大学

前言 本篇文章投稿与以下活动 【西安城市开发者社区】探索西安高校&#xff1a;展现历史与创新的魅力 资料参考与百度百科 学校简介 西安电子科技大学&#xff08;Xidian University&#xff09;&#xff0c;简称“西电”&#xff0c;位于陕西省西安市&#xff0c;是中央部…...

【数据挖掘】PCA/LDA/ICA:A成分分析算法比较

一、说明 在深入研究和比较算法之前&#xff0c;让我们独立回顾一下它们。请注意&#xff0c;本文的目的不是深入解释每种算法&#xff0c;而是比较它们的目标和结果。 如果您想了解更多关于PCA和ZCA之间的区别&#xff0c;请查看我之前基于numpy的帖子&#xff1a; PCA 美白与…...

微服务模式:业务服务模式

无论是单体应用还是微服务&#xff0c;构建企业应用的业务逻辑/服务在更多方面上都有相似之处而不是差异。在两种方法中&#xff0c;都包含服务、实体、仓库等类。然而&#xff0c;也会发现一些明显的区别。在本文中&#xff0c;我将试图以概念性的方式强调这些区别&#xff0c…...

idea中创建请求基本操作

文章目录 说明效果创建GET请求没有参数带有参数带有环境变量带有动态参数 说明 首先通过###三个井号键来分开每个请求体&#xff0c;然后请求url和header参数是紧紧挨着的&#xff0c;请求参数不管是POST的body传参还是GET的parameter传参&#xff0c;都是要换行的&#xff0c;…...

springboot整合log4j2

1.排除springboot本身日志 2.添加log4j2 maven没有父项目 就必须指定version!! 3.配置application.yml文件 打印sql级别为debug 4.配置log4j2.xmllogging.configclasspath:log4j2.xml logging.level.com.zhkj.shoppingdebug #mybatis-plus.mapper-locations classpath*:/mapp…...

Linux输出内容到指定文件

1. 记录终端输出至文本文件 1.1 解决方案1&#xff1a;利用>和>>命令 区别&#xff1a; > 是把输出转向到指定的文件。注意&#xff1a;如文件已存在的话会重新写入&#xff0c;文件原内容不会保留。 >> 是把输出附加到文件的后面&#xff0c;文件原内容会…...

mysql主从同步怎么跳过错误

今天介绍两种mysql主从同步跳过错误的方法&#xff1a; 一、两种方法介绍 1、跳过指定数量的事务&#xff1a; mysql>slave stop; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1 #跳过一个事务 mysql>slave start2、修改mysql的配置文件&#xff0c;通过slav…...

【论文阅读】DEPIMPACT:反向传播系统依赖对攻击调查的影响(USENIX-2022)

Fang P, Gao P, Liu C, et al. Back-Propagating System Dependency Impact for Attack Investigation[C]//31st USENIX Security Symposium (USENIX Security 22). 2022: 2461-2478. 攻击调查、关键边、入口点 开源&#xff1a;GitHub - usenixsub/DepImpact 目录 1. 摘要2. 引…...

Nginx 功能及配置详解

一、Nginx概述 Nginx是一款高性能的HTTP和反向代理服务器&#xff0c;也是一款IMAP/POP3/SMTP代理服务器。Nginx被广泛应用于服务端的Web开发&#xff0c;主要用于提供高效、稳定的网页访问服务。Nginx的主要特点包括&#xff1a;高并发连接处理能力、稳定性高、配置灵活和功能…...

CSS 瀑布流效果效果

示例 <!DOCTYPE html> <html lang="cn"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>瀑布流效果</title><style>…...

Python 进阶(一):PyCharm 下载、安装和使用

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、下载 PyCharm二、安装 PyCharm三、创建项目四、界面汉化五、实用技巧5.1、使用快捷…...

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目&#xff0c;提供了一个微信小程序组件&#xff08;Component&#xff09;&#xff0c;我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…...

微信小程序生成二维码(weapp-qrcode)可添加logo

插件 npm 地址&#xff1a;https://www.npmjs.com/package/weapp-qrcode 插件 GitHub 地址&#xff1a;https://github.com/yingye/weapp-qrcode/tree/master 一、引入 1、根据 GitHub 指引将 weapp-qrcode 放到本地 uitl 文件夹下&#xff1b; 2、创建 canvas <canvas c…...

【云原生】Docker容器资源限制(CPU/内存/磁盘)

目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容…...

内核链表在用户程序中的移植和使用

基础知识 struct list_head {struct list_head *next, *prev; }; 初始化&#xff1a; #define LIST_HEAD_INIT(name) { (name)->next (name); (name)->prev (name);} 相比于下面这样初始化&#xff0c;前面初始化的好处是&#xff0c;处理链表的时候&#xff0c;不…...

使用C#基于ComPDFKit SDK快速构建PDF阅读器

在当今世界&#xff0c;Windows 应用程序对我们的工作至关重要。随着处理 PDF 文档的需求不断增加&#xff0c;将 ComPDFKit PDF 查看和编辑功能集成到您的 Windows 应用程序或系统中&#xff0c;可以极大地为您的用户带来美妙的体验。 在本博客中&#xff0c;我们将首先探索集…...

el-tabel导出excel表格

1、安装插件 npm install file-saver --save npm install xlsx --save 2、引入插件 import FileSaver from "file-saver"; import * as XLSX from xlsx; 3、在tabel中添加ref属性和导出方法 4、添加方法 exportExcel (excelName) {try {const $e this.$refs[repo…...

双击start.bat文件闪退,运行报错“unable to access jarfile”

问题&#xff1a;电脑运行“start.bat”文件&#xff0c;无反应&#xff0c;闪退&#xff0c;管理员身份运行报错“unable to access jarfile” 解决思路&#xff1a; 1、由于该项目运行需要jdk环境&#xff0c;检查jdk版本需要是1.8.0_251版本 通过在 cmd 命令行输入java -v…...

大数据Flink(五十一):Flink的引入和Flink的简介

文章目录 Flink的引入和Flink的简介 一、Flink的引入 1、第1代——Hadoop MapReduce...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...