KotlinBeginner
变量、常量和类型
变量声明规则:
var experiencePoint: Int = 5
println(experiencePoint)

var为可修改变量,val为不可修改变量,在声明时必须赋值,否则报错。
类型推断
Kotlin有个语言特性叫类型推断,即对于已声明并赋值的变量,它允许你省略类型定义,编译器可以推断出变量的类型,不需要显式声明。
编译时常量
const val MAX_MEMBERS = 10000
Kotlin只提供引用类型着一种数据类型
条件语句
编译器计算if/else条件表达式的顺序时自上而下,且一旦得到true值时就停止。如果所有条件不满足,则执行else部分。
逻辑运算符
优先级(从高到低)
- !(逻辑非)
- <(小于)、<=(小于等于)、>(大于)、>=(大于等于)
- ==(等于)、!=(不等于)
- &&(逻辑与)
- ||(逻辑或)
若想清晰表达复杂逻辑,比起嵌套if/else,还是要用逻辑运算符更好。
‘’’
if (isBlessed && healthPoints > 50 || isImmortal) {
println(“GREEN”)
} else {
println(“NONE”)
}
‘’’
Ctrl + Alt + L 规范化代码
Ctrl + Alt + M 封装函数
range: 可用in a..b 来表示 a <= x <= b的范围
when: 在作用域(scope)方面,when的值参能自动去和左边各条件分支匹配,即能作用到所有左边的条件分支。
函数
函数构成
函数头
private fun 函数名(参数名: 参数类型, 参数名: 参数类型): 返回值类型
private fun sum(a: Int, b: Int): Int
函数参数总是只读的,即无法在函数体内再给他们进行赋值
反引号:kotlin里,可以使用反引号给函数命名,反引号内可以包含任意字符,包括空格。
匿名函数
例:
val numLetters = “Mississippi”.count({ letter ->
letter == ‘s’
})
又如:
val greetingFunction: () -> String = {
val currentYear = 2023
“Welcome to Kotlin $currentYear!”
}
定义变量时,是在变量名后面跟上冒号和类型,对编译器来说,:Int 表示变量存储的是数据,:() -> String 表示变量存储的是那种类型的函数。
匿名函数:即lambda表达式,返回结果称为lambda结果
{参数名: 参数类型 -> 函数体}
匿名函数不需要return关键字来返回数据。
函数内联
使用内联可以解决由lambda引起的内存开销问题。有了内联,JVM就不需要使用lambda对象实例了,因而避免了变量内存分配。
函数引用
::为引用符号,后接引用函数名
函数引用即将一个函数(的值)作为参数传递给另一个函数。
null安全与异常
安全调用操作符
安全调用操作符(?.)
let安全调用函数
% 1: 取模运算符, %1表示拿掉整数部分
getOrElse: 安全索引取值函数
Set
Set与List区别主要有两点:
- Set集合里所有元素都具有唯一性
- Set集合不支持基于索引的存取值函数
可以联合使用toList()和toSet()函数,将list转为不含重复元素的list。如:
val patrons = listOf(“Eli Baggins”, “Eli Baggins”, “Eli Ironfoot”).toSet().toList()
由于.toSet().toList()很常见,孤儿Kotlin封装了这个,成为.distinct()
val patrons = listOf(“Eli Baggins”, “Eli Baggins”, “Eli Ironfoot”).distinct()
map
map里,键必须是同一类型,值也必须是同一类型。但键和值可以是不同类型
to是一个省略了点号和圆括号的特殊函数,to函数将它左边和右边的值转换成一个对