1. 環(huán)境配置
基本的配置步驟很容易在網(wǎng)上找到葛超,就不詳細(xì)說明了。
推薦配置:打開模塊下的build.gradle文件绞蹦,在apply plugin: 'kotlin-android'下面加入一行:apply plugin: 'kotlin-android-extensions'。這是一個Kotlin的擴(kuò)展模塊,可以讓Activity自動關(guān)聯(lián)xml布局中的View而不需要findViewById全景。
2. 將java文件轉(zhuǎn)化為kotlin文件的方法
- 在AS下通過快捷鍵Ctrl+Shift+A打開FindAction,輸入Convert Java File to Kotlin File 可以將項(xiàng)目中的java文件轉(zhuǎn)換為kotlin文件。
- 在菜單欄中點(diǎn)擊“Code”菜單項(xiàng)丽蝎,選擇“Convert Java File to Kotlin File”即可根據(jù)之前配置將已有的Java文件轉(zhuǎn)換為Kotlin文件。
3. kotlin的基本用法
1.語句的結(jié)尾不用分號
2.定義
- 定義變量和常量:在Kotlin中常量用val聲明膀藐,變量用var聲明屠阻,關(guān)鍵字在前面,類型以冒號:隔開在后面额各,也可以省略直接賦值国觉,類型后帶問號?表示可為空類型(默認(rèn)空安全)。
private var str: String? = null
private var str1: String? = "hello world"
private var str2 = "hello world"
private val arrs = Array(3) { Array(2) { IntArray(1) } }
- 定義方法: 在Kotlin中方法用fun聲明虾啦,參數(shù)名在前麻诀,類型以冒號:隔開在后面。參數(shù)后冒號隔開的是返回值的類型缸逃。返回值為空可以省略针饥。函數(shù)體可以是表達(dá)式,并可從中推斷出返回值類型需频。函數(shù)參數(shù)可以設(shè)置默認(rèn)值,當(dāng)參數(shù)被忽略時(shí)會使用默認(rèn)值丁眼。這樣相比其他語言可以減少重載。
fun sum(a: Int = 0, b: Int = 1): Int {
return a+b
}
fun sum1(a: Int, b: Int) = a + b
fun sum2(a: Int, b: Int){
println(a+b)
}
- 定義類:在Kotlin中屬性自動生成Java的getter/setter方法昭殉,方便在Java中調(diào)用苞七,更方便賦值。括號內(nèi)的參數(shù)代表構(gòu)造方法的參數(shù)挪丢。
class User(name: String) {
var name: String? = null
var age: String? = null
}
//賦值
user.name = "zjj"
user.age = "21"
//取值
val name = user.name
val age = user.age
3. 使用 this@lable 作為 lable
為了在范圍外部(一個類蹂风,或者表達(dá)式函數(shù),或者帶標(biāo)簽的擴(kuò)展字面函數(shù))訪問 this 乾蓬,我們需要在
class User {
inner class State{
fun getUser(): User{
//返回User
return this@User
}
fun getState(): State{
//返回State
return this@State
}
}
}
4. 字符串模板
在Java中拼接字符串的代碼可讀性都很差惠啄,在Kotlin字符串拼接變得非常簡潔,只需用$后面加上參數(shù)名任内,復(fù)雜的參數(shù)要加上{}
var userInfo = "name:${user.name}, age:$age"
5. Ranges(范圍)
for (i in 4 downTo 1) print(i) // prints "4321"
for (i in 1..4 step 2) print(i) // prints "13"
for (i in (1..4).reversed()) print(i) // prints "4321"
6. 條件
if...else 正常使用撵渡,不過移除了switch用更強(qiáng)大的when替代,when子式可以是常量死嗦、變量趋距、返回?cái)?shù)值的表達(dá)式、返回Boolean值的表達(dá)式越除,強(qiáng)大到用來替換if...else if
var x = 10
when (x) {
//常量
2 -> println("等于2")
//數(shù)值表達(dá)式
if (x > 0) 1 else -1 -> println("大于0并等于1节腐,或小于0并等于-1")
//Boolean類型表達(dá)式
in 1..5 -> println("范圍匹配1-5")
!in 6..9 -> println("不是6-9")
is Int -> println("類型判斷")
else -> println("else")
}
// 代替if...else if
when{
x > 6 && x <= 10 -> println("大于6小于等于10")
x < 6 -> println("小于6")
else -> println("else")
}
7. 循環(huán)
while 和 do...while 同Java并無區(qū)別外盯,for則有很大改變并多出了幾個變種
val list = ArrayList<String>()
//遞增for (int i = 0; i < list.size(); i++)
for (i in list.indices) {
print(list[i])
}
//遞增for (int i = 2; i < list.size(); i++)
for (i in 2..list.size-1) {
print(list[i])
}
//遞減for (int i = list.size(); i >= 0; i--)
for (i in list.size downTo 0) {
print(list[i])
}
//操作列表內(nèi)的對象
for (item in list) {
print(item)
}
8. 返回和跳轉(zhuǎn)
在 Kotlin 中表達(dá)式可以添加標(biāo)簽,標(biāo)簽通過 @ 結(jié)尾來表示翼雀。
現(xiàn)在我們可以用標(biāo)簽實(shí)現(xiàn) break 或者 continue 的快速跳轉(zhuǎn):
loop@ for (i in 1..100) {
for (j in i..100) {
if (...)
break@loop
}
}
break 是跳轉(zhuǎn)標(biāo)簽后面的表達(dá)式饱苟,continue 是跳轉(zhuǎn)到循環(huán)的下一次迭代。