函數(shù)
fun max(a:Int,b:Int) : Int{
return if(a > b) a else b
}
注:函數(shù)聲明以關(guān)鍵字fun開(kāi)始旧噪,參數(shù)名在前,類(lèi)型在后淘钟,返回值在參數(shù)列表后面以:隔開(kāi)
表達(dá)式函數(shù)體
fun max(a:Int,b:Int) : Int = if(a > b) a else b
變量
聲明變量的關(guān)鍵字有兩個(gè):
- val-不可變引用。使用val聲明的變量不能在初始化之后再次賦值勾扭。對(duì)應(yīng)java的final變量铁瞒。
- var-可變引用。變量可以被改變精拟。對(duì)應(yīng)java中普通的變量
注:默認(rèn)情況下,盡可能使用val關(guān)鍵字來(lái)聲明所有的kotlin變量,盡管val引用自身是不可變的笋鄙,但是它指向的對(duì)象可能是可變的,如:
val languages = arrayListOf("java")
languages.add("kotlin")
字符串模版
fun main(args:Array<String>){
val name = if(args.size>0) arg[0] else "kotlin"
println("hello $name!")
}
注:kotlin可以在字符串字面值引用局部變量践美,只需要在變量名稱(chēng)前面加上字符$找岖。如果在字符串中使用$時(shí)需要使用\轉(zhuǎn)義。
字符串模版還能引用更加復(fù)雜的表達(dá)式
fun main(args:Array<String>){
if(args.size>0){
println("hello ${args[0]}!")
}
//println("hello, ${if(args.size>0) args[0] else "someone"}")
}
類(lèi)和屬性
類(lèi)
class Person(val name : String)
注:kotlin中public是默認(rèn)的可見(jiàn)性兴革,可省略
屬性
class Person{
val name : String
var isMarried : Boolean
}
注:聲明屬性的時(shí)候蜜唾,就聲明了對(duì)應(yīng)的訪(fǎng)問(wèn)器,只讀屬性(val)只有g(shù)etter袁余,而可見(jiàn)屬性(var)既有g(shù)etter也有setter
自定義訪(fǎng)問(wèn)器
class Rectangle(val height:Int, val width:Int){
val isSquare:Boolean
get(){
return width == height
}
}
枚舉和when
枚舉
enum class Color(val r:Int, val g:Int, val b:Int){
RED(255, 0, 0),
BLUE(0, 0, 255),
GREEN(0, 255, 0);// kotlin語(yǔ)法中唯一必須使用;的地方
fun rgb() = (r * 256 + g) * 256 + b;
}
注:kotlin中枚舉的聲明用了enum和class兩個(gè)關(guān)鍵字,其中enum是個(gè)軟關(guān)鍵字棚饵,只有當(dāng)它出現(xiàn)在class前面才有特殊的意義,其他地方可以當(dāng)作普通名稱(chēng)使用噪漾;聲明枚舉常量時(shí),必須提供該常量的屬性值
when
fun getColor(color:Color) =
when(color){
Color.RED -> "red"
Color.BLUE -> "blue"
Color.GREEN -> "green"
}
注:when結(jié)構(gòu)可以被認(rèn)為是java中switch結(jié)構(gòu)替代品夺刑;和if相似分别,when是一個(gè)有返回值的表達(dá)式;和java不一樣的是when不需要在每個(gè)分支都寫(xiě)上break語(yǔ)句耘斩;when可以把多個(gè)值合并到同一分支,只需要用,隔開(kāi)這些值
fun getColor(color:Color) =
when(color){
Color.RED, Color.BLUE -> "red, blue"
Color.GREEN -> "green"
}
when結(jié)構(gòu)中可以使用任何對(duì)象
fun mix(c1 Color, c2 Color) =
when(setOf(c1, c2)){
setOf(RED, BLUE) -> "mix color"
else -> throw Exception("dirty color")
}
注:kotlin標(biāo)準(zhǔn)函數(shù)庫(kù)中setOf函數(shù)可以創(chuàng)建出一個(gè)Set坞笙;Set是一個(gè)無(wú)序的集合荚虚,因此只要Set中包含的條目一樣,它們就是相等的
使用不帶參數(shù)的“when”
fun mix(c1 Color, c2 Color) =
when{
(c1 == RED && c2 == BLUE)
|| (c1 == BLUE && c2 == RED) -> "mix color"
}
注:如果沒(méi)有給when表達(dá)式提供參數(shù)梯澜,分支條件就是任意的布爾表達(dá)式
區(qū)間和數(shù)列
val oneToTen = 1..10
注:區(qū)間本質(zhì)上是兩個(gè)值之間的間隔渴析,這兩個(gè)值通常是數(shù)字:一個(gè)起始值,一個(gè)結(jié)束值俭茧;kotlin的區(qū)間是閉區(qū)間
使用“in”檢查集合和區(qū)間的成員
fun isLetter (c:Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit (c:Char) = c !in '0'..'9'
注:in運(yùn)算符來(lái)檢查一個(gè)值是否在區(qū)間中,!in來(lái)檢查這個(gè)值是否不再區(qū)間中
“try” “catch” 和 “finally”
fun readNumber(reader:BufferedReader):Int?
try{
Integer.parseInt(reader.readLine())
} catch (e : NumberFormatException) {
null
} finally {
reader.close()
}
注:和java最大的區(qū)別就是throws語(yǔ)句沒(méi)有出現(xiàn)在代碼中午磁,kotlin并不區(qū)分受檢異常和未受檢異常场斑;kotlin中的try關(guān)鍵字和if、when一樣漏隐,可以把它的值賦給一個(gè)變量,不同于if挺据,你總需要用花括號(hào)把語(yǔ)句主體括起來(lái);如果一個(gè)try代碼塊執(zhí)行一切正常的,代碼塊中最后一個(gè)表達(dá)式就是結(jié)果扁耐,如果捕獲到一個(gè)異常,相應(yīng)catch代碼塊中最后一個(gè)表達(dá)式就是結(jié)果
寫(xiě)在最后
- 學(xué)習(xí)參考資料來(lái)源于《Kotlin實(shí)戰(zhàn)》