记录一些速查的kotlin高频函数和API,省的太久不写忘了
定义约定
常量
1
| val Name : Type = initVal
|
变量
var Name : Type = initVal
函数
1 2 3
| (override... 修饰符) fun Name (para:paraType = deafultVal) : return Type{ }
|
可为null
1 2 3 4 5 6 7 8 9
| val Name : Type? = initVal/null
Name!!.member
val Name : Type = null?:deafultVal
|
类
1 2 3 4 5 6 7 8 9 10 11
|
(open) class Name(val member:Type,...) : FatherClassConstructor(para),interface{ val member = initVal get() set() constructor(para):this(para) }
|
修饰符
1 2 3 4 5 6
| class ClassName(){ public val member1 private val member2 protected val member3 internal val member4 }
|
定义委托
1 2 3
| var Name by delegateObject
|
储存函数
1 2 3 4 5 6 7
| fun myFunc(){ ... }
fun main(){ val FunctionVal = ::myFunc }
|
lambda
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| val Name:(paraType) -> returnType = { para -> body
myFunc(1,2){ x,y -> x+y }
}
val
|
函数数据类型约定
1
| (paraType1,ParaType2...) -> returnType
|
泛型(模板类)约定
1 2 3 4 5
| class tempClass<T>(val para:Type,val tempPara:T){
} val Name = tempClass<Int>(para1,2)
|
枚举类约定
1 2 3 4 5 6 7
| enum class Name{ enumName1,enumName2 }
val enumNum:Name = Name.enumName1
|
数据类约定
1 2 3 4
| data class Name(val value1:Type,val value2:Type...){ }
|
单例对象约定
1 2 3
| object Name{ } 和类相同,但是全局只存在一个实例,且无须自己创建,必须在定义时就初始化
|
定义拓展属性
1 2 3 4 5 6 7 8
| val typeName.extendPropertyName : dataType get()
fun typeName.extendFunctionName(para...) : returnType{
}
|
接口
1 2 3 4 5
| interface InterfaceName{ val member:Type fun function(para):return Type }
|
分支约定
if-else
1 2 3 4 5 6
| if(condition){
} else{
}
|
when
1 2 3 4 5 6
| when(para){ condition1 -> {body1} condition2 -> {body2} .....
}
|
特殊约定
分支,lambda返回值
分支,lambda的最后一个表达式的值会作为整个结构的返回值
1 2 3 4 5 6 7 8 9
| x= if(true){ "1" } else{ "0" }
x={2}
|
字符串中嵌入表达式
使用${}向字符串嵌入表达式
帮手函数
repeat(times: Int, action: (Int) -> Unit)
重复执行某一操作,传入一个lambda,有一个从0开始的迭代器参数
1 2 3 4 5 6 7 8
| repeat(5){ it -> println(it) }
|
let()
1 2 3 4 5 6 7 8 9 10 11
| println(Obj.member1) println(Obj.member2) println(Obj.member3)
Obj.let{ println(it.member1) println(it.member2) println(it.member3) }
|
let后接一个lambda函数,可以把let前的对象用it关键字简写
lambda 最后一条语句的返回值会被作为let的返回值
apply()
1 2 3 4 5 6 7 8 9 10 11
| Obj.apply{ this.member= .... this.initFunc() }
Obj.apply{ member1 = ... }.apply{ member2 = ... }.....
|
对目标对象做一系列操作,通过this访问目标对象,返回操作完的目标对象
forEach(action: (T) -> Unit)
forEach传入一个lambda,对目标集(List,set…)中的每一个元素执行该lambda
1 2 3 4 5
| val test1=setOf(1,2,3,4,5) test1.forEach{ println(it) }
|
数据管理
数组 array
1 2 3
| val array = arrayOf<Type>(elem1,elem2,....) println(array[0]) val arrry12 = array1+array2
|
列表(可变长数组) list
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| val aList=listOf(1,2,true,"123") println(aList.size) println(aList[0]) println(aList.indexOf("123)) // 3 ,若未找到返回-1 for (elem in aList) { // 使用 for 遍历 } anotherList=mutableListOf(1,2,true,"123") // 可修改的列表 anotherList.add("4") // [1,2,true,"123","4"] //向末尾添加元素 anotherList.add(2,"4") // [1,2,"4",true,"123","4"] // 向中间插入 anotherList.removeAt(0) // [2,"4",true,"123","4"] // 按下标删除 anotherList.remove("123") // [2,"4",true,"4"] // 按值删除 anotherList.contains(2) //查询是否存在 2 in anotherList // 前者的另一写法
|
集合 set
Set / mutableSet 同样 不可修/可修
1 2 3
| val aSet=mutableSetOf("123",true,32)
|
映射 map
Map / mutableMap 同样 不可修/可修
1 2 3 4 5 6 7
| val aMap=mutableMapOf( "cake" to 10, "cookie" to 5, true to 22 ) println(aMap["cake"])
|
Reference
https://developer.android.com/courses/android-basics-compose/course