Kotlin學習(二)—— 基本文法,函數,變數,字串模板,條件運算式,null,類型檢測,for,while,when,區間,集合,kotlinnull

來源:互聯網
上載者:User

Kotlin學習(二)—— 基本文法,函數,變數,字串模板,條件運算式,null,類型檢測,for,while,when,區間,集合,kotlinnull
一.基本文法

Kotlin的很多概念跟JAVA是有類似的,所以我應該不會像我的JAVA之旅一樣那麼的詳細,但是不用擔心,你會看的很明白的,我也是根據官方的文檔來學習的

我們在IDEA中建立一個項目Kotlin02

1.函數(fun)

我們預設有一個主函數,就是main了

fun main(args: Array<String>) {    print("主函數")}

和JAVA一樣,他就是程式的主入口了,當然,我們還有普通的函數

fun sum(): Unit {    print("無參 無返回")}fun sum() {    print("一般Unit可以省略")}fun sum(a: Int) {    print("有參 無返回")}fun sum(): Int {    print("無參 有返回")    return 0;}fun sum(a: Int): Int {    print("有參 有返回")    return 0;}

這裡就可以對Kotlin的函數有一個比較清晰的認識了,首先,我們的無參 無返回中有一個Unit,這個就是標誌
這個函數沒有傳回值,和JAVA中的void是一樣的,而且我們一般是可以省略掉的,並且這裡要注意下的就是他的函數傳值
是先定義變數,再用冒號去指向類型,如a:Int b:String,並且傳回值也是用冒號去指向的,如:Int

並且我們還可以將運算式作為函數體、傳回值類型⾃動推斷的函數,如:

fun sum(a: Int, b: Int) = a + b;
2.變數(val&var)

變數分三種,局部變數,頂層變數和可變變數

但是就兩個修飾符val 和 var

    //定義Int類型的變數    val a: Int = 1    //定義變數 自動識別類型,如果不指定類型,就必須賦值    val b = 2    //沒有初始值,不可操作    val c: Int    //賦值 val修飾只能賦值一次    c = 3

用val修飾符修飾之後,只能一次賦值後就編程唯讀變數了,在JAVA中可以理解為常量,這裡怎麼理解呢,可以說是JAVA中用final修飾一樣,我們來舉個例子

    //報錯    val a: Int    print(a + 2 )    //正確    a = 3    print(a)

這裡的意思就是我定義一個Int類型的a,然後輸出a + 2,編譯器會提示錯誤,因為val修飾後無值,不可操作,然後我給他賦值= 3,就可以正確輸出了

這裡還有一點要注意的就是,我們可以 val c: Int這樣定義一個變數,先不賦值,但是如果你不指定值又不定義類型,比如val a,那是錯誤的,編譯器無法得知你需要做什麼操作

我們再來看下可變變數,用法是一樣的,但是注意的事,他是可變的

    var a: Int = 2    print(a)    a++;    print("a:" + a)

這裡就可以明白,a輸入2,然後a++,輸出3

還有最後一種頂層變數,頂層變數其實就是JAVA中的全域變數,這個沒什麼可說的

//頂層val x = 2var y = 3fun sum() {    y++    print(x + y)}

這個就沒什麼好說的了

3.字串模板($)

字串模板也是比較簡單的,就是字元引用,我們來看一段例子

    val boy = 5    var girl = 7    var all = "班級共有男孩:$boy 人,女孩:$girl 人"    print(all)

然後run一下,輸出

可以看出,這裡我輸出的時候就引用了變數boy和girl,只需要前面加上$即可,有點類似於JAVA中的逸出字元

當然,還有一些更加進階的用法,比如

    val boy = 5    var girl = 7    var all = "班級共有男孩:$boy 人,女孩:$girl 人"    //print(all)    //將男孩替換成女孩    print("${all.replace("男孩","女孩")},現在班級的所有女生共有:${boy + girl}" )

這裡我們可以看到輸出

也就是說,我們可以直接操作,當然,本質上這樣轉義跟下面這樣並沒有什麼區別

print(all.replace("男孩","女孩") + ",現在班級的所有女生共有:" + (boy + girl))

你覺得哪種方便呢?

4.條件運算式(if else)
//比較大小fun maxOf(a: Int, b: Int): Int {    if (a > b) {        return a    } else {        return b    }}

if else 一直都是這種寫法,當然,簡單判斷的話,我們還可以這樣去寫

fun maxOf(a: Int, b: Int) = if (a > b) a else b
5.可空值及 null 檢測(?)

還記得我們在java中怎麼去寫函數的嘛?比如

private String testOf(String x){    String y = null;    //通過一些邏輯的操作    if(!TextUtils.isEnty(y)){        y = x;    }    return y;}

這是一段JAVA代碼,我們可以看到,如果我們通過邏輯操作後可以讓y賦值,但是也同樣的,有存在有可能返回null的情況,但是在kotlin中,我們需要特殊處理

fun parseInt(str: String): Int? {    return null;}

這裡注意,如果傳回值有可能為空白的話,需要標記?問號,不然你return null會報錯

6.類型檢測及⾃動類型轉換(is)

類型檢測在JAVA中都是用instanceof來處理,在kotlin中,可以用is,我們看一個例子

    var a:Any = "123"    if(a is String){        print(a.length)    }

在這段代碼中,我說明一下,Any是所有類都有一個共同的父類,類似於Object,但是他的神通沒有Object大

而在這段代碼中,首先,我用is判斷了String,這裡可不僅是判斷,而且還類型轉換了,所以為true的話,就可以輸出a.length了,但是在沒有調用is之前,實際上是沒有length這個方法的

7.for迴圈(for in)
    var a = listOf(1, 2, 3, 1)    for (b in a) {        //錯誤        //print(b + "\n")        print("$b \n")    }

這段代碼中,我們定義了一個list為a,然後通過in去for迴圈,這裡我要說一下,就是字串模板的應用情境。

比如輸出的結果需要換行,那麼print(b + “\n”)你這樣用+號是錯誤的,需要print(“$b \n”),在Kotlin中,in負責for迴圈,即最大次數為list長度

當然,如果你想問,那我想知道下標是多少怎麼辦?

    var a = listOf(1, 2, 3, 1)    for (b in a.indices) {        print("item:" + b + "值" + a[b] + "\n")    }

實際上in只是提供迴圈的手段而已,真正要迴圈的東西,還是要自己決定,所以這裡,我就迴圈list的下標a.indices

這樣我就可以拿到下標以及對應的值,也是一樣的,當然,這個輸出我們可以用更官方的寫法來寫的:

print("item:$b 值${a[b]}\n")

一樣,我們可以看到列印

8.while迴圈(while)
    var a = 0;    while (a < 10) {        a++;        print(a)    }

while迴圈沒什麼好講的,你按照正常的來就好了

9.when運算式(when)
    var x = 1;    var y = 1;    when (x) {        1 ->            if(x + y > 5){                print("a")            }else{                print("b")            }        2 -> print("x == 2")        else -> { // 注意這個塊            print("x is neither 1 nor 2")        }    }

從這段代碼大家可以看出一些東西來吧,沒錯,實際上Kotlin中的when運算式就是JAVA中的switch語句塊 -> 相當於case

10.區間(range)
    val x = 5    if (x in 1..10) {        println("fits in range")    }

我們通過int可以判斷x是否在1-10的區間,當然,區間的用法還是比較多的,比如數列迭代等,這些我們後面會詳細講到

11.集合

集合在我們上面for迴圈的時候就已經出現過

    var a = listOf(1, 2, 3, 1)    for (b in a) {        print("$b \n")    }

集合的用處很廣泛,我們在後面還會細講,這裡舉一個例子:

    /**     * 有一堆水果和一堆投票員     * 每個投票員手中有1-3張票不等     * 且他們每個人只喜歡一種水果     * 如果投票員吃到的這個水果就會給你投票     * 如果總分超過5分     * 那你就順便合格     * 我們假設5個投票員,3個水果     * 請問他是否合格?     */    //放出3個水果    var fruit = listOf("香蕉", "蘋果", "西瓜")    //分數    var fractions = 0;    for (fr in fruit) {        if (fr is String) {            when (fr) {                "龍眼" -> {                    print("+1 \n")                    fractions = fractions + 1;                }                "香蕉" -> {                    print("+2 \n")                    fractions = fractions + 2;                }                "橘子" -> {                    print("+2 \n")                    fractions = fractions + 2;                }                "蘋果" -> {                    print("+2 \n")                    fractions = fractions + 2;                }                "西瓜" -> {                    print("+1 \n")                    fractions = fractions + 1;                }            }        }    }    //計算是否合格    if (fractions > 5) {        print("合格")    } else {        print("不合格")    }

我們先看下輸出結果

這個題出的有點粗糙,大家看的懂就行,意思就是我們只有三種水果給到三個喜歡吃的投票員,他會給我相應的分數,最後超過5分就合格,然後我們來分析下這個題目

首先我們定義了一個集合fruit來表示我當前的水果,然後我定義fractions來進行分數的累加,開始迴圈並且判斷誰喜歡吃,給幾分,最後判斷是否大於5,

題目很簡單,但是我們的邏輯也是從這裡開始萌發的

這些大概就是Kotlin的大致介紹了,實際上這門美麗的語言不止是這些內容,當你已經瞭解了這些之後,我們就可以進行下一個環節,正在的開始沒一個知識點的細講了

如果有興趣的話,可以來Github參與一下
  • Kotlin
我的公眾號,期待你的關注

查看評論

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.