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函数将它左边和右边的值转换成一个对


KotlinBeginner
http://example.com/2023/11/22/KotlinBeginner/
Author
John Zhang
Posted on
November 22, 2023
Licensed under