上一篇介绍了 Android Studio安装Kotlin插件和使用,本篇介绍Kotlin基本语法。
一 变量(var)和常量(val)
Kotlin 语言声明一个变量使用关键字var,声明一个常量使用val,声明时如果没有指定类型可以自动推测出字段类型。
1 常量 (val)
val a: Int = 1 // 定义常量时进行赋值
val b = 2 // 自动推测常量类型为 Int
val c: Int // 不提供初始化时需要定义常量类型
c = 3 // 定义常量后再赋值
注意 :只能被赋值一次
val 常量 赋值多次会报错编译通不过,如下图所示。
2 变量 (var)
可以对变量进行多次赋值。
val a: Int = 1 // 定义变量时进行赋值
var x = 5 // 推断变量类型为 Int
x += 1
注意事项
- 常量与变量都可以没有初始化值,但是在引用前必须初始化。
- 编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。
二 字符串模板
字符串模板,可以包含一些小段代码,会把求值结果合并到字符串中。模板表达式以美元符($)开头:
- $ 表示一个变量名或者变量值。
- $varName 表示变量值。
- ${varName.fun()} 表示变量的方法返回值。
看个例子
fun mouldTest(){
var a = 1
// 模板中的变量
val s1 = "a is $a"
println(s1)
a = 2
// 模板中的表达式
val s2 = "${s1.replace("is","was")} ,but now is $a"
println(s2)
}
输出结果如下:
a is 1
a was 1 ,but now is 2
三 NULL检查机制
Kotlin 是空指针安全的,Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式
- 字段后加!!像Java一样抛出空异常。
- 另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理。
看个例子
//类型后面加?表示可为空
var age: String? = "27"
//抛出空指针异常
val age1 = age!!.toInt()
//不做处理返回 null
val age2 = age?.toInt()
//age为空返回-1
val age3 = age?.toInt() ?: -1
//只会在files不为空时执行。
println(files?.size)
//当data不为空的时候,执行语句块
data?.let{
//...
}
//相反的,以下代码当data为空时才会执行
data?:let{
//...
}
当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null。
当 str 中的字符串内容不是一个整数时, 返回 null:
fun parseInt(str: String): Int? {
// ...
}
四 方法(函数)
4.1 函数声明
函数定义使用关键字 fun,参数格式为:参数 : 类型
// 2个 Int 类型 参数,返回值 为Int类型
fun sum(a: Int, b: Int): Int {
return a + b
}
4.2 表达式作为函数体,返回类型自动推断:
fun sum(a: Int, b: Int) = a + b
public fun sum(a: Int, b: Int): Int = a + b // public 方法则必须明确写出返回类型
4.3 无返回值的函数(类似Java中的void)
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
// 如果是返回 Unit类型,则可以省略(对于public方法也是这样):
public fun printSum(a: Int, b: Int) {
print(a + b)
}
4.4 函数的默认参数
使用默认参数来实现重载类似的功能
fun say(str: String = "hello"): String = str
这时候你可以调用say(),来得到默认的字符串 “hello”,也可以自己传入参数say(“world”)来得到传入参数值。
4.5 可变长参数函数
函数的变长参数可以用 vararg 关键字进行标识
同 Java 的变长参数一样,Kotlin 也支持变长参数
//在Java中,我们这么表示一个变长函数
public boolean hasEmpty(String... strArray){
for (String str : strArray){
if ("".equals(str) || str == null)
return true;
}
return false;
}
//在Kotlin中,使用关键字vararg来表示
fun hasEmpty(vararg strArray: String?): Boolean{
for (str in strArray){
if ("".equals(str) || str == null)
return true
}
return false
}