Kotlin學習筆記(3)- 語法

系列文章全部為本人的學習筆記描睦,若有任何不妥之處璃赡,隨時歡迎拍磚指正。如果你覺得我的文章對你有用磁携,歡迎關注我褒侧,我們一起學習進步!
Kotlin學習筆記(1)- 環(huán)境配置
Kotlin學習筆記(2)- 空安全
Kotlin學習筆記(3)- 語法
Kotlin學習筆記(4)- 流程控制
Kotlin學習筆記(5)- 類
Kotlin學習筆記(6)- 屬性
Kotlin學習筆記(7)- 接口
Kotlin學習筆記(8)- 擴展
Kotlin學習筆記(8)- 擴展(續(xù))
Kotlin學習筆記(9)- 數(shù)據(jù)類
Kotlin學習筆記(10)- 泛型
Kotlin學習筆記(11)- 內(nèi)部類和嵌套類
Kotlin學習筆記(12)- 委托
Kotlin學習筆記(13)- 函數(shù)式編程
Kotlin學習筆記(14)- lambda

一谊迄、基礎語法

  1. 在語句的結尾不用;

  2. 聲明一個方法需要加關鍵字fun

  3. 如果函數(shù)是重載父類的方法闷供,則需要加override關鍵字

  4. 方法中的參數(shù)格式為:形參名+冒號+形參類型

    fun a (str : String, num : Int)
    

二、定義類

  1. kotlin默認唯一構造器统诺,暨類定義同時也是構造器

    class Person(name : String歪脏, age : int) {
     init{  
         // do some thing
     } 
    } 
    
    翻譯成java為:
    
    final public class Person {
        public Person(String name, int age){
            init();
        }
        private void init(){
            // do some thing
        }
    }
    
  2. 仔細看會發(fā)現(xiàn),翻譯成的java類定義前面有final修飾符粮呢,因為在kotlin中類默認為final的婿失,也就是不可繼承的。如果要繼承啄寡,需要聲明為open豪硅,或者abstract

    open class Person(name : String挺物, age : int) {
     init{  
         // do some thing
     } 
    } 
    
  3. 如果init中沒有操作懒浮,則可以省略

    class Person(name : String, age : int)
    
  4. 如果連參數(shù)也沒有识藤,甚至可以這么寫

    class Person
    

三砚著、定義函數(shù)方法

  1. 函數(shù)方法要加fun關鍵字,方法的返回類型寫在參數(shù)后

    fun sum (a : Int, b : Int) : Int {
        return a+b
    }
    
  2. 如果像上面這樣痴昧,函數(shù)內(nèi)只有一條語句稽穆,則可以直接賦值

    fun sum (a : Int, b : Int) : Int = a+b
    
  3. kotlin編譯器會自動根據(jù)返回值推測方法返回類型

    fun sum (a : Int, b : Int) = a+b
    
  4. 如果方法不需要返回值,則返回Unit赶撰,類似java中的void舌镶,當然Unit也是可以忽略的

    fun printSum (a : Int, b : Int) : Unit = print(sum(a, b))
    //等價于
    fun printSum (a : Int, b : Int) = print(sum(a, b))
    

看到網(wǎng)上資料說柱彻,如果方法是public的,則必須要聲明返回類型乎折。但是我自己試驗發(fā)現(xiàn)kotlin的方法默認是public的绒疗,同時上面說的幾點都適用,也就是不是必須要明確聲明返回類型骂澄。如有錯誤之處吓蘑,歡迎隨時拍磚指正。

四坟冲、定義變量

kotlin中將java中的變量演化成了兩種:var表示變量磨镶,val便是常量(相當于java中用final修飾)

var a : Int = 1    // 定義一個普通變量
var b = 2          // 和方法的返回類型一樣,編譯器也會根據(jù)值自動判斷變量類型
b = 3              // 普通變量可多次賦值
val c = 1          // 定義一個常量健提,和普通變量一樣琳猫,編譯器也會自動判斷類型
c = 2              // 提示編譯錯誤,無法運行私痹。常量只能賦值一次
val d : Int        // 如果常量在定義的時候沒有賦值脐嫂,則必須明確類型
d = 1              // 賦值

五、使用泛型Array代替數(shù)組

例如最經(jīng)典的main方法

Java:
public static void main(String[] args){
    // do some thing
}

Kotlin:
fun main(args : Array<String>){
    // do some thing
}

六紊遵、條件語句

fun max(a: Int, b: Int): Int {
    if (a > b)
        return a
    else
        return b
}

//或者也可以把if語句作為省略方法體的方法
fun max(a: Int, b: Int) = if (a > b) a else b

七账千、空值

在類型后面跟一個問號?表示可能為空,跟雙感嘆號!!表示一定不能為空暗膜。具體的請看我上一篇文章<a herf="http://www.reibang.com/p/6063dee97eca">《Kotlin學習筆記(2)- 空指針》</a>匀奏。

八、類型檢測并自動轉換

fun getStringLength (obj : Any) : Int? {
    // 通過is關鍵字做類型判斷
    if(obj is String){
        // 類型判斷后学搜,系統(tǒng)自動轉型娃善,這里自動將obj轉為String類型
        return obj.length
    }
    // 類型判斷之外,obj依然是Any類型瑞佩,沒有被轉型聚磺,所以不能調用length,會報編譯錯誤
    var length = obj.length
    return null
}
fun getStringLength (obj : Any) : Int? {
    // 通過is關鍵字做類型判斷炬丸,因為第一個判斷條件已經(jīng)通過并自動轉型咧最,
    // 所以第二個判斷時obj可以直接作為String類型使用
    if(obj is String && obj.length > 0){
        // 類型判斷后,系統(tǒng)自動轉型御雕,這里自動將obj轉為String類型
        return obj.length
    }
    return null
}

九、循環(huán)

  1. for循環(huán)滥搭,使用in關鍵字

    fun main(args : Array<String>) {
        for(arg in args)
            print(arg)
    
        for(i in args.indices)
            print(args[i])
    
        for((index, value) in args.withIndex()){
            println("index : $index, value : $value")
        }
    }
    
  2. while循環(huán)酸纲,和java的基本一致

    fun main(args : Array<String>) {
        var i = 0
        while (i < args.size){
            print(args[i++])
        }
    
        var j = 0
        do{
            print(args[j])
        }while (++j<args.size)
    }
    

十、when表達式(類似于java中的switch)

when的特性與switch差不多瑟匆,都是通過列舉比對列舉出來的條件進行匹配闽坡,滿足條件的分支會被執(zhí)行。when可以作為表達式,也可以作為聲明疾嗅。如果用作表達式的話外厂,那么滿足條件的分支就是總表達式。如果用做聲明代承,不滿足條件的分支的的的值會被忽略汁蝶,只保留滿足條件的分支,而且返回的值也是最后一個表達式的值论悴。

  1. 傳統(tǒng)用法

    var x = 3
    when (x) {
        1 -> print(1)
        2 -> print(2)
        else -> print(5)
    }
    
  2. 作為表達式掖棉,滿足條件的分支會被作為when的返回值

    var x = 3
    var result = when (x) {
        1 -> 1
        2 -> 2
        else -> 5
    }
    
  3. 分支條件一致,如果有分支可以用同樣的方式處理的話膀估, 分支條件可以連在一起處理幔亥。

    when (x) {
        0,1 -> print("x == 0 or x == 1")
        else -> print("otherwise")
    }
    
  4. 使用任意表達式作為分支的條件

    when (x) {
        parseInt(s) -> print("s encode x")
        else -> print("s does not encode x")
    }
    
    when (x) {
        in 1..10 -> print("x is in the range")
        in validNumbers -> print("x is valid")
        !in 10..20 -> print("x is outside the range")
        else -> print("none of the above")
    }
    
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市察纯,隨后出現(xiàn)的幾起案子帕棉,更是在濱河造成了極大的恐慌,老刑警劉巖饼记,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泞辐,死亡現(xiàn)場離奇詭異遥昧,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門甥桂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人智袭,你說我怎么就攤上這事逻族。” “怎么了束昵?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵拔稳,是天一觀的道長。 經(jīng)常有香客問我锹雏,道長巴比,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任礁遵,我火速辦了婚禮轻绞,結果婚禮上,老公的妹妹穿的比我還像新娘佣耐。我一直安慰自己政勃,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布兼砖。 她就那樣靜靜地躺著奸远,像睡著了一般既棺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懒叛,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天丸冕,我揣著相機與錄音,去河邊找鬼薛窥。 笑死胖烛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拆檬。 我是一名探鬼主播洪己,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竟贯!你這毒婦竟也來了答捕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屑那,失蹤者是張志新(化名)和其女友劉穎拱镐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體持际,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡沃琅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜘欲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片益眉。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姥份,靈堂內(nèi)的尸體忽然破棺而出郭脂,到底是詐尸還是另有隱情,我是刑警寧澤澈歉,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布展鸡,位于F島的核電站,受9級特大地震影響埃难,放射性物質發(fā)生泄漏莹弊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一涡尘、第九天 我趴在偏房一處隱蔽的房頂上張望忍弛。 院中可真熱鬧,春花似錦考抄、人聲如沸细疚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惠昔。三九已至,卻和暖如春挑势,著一層夾襖步出監(jiān)牢的瞬間镇防,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工潮饱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留来氧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓香拉,卻偏偏與公主長得像啦扬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凫碌,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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