1. 程式人生 > >Kotlin學習筆記(二)——示例篇二

Kotlin學習筆記(二)——示例篇二

示例一

條件表示式

/**
 * `if` is an expression, i.e. it returns a value.
 * Therefore there is no ternary operator (condition ? then : else),
 * because ordinary `if` works fine in this role.
 * See http://kotlinlang.org/docs/reference/control-flow.html#if-expression
 */
fun main(args: Array<String>) {
    println(max(Integer.parseInt(args[0
]), Integer.parseInt(args[1]))) } fun max(a: Int, b: Int) = if (a > b) a else b

分析:以上程式碼最主要的是是max函式,這個函式表示式是一個很簡練的寫法,上一篇文章中提到過,只是將函式要返回的型別用賦值表示式表達了,Java類似的方法是這樣的

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

以上程式碼只加了個if-else語句

示例二

檢查是否可以為null

/**
 * A reference must be explicitly marked as nullable to be able hold a null.
 * See http://kotlinlang.org/docs/reference/null-safety.html#null-safety
 */
package multiplier // Return null if str does not hold a number fun parseInt(str: String): Int? { try { return Integer.parseInt(str) } catch (e: NumberFormatException) { println("One of the arguments isn't Int") } return null } fun main(args: Array<String>) { if
(args.size < 2) { println("No number supplied"); } else { val x = parseInt(args[0]) val y = parseInt(args[1]) // We cannot say 'x * y' now because they may hold nulls if (x != null && y != null) { print(x * y) // Now we can } else { println("One of the arguments is null") } } }

分析:以上程式碼主要的是函式parseInt();,如果字串str能轉換成Int,則返回正數,否則返回null,函式parseInt()的返回型別是 Int? ,這就是說如果是Int,就是Int,否則就是null,該函式接收null,用問好? 表示該引用可以接收null

示例三

用表示式檢查型別

/**
  * The `is` operator checks if an expression is an instance of a type and more.
  * If we is-checked an immutable local variable or property, there's no need
  * to cast it explicitly to the is-checked type.
  * See this pages for details:
  * http://kotlinlang.org/docs/reference/classes.html#classes-and-inheritance
  * http://kotlinlang.org/docs/reference/typecasts.html#smart-casts
 */
fun main(args: Array<String>) {
    println(getStringLength("aaa"))
    println(getStringLength(1))
}

fun getStringLength(obj: Any): Int? {
    if (obj is String)
        return obj.length // no cast to String is needed
    return null
}

分析:上述程式碼中,主要的方法是getStringLength(),如果任意型別Any的變數obj是String型別,則返回該字串的長度,否則返回null!該函式類似Java中的方法

int getStringLength(Object str){
       if (str instanceof String){
           return ((String)str).length();
       }
        return 0;
    }

在kotlin中, 使用is 來判斷是否是某一型別,Java中用instanceof來判斷

示例四

迴圈語句while和do..while的使用方法

/**
 * `while` and `do..while` work as usual.
 * See http://kotlinlang.org/docs/reference/control-flow.html#while-loops
 */
fun main(args: Array<String>) {
    var i = 0
    while (i < args.size)
        println(args[i++])
}

分析:以上程式碼,使用了while迴圈,進行陣列遍歷,並且i在遍歷的過程中進行自增長!

示例五

使用for迴圈進行遍歷

/**
 * For loop iterates through anything that provides an iterator.
 * See http://kotlinlang.org/docs/reference/control-flow.html#for-loops
 */
fun main(args: Array<String>) {
    for (arg in args)
        println(arg)

    // or
    println()
    for (i in args.indices)
        println(args[i])
}

分析:在Java中使用增強for迴圈的格式是for(Class class: Classes),而在kotlin中,使用for迴圈的格式是:`for(class in classes),不需要定義變數,通過使用in關鍵字,即指定了變數的型別和範圍!

示例六

以下程式碼主要用於檢查一個數是否在某一個範圍內,或者不在某一個範圍內,還可以檢查某一個物件是否在一個集合內!

/**
 * Check if a number lies within a range.
 * Check if a number is out of range.
 * Check if a collection contains an object.
 * See http://kotlinlang.org/docs/reference/ranges.html#ranges
 */

fun main(args: Array<String>) {
    val x = Integer.parseInt(args[0])
    //Check if a number lies within a range:
    val y = 10
    if (x in 1..y - 1)
        println("OK")

    //Iterate over a range:
    for (a in 1..5)
        print("${a} ")

    //Check if a number is out of range:
    println()
    val array = arrayListOf<String>()
    array.add("aaa")
    array.add("bbb")
    array.add("ccc")

    if (x !in 0..array.size - 1)
        println("Out: array has only ${array.size} elements. x = ${x}")

    //Check if a collection contains an object:
    if ("aaa" in array) // collection.contains(obj) is called
        println("Yes: array contains aaa")

    if ("ddd" in array) // collection.contains(obj) is called
        println("Yes: array contains ddd")
    else
        println("No: array doesn't contains ddd")
}

分析:以上程式碼主要是對in的使用,in可以檢查某個數是否在一個範圍裡,或者不在一個範圍裡;檢查一個物件是否在一個集合裡,不在一個集合裡!
程式碼中有幾個點第一次出現:

  1. arrayListOf的第一次使用
    在Java中,常用的ArrayList,在kotlin中,arrayListOf作用比較像,先看一下列表的建立和新增程式碼:
fun  arrayListTest(){
    var arrays=arrayListOf<String>()
    arrays.add("ddd")
    arrays.add("bbbb")
    arrays.add("addd")
    arrays.add("ccc")

}

看一下arrayListOf的函式說明:
**public fun arrayListOf(vararg values: T): ArrayList defined in kotlin
Returns a new ArrayList with the given elements.**,這下就明白arrayListOf的作用了,就是返回一個ArrayList集合元素
如何遍歷一個集合呢?

fun  arrayListTest(){
    var arrays=arrayListOf<String>()
    arrays.add("ddd")
    arrays.add("bbbb")
    arrays.add("addd")
    arrays.add("ccc")
    for(s in arrays){
        println(s)
    }
}

判斷某個元素是不是在集合中,使用in即可:

fun  arrayListTest(){
    var arrays=arrayListOf<String>()
    arrays.add("ddd")
    arrays.add("bbbb")
    arrays.add("addd")
    arrays.add("ccc")
    if("ccc" in arrays){
        println("在集合裡")
    }
    if("ddddddd" in arrays){
        println("不在集合裡")
    }
}

2 設定某個數值範圍的方法使用
如何寫從0到10的所有數呢?

fun rang(size : Int){
    for(b in 0..size){
        println(b)
    }
}

分析:數字0到10,可以這麼寫 0..10,中間加兩個點即可

示例七

when

/**
 * See http://kotlinlang.org/docs/reference/control-flow.html#when-expression
 */

fun main(args: Array<String>) {
    cases("Hello")
    cases(1)
    cases(System.currentTimeMillis())
    cases(MyClass())
    cases("hello")
}

fun cases(obj: Any) {
    when (obj) {
        1 -> println("One")
        "Hello" -> println("Greeting")
        is Long -> println("Long")
        !is String -> println("Not a string")
        else -> println("Unknown")
    }
}

class MyClass() {
}

分析:以上程式碼主要部分是cases()函式,該函式使用when作為條件語句,支援整數,字串,long,等判斷,有點類似Java中的switch,但是比switch功能強大!

以上只是通過程式碼分析,自己的理解和程式碼測試來學習的,如果有不正確地地方,非常感謝能指出來,先謝過!