基础语法
### 定义变量
可变类型 变量名:数据类型
可变类型分为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