问题背景
我们在安卓开发日常开发和学习过程中,或多或少项目中都会使用kotlin了,现对kotlin的一些基础语法进行总结,持续更新。
问题分析
1、函数定义
kotlin中函数定义使用关键字 fun,参数格式为:参数 : 类型,代码如下:
/**
* 求和函数,传入int a, int b
* 返回int类型
*/
fun sum(a: Int, b: Int): Int {
// Int 参数,返回值 Int
return a + b
}
无返回值的函数(类似Java中的void),代码如下:
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
/**
* 如果是返回 Unit类型,则可以省略(对于public方法也是这样):
*/
public fun printSum(a: Int, b: Int) {
print(a + b)
}
2、可变长参数函数
kotlin中函数的变长参数可以用 vararg 关键字进行标识,代码如下:
/**
* 传入可变长参数
*/
fun vars(vararg v:Int){
for(vt in v){
print(vt)
}
}
fun main(args: Array<String>) {
vars(1,2,3,4,5) // 运行结果:输出12345
}
3、lambda(匿名函数)
kotlin中lambda表达式使用实例,代码如下:
fun main(args: Array<String>) {
val sumLambda: (Int, Int) -> Int = {x,y -> x*y}
println(sumLambda(1, 2)) // 运行结果:输出 2
}
4、定义常量与变量
kotlin中,可变变量定义:var 关键字,不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量),代码如下:
fun main(args: Array<String>) {
val a: Int = 1
val b = 1 // 系统自动推断变量类型为Int
val c: Int // 如果不在声明时初始化则必须提供变量类型
c = 1 // 明确赋值
var x = 5 // 系统自动推断变量类型为Int
x += 1 // 变量可修改
}
5、字符串模板
kotlin中,$ 表示一个变量名或者变量值,$varName 表示变量值,${varName.fun()} 表示变量的方法返回值,代码如下:
fun main(args: Array<String>) {
var a = 1
// 模板中的简单名称
val s1 = "a is $a"
a = 2
// 模板中使用表达式
val s2 = "${s1.replace("is", "was")}, but now is $a"
}
6、NULL检查机制
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式:(1)字段后加!!像Java一样抛出空异常(2)字段后加?可不做处理返回值为 null 或配合 ?: 做空判断处理,代码如下:
fun main(args: Array<String>) {
// 类型后面加?表示可为空
val age: String? = "23"
// 抛出空指针异常
val ages = age!!.toInt()
// 不做处理返回 null
val ages1 = age?.toInt()
// age为空返回-1
val ages2 = age?.toInt() ?: -1
}
7、类型检测及自动类型转换
kotlin中可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。代码如下:
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 做过类型判断以后,obj会被系统自动转换为String类型
return obj.length
}
//在这里还有一种方法,与Java中instanceof不同,使用!is
// if (obj !is String){
// // XXX
// }
// 这里的obj仍然是Any类型的引用
return null
}
8、区间
kotlin中区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。代码如下:
fun main(args: Array<String>) {
for (i in 1..4) print(i) // 输出“1234”
for (i in 4..1) print(i) // 什么都不输出
if (i in 1..10) { // 等同于 1 <= i && i <= 10
println(i)
}
// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出“13”
for (i in 4 downTo 1 step 2) print(i) // 输出“42”
// 使用 until 函数排除结束元素
for (i in 1 until 10) {
// i in [1, 10) 排除了 10
println(i)
}
}
问题总结
本文主要对kotlin中常用的部分基础语法进行了介绍,持续更新,有兴趣的同学可以进一步深入研究。