kotlin學習三:初步認識kotlin(第二篇)

上一章熟悉了kotlin基本的變量和函數聲明,並明白瞭如何調用函數。本章再來看一些其餘有用的東西java

包括:dom

  1. kotlin代碼組織結構ide

  2. when語法函數

  3. 循環迭代語法學習

  4. try表達式spa

1. 代碼組織結構

和JAVA同樣,kotlin也可使用"包"來組織代碼文件,和JAVA的語法同樣,使用package定義包,使用import導入包code

可是也有許多不一樣,例如JAVA中一般包名就對應了類文件的存放路徑,好比package cn.java.ch1下有一個User類,那麼blog

對應的Java源文件名應該叫User,位於cn/java/ch1這個文件夾下。可是kotlin沒有這個要求,文件名你能夠隨便起。字符串

文件也能夠隨便放,文件內想定義幾個類,或者是沒有類,直接定義頂級函數,都隨你。基本沒有任何限制get

同一個包下的定義的函數,屬性等能夠直接在其餘文件中使用,不一樣包的若是須要引用,則須要使用import語句,語法和JAVA同樣

經過一個例子來看一下:

package action.kotlin.ch2

import java.util.*

/**
 * Created by user on 2017/10/9.
 */
class Rectangle(val height: Int, val width: Int) {
    val isSquare: Boolean
    get() = height == width
}

fun createRandomRectangle(): Rectangle {
    //使用Java的Random類,須要導包
    val random = Random()
    return Rectangle(random.nextInt(), random.nextInt())
}

fun main(args: Array<String>) {
    val rectangle = createRandomRectangle()
    val square = rectangle.isSquare
    println(square)
}

上邊的代碼中,函數createRandomRectangle使用了Random類,須要導入java.util包

在另一個包下新建文件,內容以下:

package action.kotlin.ch2.example

import action.kotlin.ch2.Rectangle

/**
 * Created by user on 2017/10/9.
 */
fun main(args: Array<String>) {
    val rectangle = Rectangle(20, 20)
    println(rectangle.isSquare)
}

這個文件和上邊的文件不在同一個包,所以用到另外一個包中的類時,須要使用import語句進行導入。一樣能夠導入另外一個文件的頂級函數

用法和JAVA基本是一致的。

2. when語法和枚舉

首先建個文件,聲明一個枚舉類型,來講明when語法的使用

enum class Color(val r: Int, val g: Int, val b: Int) {
    RED(255, 0, 0), ORANGE(255, 165, 0),
    YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
    INDIGO(75, 0, 130), VIOLET(238, 130, 238);
    //fun rgb() = (r * 256 + g) * 256 + b
}

fun getMnemonic(color: Color) =
    when (color) {
        Color.RED -> "Richard"
        Color.ORANGE -> "Of"
        Color.YELLOW -> "York"
        Color.GREEN -> "Gave"
        Color.BLUE -> "Battle"
        Color.INDIGO -> "In"
        Color.VIOLET -> "Vain"
}

fun main(args: Array<String>) {
    val color = getMnemonic(Color.BLUE)
    println(color)
}

enum是關鍵字,聲明枚舉類型使用的。類名後邊的括號中是構造參數,先明白那個是構造就夠了,後續的文章中關於類的學習部分會詳細說的

這裏的意思就是聲明瞭一些枚舉值,並使用構造函數中的參數來賦值枚舉項

getMnemonic函數,須要一個Color類型的枚舉值,根據枚舉值不一樣返回不一樣的字符串給調用方

main函數調用getMnemonic函數,傳遞Color.BLUE,函數會返回對應的Battle,這裏主要看when的語法結構

when後的括號中是你要判斷的參數,when的大括號體內就是一個個的分支判斷了。因此不用when,咱們也可使用if判斷來代替。

至於箭頭語法,相信用過JDK8的應該不陌生,就是所謂的lambada表達式了。整個語法和JAVA中的switch case很像,可是明顯的區別就是when語法不須要break

若是如今我想讓參數爲Color.BLUE和或者Color.GREEN時,返回同樣的字符串,該如何作?很簡單

Color.GREEN, Color.BLUE -> "Gave"
改爲這樣便可,多個判斷分支使用逗號隔開,就是這麼簡單

 

去掉枚舉的類名前綴,直接使用枚舉常量:

若是不想帶Color前綴,也簡單,首先導入枚舉類。導入語句以下:

import action.kotlin.ch2.enumtest.Color.*

而後when的判斷中直接寫:

GREEN, BLUE -> "Gave"

無需再帶Color前綴了。

關於when的分支判斷,還有一些組合使用方式,這裏很少說了,之後用到會介紹

3. 迭代循環:

kotlin支持while和do while循環,這兩種形式的循環迭代和JAVA中的寫法沒有區別,參考JAVA的便可

3.1 範圍操做符

kotlin中有一個名爲範圍操做符的東西。寫做:.. 兩個點,例如我想聲明一個變量,這個變量包含數字1到10,能夠以下聲明:

val oneToTen = 1 .. 10

接着可使用for,while等循環語句來迭代訪問,以for循環爲例:

for(i in oneToTen) println(i)

上邊for循環就是kotlin中for循環的語法,使用 for(var in collections)的語法來進行for迭代

3.2 downTo語法:

kotlin提供了downTo關鍵字用來反向迭代,例子:

for(i in 100 downTo 1 step 1) print("$i ")

反向迭代一百次,每次輸出迭代的值,downTo指定從100迭代到的下限值,step指定了迭代的步階

4. kotlin中的異常:

4.1 拋出異常:

fun main(args: Array<String>) {
    test(500)
}
fun test(percentage: Int) {
    if (percentage !in 0..100) {
        throw IllegalArgumentException(
                "A percentage value must be between 0 and 100: $percentage")
    }
}

上述代碼的test函數檢測參數是否在0-100之間,若是不是拋出異常,能夠直接使用java中的異常類。語言和java也沒什麼不一樣

4.2 try catch finally

fun main(args: Array<String>) {
    val res = caculate(7, 0)
    println(res)
}
fun caculate(one: Int, two: Int): Int {
    var result: Int = 0
    try {
        result = one / two
    } catch (e: ArithmeticException) {
        println("Can't be divided by Zero. $e")
    }finally {
        //do something
    }
    return result
}

這個例子函數計算兩個數相除,除0引起異常,捕獲並做相應處理,和JAVA中也並無什麼不一樣,惟一的區別就是e: Exception

這裏遵循kotlin聲明變量的語法:變量名: 類型

相關文章
相關標籤/搜索