美文网首页kotlin
Android Kotlin 高阶函数浅谈

Android Kotlin 高阶函数浅谈

作者: 水天滑稽天照八野滑稽石 | 来源:发表于2019-08-26 01:04 被阅读0次

    前言

    真香的东西,肯定是要吹爆的,这辈子已经离不开高阶函数了,所以来简单聊下

    何为高阶函数

    将函数用作一个函数的返回值来使用

    我们正常的函数使用的都是函数的返回值,就是基本数据类型或者自定义类型那些

    fun function1(name: String){}
    fun function2 (student: Student){}
    

    而高阶函数就是把整个函数丢进去,来看个小demo吧

    class MainActivity : AppCompatActivity() {
    
        private lateinit var myModel: MyViewModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            button1.setOnClickListener {
                higherFunction {
                    text.text = "xiao"
                }
            }
        }
    
        fun higherFunction(function: () -> Unit ){
            function.invoke()
        }
    }
    

    invoke

    好像有点意思哟~
    像这种把代码片段直接插入其他地方执行在java里面我们有两种写法
    抽象类

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val uitl = object : AbstractUitl(){
                override fun method(s: String): String {
                    return s
                }
            }
            text.setOnClickListener {
               text.text = uitl.deal("xiao")
            }
        }
    }
    abstract class AbstractUitl {
        fun deal(s: String): String{
            return method(s)
        }
        abstract fun method(s: String): String
    }
    

    接口回调

    class MainActivity : AppCompatActivity() {
    
        private lateinit var myModel: MyViewModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            button1.setOnClickListener {
                text.text = Until().deal(object : Impl {
                    override fun mothod(s: String): String {
                        return s
                    }
                }, "xiao")
            }
        }
    
        interface Impl {
            fun mothod(s: String): String
        }
    
        class Until {
            fun deal(impl: Impl, s: String): String {
                return impl.mothod(s)
            }
        }
    }
    

    写起来好麻烦啊...好多代码,可读性又差...你看高阶函数来写多香啊
    代码少又好看
    刚刚上面说提到高阶函数,就是高阶函数的用途的精髓之一了,invoke()这个方法作用是将传入的高阶函数执行

    语法规则

      //挺简单的用法
      fun higherFunction(function: () -> Unit ) { }
      fun higherFunction(fun2: (a:Int,b: String) -> String) { }
      
    

    其实用Kotlin来开发Android,官网很多地方也是这样写的,如:

    button1.setOnClickListener { }
    

    你看,This is高阶函数,其实也没多么难

    在Kotlin 里面,高阶函数还有这些常用的操作符,用来简化代码的书写(感觉常用就这2个)

    let

    在函数块内可以通过 it 指代该对象;返回值为函数块的最后一行或指定return表达式

    class Student{
        var name = "xiao"
        var age = 12
    }
    fun main(){
        var student = Student()
        var a = student.let {
                it.name
                it.age
            }
       //a = 12
    }
    fun main(){
        var student = Student()
        var a = student.let {
                it.name
                it.age
                return@let "name"
            }
       //a = "name"
    }
    

    apply

    在函数块内返回的传入对象的本身

    class Student{
        var name = "xiao"
        var age = 12
    }
    fun main(){
        var student = Student()
        var student.apply{
             age
             name
        }
    }
    

    相关文章

      网友评论

        本文标题:Android Kotlin 高阶函数浅谈

        本文链接:https://www.haomeiwen.com/subject/qqclectx.html