当前位置: 首页 > 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")

http://www.lryc.cn/news/98443.html

相关文章:

  • 西安电子科技大学
  • 【数据挖掘】PCA/LDA/ICA:A成分分析算法比较
  • 微服务模式:业务服务模式
  • idea中创建请求基本操作
  • springboot整合log4j2
  • Linux输出内容到指定文件
  • mysql主从同步怎么跳过错误
  • 【论文阅读】DEPIMPACT:反向传播系统依赖对攻击调查的影响(USENIX-2022)
  • Nginx 功能及配置详解
  • CSS 瀑布流效果效果
  • Python 进阶(一):PyCharm 下载、安装和使用
  • 微信小程序使用ECharts的示例详解
  • 微信小程序生成二维码(weapp-qrcode)可添加logo
  • 【云原生】Docker容器资源限制(CPU/内存/磁盘)
  • 内核链表在用户程序中的移植和使用
  • 使用C#基于ComPDFKit SDK快速构建PDF阅读器
  • el-tabel导出excel表格
  • 双击start.bat文件闪退,运行报错“unable to access jarfile”
  • 大数据Flink(五十一):Flink的引入和Flink的简介
  • c语言的数据类型 -- 与GPT对话
  • Truffle 进行智能合约测试
  • vb+access库存管理系统设计与实现
  • 机器学习03-数据理解(小白快速理解分析Pima Indians数据集)
  • Hadoop生态体系-HDFS
  • 《实战AI模型》——赶上GPT3.5的大模型LLaMA 2可免费商用,内含中文模型推理和微调解决方案
  • 工程安全监测无线振弦采集仪在建筑物的应用分析
  • OpenCV实现照片换底色处理
  • 安科瑞智能型BA系列电流传感器
  • Windows SMB 共享文件夹 排错指南
  • nestjs+typeorm+mysql基本使用学习