kotlin中函数作为参数和函数作为返回值实例练习

本文详细探讨了Kotlin中如何处理函数作为参数、返回值,包括无返回值函数、带参数函数实例,以及在实际工作中的应用场景。通过实例代码解析,帮助开发者解决函数调用中的常见问题。

kotlin中函数作为参数和函数作为返回值,在工作中写代码有时会被卡住,怎么写都提示语法错误,今天专门研究一下几种常用的用法。

package com.example.test

import android.util.Log
import java.util.*

class KotlinSample {

    //直接定义函数

    //带参数,没有返回值的函数
    private var myPrint: (msg: String) -> Unit = { msg -> Log.e("xxx5",msg) }

    //带参数,参数为msg,有返回值的函数类型为Strnig
    private var hello : (msg: String) -> String = { "hello ${it.uppercase()}!!" }

    //getIntance返回一个函数,这个函数参数为空,返回值类型为ShoppingMallFloatView
    fun getInstance(context: Context): () -> ShoppingMallFloatView = {
            instance ?: synchronized(this) {
                instance ?: ShoppingMallFloatView(context).also {
                    instance = it
                }
            }

        }


    fun callMethods() {

        method1 {
            var hello = "hello world"
            Log.e("xxx1", hello)
            hello
        }

        method2 {
            var hello = "hello world"
            Log.e("xxx2", hello)
        }

        method3("hello world") { msg ->
            Log.e("xxx3", msg)
        }

        //函数作为返回值
        var method4 = method4("hello world")
        method4.invoke()

        //使用定义的函数
        myPrint.invoke("hello world")
        
        var greet = hello("zhang san")
        myPrint.invoke(greet)

        //参数为一个数字 加 一个函数
        test(2) { a: Int, b: Int ->
            var num = (a + b)*5
            num
        }
    }

    //函数作为参数,返回String 但是不需要return 直接将要返回的值放在最后一行
    private fun method1(method: () -> String) {
        method.invoke()
    }

    //函数作为参数,Unit表示没有返回值
    private fun method2(method: () -> Unit) {
        method.invoke()
    }

    //函数作为参数,有一个输入参数时。不能直接带给它,需要另外一个参数传进来。
    private fun <T> method3(msg1: T, method: (msg: T) -> Unit) {
        method.invoke(msg1)
    }


    //函数作为返回值
    private fun method4(str: String): () -> Unit {
        Log.e("xxx4", "这一部分不返回,直接运行")
        return {
            var strNew = str.uppercase(Locale.getDefault())
            Log.e("xxx4", strNew)
        }
    }

    fun test(a : Int , b : (num1 : Int , num2 : Int) -> Int) : Int{
            return a + b.invoke(3,5) //8
    }

}

运行结果:

2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx1: hello world
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx2: hello world
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx3: hello world
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx4: 这一部分不返回,直接运行
2022-07-28 11:05:04.308 20589-20589/com.example.test E/xxx4: HELLO WORLD
2022-07-28 11:05:04.309 20589-20589/com.example.test E/xxx5: hello world
2022-07-28 11:05:04.309 20589-20589/com.example.test E/xxx5: hello ZHANG SAN!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值