前言
這些年對于kotlin的非議與爭論,在google將kotlin作為Android開發(fā)第一語言之后,質(zhì)疑聲越來越少了,因此每一個android開發(fā)者都應(yīng)該經(jīng)歷這個轉(zhuǎn)變的步驟,畢竟時代在變遷,技術(shù)是日新月異的,每一個技術(shù)者都應(yīng)該秉承不斷進(jìn)步的理念,故寫此文,以復(fù)習(xí)此次歷程
kotlin精簡的語法給予開發(fā)者最大的好處,莫過于,精簡。
用了kotlin之后,代碼更易讀,邏輯更條理,對于做開發(fā)項(xiàng)目的小伙伴們來說,簡直是福利有沒有,但是,從高級的角度來講,kotlin給予的好處真是太多太多。本篇不講高級的東西,從頭認(rèn)識下,如何簡單的使用kotlin與日常。
基本知識
1.與java不同的是,我們在寫代碼的時候可以擺脫“;”的束縛了,在代碼的末尾不強(qiáng)制要求以“;”結(jié)尾。
2.空格的使用:kotlin允許在非變量名以外的地方使用空格、制表符、回車
3.關(guān)鍵詞與java不完全相同,詳情,請訪問百度。
4.var(可變變量)
val(不可變變量)
使用: var/val + 名稱 +:+類型 = 初始值
var value : String = "kotlin"
val value : Int = 2
- java中的byte、short、int、long、float、double、string等在kotlin中全部變?yōu)槭鬃帜淮髮憽?br> 基本數(shù)據(jù)類型轉(zhuǎn)換可以使用toByte()等直接工具。
val value : Int = 2
val byteV = value.toByte()
//kotlin為我們準(zhǔn)備了轉(zhuǎn)換失敗的方案如若轉(zhuǎn)換失敗,則返回null
val byteV = value.toByteOrNull()
6、${}模板使用
字符串中可以嵌入變量或表達(dá)式,比如
var name : String = "李剛"
var student = "這個學(xué)生的名字叫:${name}"
var student2 = "這個學(xué)生名字有: ${name.length} 個字"
null安全
kotlin讓android開發(fā)者贊不絕口的就是null安全的處理了。
1、首先在kotlin中每一個可變的變量都不允許直接調(diào)用,必須先判斷、后調(diào)用。
常見的幾種用法:
//創(chuàng)建一個不可為空的字符串
var value : String = "kotlin"
//創(chuàng)建一個可為空的字符串
var value2 : String? = "kotlin"
//利用kotlin的類型推斷創(chuàng)建字符串
var value3 = "kotlin"
2、kotlin在鏈?zhǔn)秸{(diào)用也可以很方便,像這樣
user?.dog?.name
代碼意思是,如果user不為空,那么調(diào)用它的dog屬性如果dog不為空,則調(diào)用name,如果其中調(diào)用有空,則直接返回null。
3、Elvis運(yùn)算 其實(shí)就是if else的簡單寫法
//if else 可以如此簡單的用來直接賦值有沒有
//但是我們?nèi)粘J褂眠€應(yīng)該遵守正確的使用規(guī)范,這樣會使代碼易讀,且易擴(kuò)展
var len = if(value2 != null) value.length else -1
//主要看?: 如果它的左邊為空 則返回-1 如果不為空,則返回結(jié)果
var len2 = value2?.length ?: -1
4、強(qiáng)制調(diào)用
kotlin也是可以不做空判斷的 “!!”符號就是強(qiáng)制不進(jìn)行空判斷,強(qiáng)制調(diào)用,與java一樣的是,會導(dǎo)致空指針。
val value : String? = null
//這樣調(diào)用會報錯,因?yàn)関alue可能為空,導(dǎo)致空指針
val length = value.length
//這樣調(diào)用就不會報錯了,但是如果value為空,則會拋出空指針
val length = value?.length
運(yùn)算符
1、java的三目運(yùn)算在kotlin里面是不存在的了,取而代之的是if else
a>b ? a : b 被替換為 if(a>b) a else b
2、kotlin中字符串也提供了索引訪問
var str = "kotlin"
//注意此處的等號只是為了說明他的結(jié)果
str[2] = "t"
str.get(2) = "t"
3、比較運(yùn)算符
在java中經(jīng)常用到的“==”在kotlin中替換為“===”
kotlin中的“==”會先進(jìn)行空判斷,再進(jìn)行“===”判斷。
java中的“!=” 替換為“!==”
比較符號(>、<),不一樣的是,在kotlin中凡是實(shí)現(xiàn)了Comparable接口的類型都可以直接用符號直接比較利用的是compare to()方法 如:String、Date等都可以直接進(jìn)行比較
4、in運(yùn)算符
判斷前者是否被包含在后者里,可以參考java中的contains()方法
a 是否在 b中
a in b
a 是否不在b中
a !in b
5、區(qū)間
//意為 a-b之間[a,b]這樣的關(guān)系 且 a 不大于 b
a..b
//意為 [a,b)這樣的關(guān)系
a until b
//意為 反向區(qū)間 其實(shí)就是 [b,a] 反過來而已
b down to a
//步長概念 一般我們的步長都為1 ,從10-0 ,每次減1,步長便是改變每次減少的值
a in b step c
流程控制
1、更加簡潔的when語句
->代表執(zhí)行語句相當(dāng)于 ->{}
var student = "A"
when(student){
"A" -> Log.d(TAG,"A")
"B" -> Log.d(TAG,"B")
else -> Log.d(TAG,"else")
}
when語句還可以用于類型判斷等多種用途。
2、for in 循環(huán)
for(a in b){
Log.d(TAG,"a")
}
此處介紹@outer用法
@outer用于終止帶有outer@標(biāo)識的循環(huán)
outer@ for(a < b){
for(a in 0..3){
if(a < 3){
break@outer
}
}
}
數(shù)組和集合
1、數(shù)組與集合的創(chuàng)建
數(shù)組:
var arr = arrayOf("A","B","C")
//創(chuàng)建一個不含空的數(shù)組、如果有空,則自動過濾掉
var arr2 = arrayOfNulls<String>(6)
//創(chuàng)建一個空數(shù)組
var arr3 = emptyArray<String>()
//甚至可以使用Lambda表達(dá)式直接創(chuàng)建,但是需要顯式指定數(shù)組長度
var arr4 = Array(5,{(it * 2 + 1)})
//直接用工具創(chuàng)建指定類型數(shù)組
var arr5 = intArrayOf(2,1,0)
//創(chuàng)建可變List
var lists = listOf("A","B","C")
var lists2 = listOfNotNull("A","B","C")
var lists3 = arrayListOf("A","B","C")
//創(chuàng)建不可變List
var lists4 = mutableListOf("A","B","C")
2、集合
集合分為可變集合與不可變集合
set集合的可變集合創(chuàng)建
var value = setOf("A","B","C")
var value2 = hashSetOf("A","B","C")
var value3 = linkedSetOf("A","B","C")
set集合的不可變集合創(chuàng)建
var value4 = mutableSetOf("A","B","C")
map集合的可變集合創(chuàng)建
var value = mapOf("A","B","C")
var value2 = linkedMapOf("A","B","C")
var value3 = hashMapOf("A","B","C")
map集合的不可變集合創(chuàng)建
var value4 = mutableMapOf("A","B","C")
寫在最后
kotlin語法是很豐富的,因涉及很詳細(xì)的東西,本篇不再介紹,在日常工作中,需要它的更多用法,都可以去kotlin官網(wǎng)查詢,kotlin提供了很多豐富的工具使日常所需變的簡單。