Kotlin學(xué)習(xí)第1篇:kotlin基礎(chǔ)

函數(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)》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末块仆,一起剝皮案震驚了整個(gè)濱河市王暗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌科汗,老刑警劉巖绷雏,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涎显,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)缀蹄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)膘婶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛀醉,“玉大人,你說(shuō)我怎么就攤上這事脊岳《獠#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵帚桩,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我莫瞬,道長(zhǎng),這世上最難降的妖魔是什么疼邀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任旁振,我火速辦了婚禮获询,結(jié)果婚禮上拐袜,老公的妹妹穿的比我還像新娘。我一直安慰自己瓦戚,他們只是感情好丛塌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赴邻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奸焙。 梳的紋絲不亂的頭發(fā)上彤敛,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音玄糟,去河邊找鬼。 笑死阵翎,一個(gè)胖子當(dāng)著我的面吹牛之剧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播背稼,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谓形!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起寒跳,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤童太,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后书释,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狸页,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年扯再,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熄阻。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秃殉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钾军,到底是詐尸還是另有隱情,我是刑警寧澤吏恭,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布砸泛,位于F島的核電站蛆封,受9級(jí)特大地震影響唇礁,放射性物質(zhì)發(fā)生泄漏惨篱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一琢融、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漾抬,春花似錦、人聲如沸纳令。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捏雌。三九已至,卻和暖如春性湿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窘奏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工着裹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骇扇。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像继低,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袁翁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容