Kotlin使用简要笔记

2017/07/08 Android

基础语法

### 定义变量 可变类型 变量名:数据类型 可变类型分为var、val两种,分别代表可变、不可变; var id: Int = 5 var name: String = "jack" val useVal: Int = 1000 Kotlin是支持类型推导,在定义变量时可以不显式声明类型,而通过赋值来确定变量类型。 val b = 2 // `Int` 类型是自推导的 val c: Int // 没有初始化器时要指定类型 c = 3 // 推导型赋值 ### 空值检测 Kotlin有两种类型:一个是非空引用类型,一个是可空引用类型,例如,String为不可空类型,String?为可空类型 对于可空引用,如果希望调用它的成员变量或者成员函数,直接调用会出现编译错误,有三种方法可以调用: 1. 在调用前,需要先检查,因为可能为null 2. 使用b?.length的形式调用,如果b为null,返回null,否则返回b.length 3. 使用b!!.length()的形式调用,如果b为null,抛出空指针异常,否则返回b.length ``` //当data不为空的时候,执行语句块 data?.let{ //… }

//相反的,以下代码当data为空时才会执行 data?:let{ //… } ### 定义函数 访问控制符 fun 方法名(参数,参数,参数) : 返回值类型{ … … } - Kotlin的访问范围从大到小分别是public、internal、protected、private,不声明默认是public; - 不需要返回类型的函数,后面的 : 返回值类型可以缺省 /有返回参数的函数 fun getName(): String { return “jack” } //无返回参数的函数 fun displayName(name: String) { println(“name: $name”) } ### 参数变长 传递的参数使用关键字vararg标明 fun displayName(vararg name: String) { println(“name: “ + name); } ### 静态变量和函数 使用companion object,companion object后可以加上自定义的object名,也可以省略 class KotlinStatic { companion object Test { var kotlinInt: Int = 0 fun getInstance(): KotlinStatic { return KotlinStatic() } } }

其他地方使用 KotlinStatic.kotlinInt KotlinStatic.getInstance() ### If表达式 If判断是有返回值的,在把If当成表达式使用时必须有else分支,这样在逻辑上才能保证最终一定有返回值,否则会报语法错误 var result = if (a > b) { println(“a > b”) true //返回结果 } else { println(“a <= b”) false } println(“result: $result”)

if (a > b) {
   return a
} else {
   return b
} ``` ### When表达式 相当于Java中的switch ```
var result = when (input) {
	//判断input是否为1
    1 -> println("input == 1")
	//判断input是否为2
    2 -> {
        println("input == 2")
    }
	//input是否在10到20的范围内
    in 10..20 -> println("input number in the range")
	//input是否不在20到30的范围内
    !in 20..30 -> println("input number outside the range")
    else -> { //When作为表达式使用时,最后一定要以else
        println("input: $input")
	}
}
println("result: $result") ``` ### 在android studio中使用 ### 环境搭建 使用android studio 3.0,创建工程时勾选include Kotlin support ### 控件调用 xml文件里的textView加一个id,Activity中直接使用 ``` import kotlinx.android.synthetic.main.activity_main.*

tv_hello.text = “123” ```

函数扩展

语法是 fun + 类型.函数(参数) ``` fun Context.toast(message:String,length : Int = Toast.LENGTH_SHORT){ Toast.makeText(this,message,length) }

代码可以写在其他可以编译到的文件中,值的注意的是,如果写在了class内部,则是局部生效。第二个参数,可以给默认值,如果参数不传,则自动调用默认值。

### 加入监听器

btn_test.setOnClickListener{toast(“hello world”, Toast.LENGTH_SHORT)} ```

数据类

data class User(var name: String, var id: String)

或者 ``` var name: String? = null var id: String? = null

constructor(name: String) { this.name = name }

constructor(name: String, id: String) { this.name = name this.id = id } } 使用 val user = User(“jack”,”222”) user.id = “100” ```

参考文章

Kotlin-in-Chinese Kotlin学习笔记(二):变量与函数 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean

Search

    Table of Contents