Android Kotlin 基本語法4

不知道如何測試下列語法可以參考如何使用Android Studio 測試資料?

本篇

比較偏向一些小技巧的使用
  1. 為基礎類型新增函式
  2. Abstract技巧使用
  3. throw使用方法
  4. 利用let特性處理資料型態?
  5. 快速初始化Array
  6. 快速將兩個資料交換
  7. 自定義待處理的fun
  8. 幫loop設定標籤

  • 1. 為基礎類型新增函式
  • private fun String.clearSpace(): String = replace(" ", "")
    @Test
    fun test() {
        val string = "A B C D E F G".clearSpace()
        println("string = $string")//string = ABCDEFG
    }
    

  • 2. Abstract技巧使用
  • abstract class MyAbstractClass {
        var value: Int = -1
            set(value) {
                if(value > 0) {
                    field = value
                    success()
                } else {
                    field = -1
                    error()
                }
            }
        abstract fun success()
        abstract fun error()
    }
    @Test
    fun test() {
        val myObject = object : MyAbstractClass() {
            override fun success() {
                println("success")
            }
    
            override fun error() {
                println("error")
            }
        }
        myObject.value = -1//打印error
        myObject.value = 1//打印success
    }
    

  • 3. throw使用方法
  • fun setValue(data: Any?) {
        if(data is Int) {
            println("data is Int: $data")
        } else {
            throw NumberFormatException("data is not Int")
        }
    }
    
    @Test
    fun test() {
        val data = "data String"
        var result = false
        try {
            println("try")//1.先打印此
            setValue(data)
            result = true
        } catch (e: NumberFormatException) {
            println("catch")//2.再來此
            e.printStackTrace()
        } finally {
            println("finally")//3.再來此
            //此處無論是經過try還是catch,之後都會先經過這
        }
        println("result $result")//4.result false
    }
    

  • 4. 利用let特性處理資料型態?
  • var data: String? = "Apple"
    var data2: String? = null
    @Test
    fun test() {
        data = data?.let {
            "transform $data"
        } ?: "error A"
        data2 = data2?.let {
            "transform $data"
        } ?: "error B"
        println("data = $data, data2 = $data2")
        //data = transform Apple, data2 = error B
    }
    

  • 5. 快速初始化Array
  • fun initIntArray(size: Int): IntArray {
        return IntArray(size).apply { fill(-1) }
    }
    fun initBooleanArray(size: Int): BooleanArray {
        return BooleanArray(size).apply { fill(false) }
    }
    @Test
    fun test() {
        val array = initIntArray(5)
        array.forEach { println(it) }
        /*
        -1
        -1
        -1
        -1
        -1
         */
        val array2 = initBooleanArray(5)
        array2.forEach { println(it) }
        /*
        false
        false
        false
        false
        false
         */
    }
    

  • 6. 快速將兩個資料交換
  • @Test
    fun test() {
        var a = 1
        var b = 2
        a = b.also {
            b = a
        }
        println("a = $a, b = $b")//a = 2, b = 1
    }
    

    7. 自定義待處理的fun

    fun calcTaxes(): BigDecimal = TODO("test TODO")
    @Test
    fun test() {
        //會拋出下方
        //kotlin.NotImplementedError: An operation is not 
        //implemented: test TODO
        calcTaxes()
    }
    

    8. 設定return標籤

    @Test
    fun test() {
        loop@ for (i in 1..5) {
            for (j in 1..5) {
                if (i == 2 && j == 2) break@loop
                println("i = $i, j = $j")
            }
        }
        /*
        i = 1, j = 1
        i = 1, j = 2
        i = 1, j = 3
        i = 1, j = 4
        i = 1, j = 5
        i = 2, j = 1
        */
    }
    @Test
    fun test2() {
        listOf(1, 2, 3, 4, 5).forEach {
            if (it == 3) return 
            // non-local return directly to the caller of foo()
    
            print(it)
        }
        println("this point is unreachable")
        //打印12
    }
    @Test
    fun test3() {
        listOf(1, 2, 3, 4, 5).forEach lit@{
            if (it == 3) return@lit 
    
            print(it)
        }
        println(" done with explicit label")
        //打印1245 done with explicit label
    }
    @Test
    fun test4() {
        listOf(1, 2, 3, 4, 5).forEach {
            if (it == 3) return@forEach 
    
            print(it)
        }
        println(" done with implicit label")
        //打印1245 done with explicit label
    }
    


    上面皆是版本ext.kotlin_version = “1.5.0″測試的


    更多相關可以參考這裡


    相關文章

    Android Kotlin 基本語法1Android Kotlin 基本語法2
    1. var 可變變數
    2. val 不可變更參數
    3. Array 用法
    4. ArrayList 用法
    5. List的filter、sort、map、forEach
    6. when 用法
    7. fun 函式用法
    8. if 表達式
    9. for 表達式
    10. 擴充函數(自定義函式)
    1. 操作符重載
    2. 資料區間用法
    3. map使用方法
    4. 內部靜態變數
    5. 靜態變數
    6. 當資料如果是?型態宣告
    7. 資料使用!!,強制將Int?轉Int
    8. data class用法
    9. 強制轉型
    10. run、with、apply、also用法
    Android Kotlin 基本語法3Android Kotlin Classes and Objects-1
    1. class多建構式
    2. 內部class用法
    3. interface
    4. enum class 用法
    5. sealed class 用法
    6. open 用法
    1. 多個class與執行順序
    2. init與constructor執行優先序
    3. open繼承與禁止繼承
    4. 不同的寫法,影響override能不能改變值
    5. 繼承與當前Class執行順序
    6. 由inner class去找parent的super
    7. 繼承多個class時,選擇指定的Parent
    8. private protected public internal修飾符差異
    Android Kotlin Classes and Objects-2Android Kotlin 委託屬性
    1. 幫List新增swap功能
    2. 擴充外加函式,幫助程式簡化
    3. T,多類型引入
    4. T搭配in、out使用
    5. 1個對象的object用法
    6. 類型別名
    7. 內聯類
    8. 委託
    1. 變數委託
    2. lazy懶加載用法+String.split
    3. 可觀察屬性observable
    4. 委託內建map
    5. 本地委託屬性,此方法可以減少加載
    6. 委託屬性,唯獨與可讀可寫的方法
    7. 將舊方法棄用

    訂閱Codeilin的旅程,若有最新消息會通知。

    廣告

    發表迴響

    在下方填入你的資料或按右方圖示以社群網站登入:

    WordPress.com 標誌

    您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

    Twitter picture

    您的留言將使用 Twitter 帳號。 登出 /  變更 )

    Facebook照片

    您的留言將使用 Facebook 帳號。 登出 /  變更 )

    連結到 %s

    WordPress.com.

    向上 ↑

    %d 位部落客按了讚: