前言
本文主要講解如何在Android中使用kotlin語(yǔ)言,如果想了解更多關(guān)于kotlin的知識(shí), 請(qǐng)查閱官方中文文檔
- 聲明變量
方法
繼承
實(shí)體類(lèi)
靜態(tài)塊companion object
智能字符串
范圍判斷
再見(jiàn)谜慌!findViewById()
優(yōu)雅解決NPE
say bye! if else
its awesome! when
思考
下一章
聲明變量
1.var a = 5
or val a: Int = 5
2.val TAG = "com.myapplication.example"
-
var
: 任意類(lèi)型
val
: 常量
結(jié)尾無(wú)分號(hào)
方法
override fun onCreate(savedInstanceState: Bundle?) {}
-
override
: 父類(lèi)方法
fun
: 方法聲明
?表示可能為空
無(wú)返回值
//有返回值
fun sum(a: Int,b: Int): Int{
retrun a + b
}
//等同于
fun sum(a: Int,b: Int) = a + b
//一臉懵逼了莺奔?
//這個(gè)呢欣范?
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
//等同于
fun maxOf(a: Int, b: Int) = if (a > b) a else b
//慢慢消化吧~
繼承
- 參數(shù)繼承
view instanceof Button
to view is Button
- class繼承
class MainActivity : AppCompatActivity(){}
實(shí)體類(lèi)
- example A:
//class有構(gòu)造參數(shù)時(shí)
class Person(a: Int,b:String){
var id = 0
var name = ""
}
var p = Person(2,"helloWorld")
- example B:
//class無(wú)構(gòu)造參數(shù)時(shí)
class Person{
var id = 0
var name = ""
}
var p = Person()
p.id = 2
p.name = "helloWorld"
- 注意:全局變量一定得初始化,而局部變量可以不初始化,這是和java不同的地方
靜態(tài)塊companion object
class A() {
companion object {
val TAG_SIZE = 100
}
}
//使用:
var i = A.TAG_SIZE
智能字符串
- java:
xxx.println("---size:"+list.size());
- kotlin:
print("---size: ${list.size},first: ${list[0]}")
//同理可得
var i: Int = 1
var s: String = "helloWorld:$i"
//值為helloWorld:1
范圍判斷
- java:
1.if(a >= 3 && a<= b){...}
2.if(!(c >='a' && c<= 'z')) {
int i = 'a';
}
- kotlin:
1.if(a in 3..b){...}
2.if(c !in 'a'..'z'){
var i: Int = 'a'.toInt()
}
- 注意是兩個(gè).來(lái)表示范圍
再見(jiàn)!findViewById()
1.在project -> build.gradle添加
classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.1.0"
2.在app->build.gradle添加
apply plugin: 'kotlin-android-extensions'
compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0"
//導(dǎo)入activity_main布局文件中的所有控件
import kotlinx.android.synthetic.main.activity_main.*
//activity_main布局文件中有一個(gè)TextView控件,id為text01
//使用
text01.text = "helloWorld"
優(yōu)雅解決NPE
var a: String = "abc"
a = null//報(bào)錯(cuò),提醒a(bǔ)不能為null
var i = a.length//就算通過(guò)了,這里也會(huì)報(bào)錯(cuò),因?yàn)閍為null
//變換之后
var a: String令哟? = "abc"
a = null//通過(guò)恼琼,因?yàn)槲艺f(shuō)了a是可以為null的
var i = a?.length
//在這里如果a為null就返回null如果a不為null就正確返回
//這樣a是null也不會(huì)報(bào)空指針異常了,一個(gè)?修飾符優(yōu)雅解決屏富!
//更多使用
//如果想知道bob所在部門(mén)的老大的名字但又不知道哪個(gè)為null的時(shí)候
var name: String= bob?.department?.header?.name
say bye! if else
首先是非空判斷
- java
//三元運(yùn)算符
int i = a != null ? a.length : 0;
//if else
if(a != null)
i = a.length;
else
i = 0;
- kotlin
//方式1
var i: Int = if(a != null) a.length else 0
//竟然還有if else真不爽啊
//那么方式2來(lái)了
var i: Int = a?.length ?: 0;
//一臉懵逼晴竞?!
//別慌,這里的意思是如果?:左邊的表達(dá)式不為null狠半,則返回,也就是a.length,如果為null就返回?:右邊的表達(dá)式,也就是0
這是普通的if else判斷
- java
if(a > b)
i = a;
else
i = b;
- kotlin
var i: Int = if(a > b) a else b
its awesome! when
現(xiàn)在采用全新而炫酷的表達(dá)方式:when
when (a) {
1 -> print("its 1")
3,4 -> print("its 3 or 4")
sum(a,1) -> print("its a + 1")
in 1..10 -> print("its >=1 and <= 10")
else -> print("error!nothing!")
}
//是不是有Rxjava的味道呢噩死?23333
//接下來(lái)是替換if的情況,這個(gè)很好理解
var word: String = when{
bob.isSay() -> "bob say!"
jojo.isSay() -> "jojo say!"
else -> "not say anything!"
}
//最后是變(diao)態(tài)(zha)的(tian)使用
fun getName(p: Person,str: String): String = when(p.id){
1 -> p.name
else -> str
}
- 支持單值判斷
支持多個(gè)值判斷
支持方法返回值判斷
支持范圍判斷
支持末尾else
支持直接賦值給變量或方法
支持替換if-else的if
思考
val bob = Person(26,"Bob")
print("$bob.id")
print("${bob.id}")
//輸出的結(jié)果是颤难?
下一章
- Kotlin for Android使用教程(二)