Kotlin语法学习(下)

前言

之前写过一篇Kotlin语法学习(上)https://blog.csdn.net/weixin_43615488/article/details/105952090,讲述的是kotlin的基础语法,这篇主要将kotlin的其他一些特性及用法

1. 标准函数with、run和apply

(1)with函数接收两个参数,第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式的最后一行代码作为返回值返回

fun main(){
    val list = listOf("Apple","Banana","Pear","Orange")
    val result=with(StringBuilder()){
        append("Start eating fruits.\n")
        for(fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits.")
        toString()
    }
    println(result)
}

(2)run不能单独使用,需要某个对象调用run,run函数只接收一个Lambda参数,并会在Lambda表达式中提供调用对象的上下文,并使用Lambda表达式的最后一行代码作为返回值返回,这点和with函数一样

un main(){
    val list = listOf("Apple","Banana","Pear","Orange")
    val result=StringBuilder().run{
        append("Start eating fruits.\n")
        for(fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits.")
        toString()
    }
    println(result)
}

(3)apply函数和run类似,只是apply无法指定返回值,会自动返回对象本身

fun main(){
    val list = listOf("Apple","Banana","Pear","Orange")
    val result=StringBuilder().apply{
        append("Start eating fruits.\n")
        for(fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits.")
    }
    println(result.toString())
}

2. 定义静态方法

(1)使用单例类,单例类中的方法即类似静态方法

object Util{
    fun doAction(){
        
    }
}

(2)用 companion object块

class Util{
   companion object{
       fun doAction(){
           
       }
   }
}

(3)顶层方法:顶层方法指那些没有定义在任何类中的方法,它们即是静态方法

3. 延迟初始化

private lateinit var adapter: AbstractThreadedSyncAdapter

延迟初始化使用的是lateinit关键字,它可以告诉Kotlin编译器,我会在晚些时候对这个变量进行初始化,所以就不用在一开始的时候将它赋值为null了,也避免使用的时候用?.去进行判空处理
::adapter.isInitialized可用于判断adapter变量是否已经初始化

4. 扩展函数

下面是实现String类的扩展函数lettersCount()

fun String.lettersCount():Int{
    var count=0
    for(char in this){
        if(char.isLetter()){
            count++
        }
    }
    return count
}

除此之外,kotlin还有许多高级语法,像“密封类sealed class”、“运算符重载”、“高阶函数”、“泛型”、“委托”、“协程”等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章