Kotlin关键字目录
本篇文章作为快速入门kotlin的小指引,同时作为作者本人方便查询的文章,如有缺少或者错误的地方,希望大家在下方不吝赐教:
fun
- 声明一个函数
// 无返回值
fun getName(){}
// 有返回值
fun getName():String{
return "name"
}
val var
- val 声明一个只读属性或局部变量
- var 声明一个可变属性或局部变量
val a: Int = 1 // 立即赋值
val b = 2 // 自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
c = 3 // 明确赋值
var x = 5 // 自动推断出 `Int` 类型
x += 1
as
- 用于类型转换
/**
* “不安全的”转换操作符
* 通常,如果转换是不可能的,转换操作符会抛出一个异常。因此,我们称之为不安全的
*/
val x: String = y as String
//null 不能转换为 String 因该类型不是可空的, 即如果 y 为空,上面的代码会抛出一个异常
val x: String? = y as String?
/**
* “安全的”(可空)转换操作符
* 为了避免抛出异常,可以使用安全转换操作符 as?,它可以在失败时返回 null:
* 请注意,尽管事实上 as? 的右边是一个非空类型的 String,但是其转换的结果是可空的。
*/
val x: String? = y as? String
- 为导入指定一个别名
/**
* 当import 引用的包名出现重复时,我们可以使用as对其进行本地重命名来消歧义
*/
import org.example.Message // Message 可访问
import org.test.Message as testMessage // testMessage 代表“org.test.Message”
in
- i in a…b 表示 i 是否在 a 到 b 区间
- in 可以检查字符区间,对象区间(实例对象的类必须实现Comparable),集合
fun main(args: Array<String>){
println('c' in 'a'..'d');
println(1 in 0..100)
}
//要反向迭代数字,请使用 downTo 函数而不是 ..
for (i in 4 downTo 1) print(i)
//!in 用作中缀操作符以检测一个值不属于一个区间
is
- 通过使用 is 操作符或其否定形式 !is 来检测对象是否符合给定类型
if (obj is String) {
print(obj.length)// obj 自动转换为字符串
//在许多情况下,不需要在 Kotlin 中使用显式转换操作符,因为编译器跟踪不可变值的 is-检测以及显式转换,并在需要时自动插入(安全的)转换:
}
if (obj !is String) { // 与 !(obj is String) 相同
print("Not a String")
}else {
print(obj.length)
}
When
- when 表达式取代了类 C 语言的 switch 语句。其最简单的形式如下:
when (x) {
0, 1 -> print("x == 0 or x == 1")
2 -> print("x == 2")
3 -> print("x == 3")
else -> { // 注意这个块
print("x is neither 1 nor 2")
}
}
typealias
- 类型别名为现有类型提供替代名称。 如果类型名称太长,你可以另外引入较短的名称,并使用新的名称替代原类型名
typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>
//你可以为函数类型提供另外的别名:
typealias MyHandler = (Int, String, Any) -> Unit
typealias Predicate<T> = (T) -> Boolean
//你可以为内部类和嵌套类创建新名称:
class A {
inner class Inner
}
class B {
inner class Inner
}
typealias AInner = A.Inner
typealias BInner = B.Inner
data
- 我们经常创建一些只保存数据的类,在 Kotlin 中,这叫做 数据类 并标记为 data
data class User(val name: String, val age: Int)