Kotlin

------《Kotlin系列之?、?:、!!、:: 特殊符号》
符号一:?
符号二:?.
符号三:!!
符号四:?:
符号五:::
符号六:===
符号七:..
符号八:``
符号九:$
符号十:@
符号一:?
声明一个变量可为空。

var userData : UserData? = null
1
符号二:?.
表示这个变量可以为null。该变量如果为null时,不会执行该变量后面的逻辑,也不会抛出空指针异常,俗称空安全。如果不为null,会正常执行该变量后面的内容。

UserData?.name
1
符号三:!!
非空断言运算符
加在变量后面,表示该变量如果为null时,会抛出空指针异常,像java语法一样空指针不安全;如果不为null,才会正常执行该变量后面的内容。

UserData!!.name
1
符号四:?:
Elvis操作符:
A ?: B 如果A 的值为空,则会返回B。一般不推荐用!!,建议使用?:来规避崩溃、报错的发生

println(UserData ?: "当UserData为空时执行")
1
符号五:::
Kotlin 中 双冒号操作符
表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。

class ColonMagic {

fun main(msg: Array<String>) {
//调用peopleDo方法,并传入参数 “I say !” 和 say方法体
//此处 ::say 是将say方法作为参数传入peopleDo方法
//此处只是将say作为参数,而不会调用say方法,也就不会println(message),不会输出日志
peopleDo("I say !", ::say)
}

/**
* 一个参数
* message:String类型
*/
private fun say(message: String) {
println(message)
}

/**
* 两个参数
* msg: String类型
* dosay: (String) -> Unit 一个参数为String不需要返回值的方法体
*/
private fun peopleDo(msg: String, doSay: (String) -> Unit) {
//doSay(msg)调用的就是传入的say方法,即say(msg),只不过参数名是doSay本质是say方法
//此处打印出来 I say ! 日志
doSay(msg)
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
符号六:===
=就是赋值,
== 相当于Java中的equls()用于比较对象的结构(内容)是否相等(对象的结构就是属性和方法),
=== 用于比较对象的引用是否指向同一个对象,运行时如果是基本数据类型===等价于==

符号七:…
range表达式 表示多少到多少之间

if(num in 10..100)//表示10..100 表示 10到100
1
符号八:``
反引号
1、Kotlin中可以用反引号解决关键字冲突问题
2、将一个不合法的字符变为合法字符,这种情况一般可以用在一个Kotlin方法不希望被Java调用时使用,因为Java语言层面上不支持反引号这种语法。

fun `is`(){
//用is这种关键字去命名函数
}

fun `哈哈哈哈`(){
//用中文这种不合法字符去命名函数
}
1
2
3
4
5
6
7
符号九:$
拼接符号

"货号 ${data.code}" //将data.code值拼接到货号后
//相当于java中
"货号" + data.code
1
2
3
符号十:@
1、限定this的类型

class User {
inner class State{
fun getUser(): User{
//返回User
return this@User
}
fun getState(): State{
//返回State
return this@State
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2、跳转到指定标签处,可以直接跳出多层循环。像汇编语言中的Loop

loop@ for (itemA in arraysA) { //直接跳出双循环
var i : Int = 0
for (itemB in arraysB) {
i++
if (itemB > 2) {
break@loop
}
println("itemB:$itemB")
}
}```

————————————————
版权声明:本文为CSDN博主「小孟来码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45112340/article/details/126856001

posted @   嘉合  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示