Android Kotlin 从入门到精通(三、方法 Lambda表达式)

本文详细介绍了Kotlin中的方法调用,包括测试类中的@Test函数,普通类、静态类和伴生类的方法,具名参数的使用,变长参数处理,以及Lambda表达式的应用,如数组变换和forEachIndexed方法的示例。
摘要由CSDN通过智能技术生成

Kotlin 方法的使用

class demo2 {
    @Test
    fun main(){
        println("方法调用:${learn(4,7)}")
        println("普通类方法调用:${learn_class().learn(4,7)}")
        //静态类里面的方法,都是静态方法
        //不需要构建实例对象,可以通过类名,直接访问静态方法
        val result  = xxxUtil.double(10)
        println("静态类方法调用:${result}")
        //伴生类的使用
        learn_class.learn2()
    }

    //fun 方法名(变量名:变量类型,变量名:变量类型):返回类型{ return}
    fun learn(a:Int,b:Int):Int{
        return a*b
    }
}
//普通类
class learn_class{
    fun learn(a:Int,b:Int):Int{
        return a+b
    }
    //当我们想在一个普通类定义一个静态方法的话  不需要构建实例对象,可以通过类名,直接访问静态方法
    companion object{
        fun learn2(){
            println("伴生类调用")
        }
    }
}
//静态类 如果我们想实现一个util工具类,可以借助 关键字 object来创建一个静态类
object xxxUtil{
    fun double(a:Int,):Int{
        return a*2
    }
}

具名参数

class demo3 {
    @Test
    fun main(){
        read(1,3)
        //使用具名参数(指定参数名称传值) 只给b传参数 a默认为0
        read(b=3)

        //括号内
        read2(1,2, action = {
            //方法体中的最后一行,就是该方法的返回值
            val str = "hahaha"
            "括号内使用具名参数,传递action参数" //return 可以省略
        })
        //括号外
        read2(b=10,){
            "括号外传递action参数"
        }
    }


    //read中 a为默认参数(调用该方法是时没有给a传参数时默认为0)
    fun read(a:Int=0,b:Int){
        println("read方法:a=${a} b=${b}")
    }


    // a:int 他有一个默认值0
    // b:int 他没有默认值
    // 第三个参数是一个方法,参数名叫做,action:() 如果参数的类型是(),说明该参数是一个方法类型
    // 方法参数的返回值使用 ->String
    fun read2(a:Int=0,b:Int,action:()->String){
        val ret = action();
        println("read2:${ret}")
    }
}

变长参数

fun main(){

        val result = read3('1', '2', '3', '4')
        println("可变长参数调用 ${result}")

        val word = charArrayOf('w','o','r','d')
        val result2 = read3('h', 'e', 'l', 'l','o',',',*word) //*数组名 会将数组中元素依次传图
        println("可变长参数:${result2}")

        val result3 = read4('h', 'e', 'l', 'l','o',',',*word, sum = 100) //*数组名 会将数组中元素依次传图
        println("可变长参数(带其他参数,需使用具名参数传值:${result3})")
    }

    //可变的参数 Vararg 如果Vararg不是最后一个参数 可以使用具名参数语法传值
    fun read4(vararg str:Char,sum:Int):String{
        val result = StringBuffer()
        for (char in str){
            result.append(char)
        }
        result.append(sum)
        return result.toString()
    }

    //可变的参数 Vararg
    fun read3(vararg str:Char):String{
        val result = StringBuffer()
        for (char in str){
            result.append(char)
        }
        return result.toString()
    }

    

Lambda 表达式

class demo4_Lambda {
    @Test
    fun main(){
        //调用具有方法类型参数的方法
        val numbers = arrayOf(1,2,3,4)
        //具名参数低啊用,即使用参数名action给他赋值
        transfrom(numbers,action = {index,element ->
            index*element
        })
        for (num in numbers){
            println("transfrom:$num") //输出: 0,2,6,12
        }
    }

    //lambda 表达式作为方法中的参数的时候 定义transform方法,可以对数组中的元素进行变换
    //array :要求传入一个数组,元素类型为Int整数类型
    //action:要求传入的是一个方法,接收两个参数下标index,元素element。
    // 要求返回变换后的元素,会替换老得元素
    fun transfrom(array:Array<Int>,action:(index:Int,element:Int)->Int){
        for (index in array.indices){
            val newValue = action(index,array[index])
            array[index] = newValue
        }
    }
}

这个地方对新学者比较难理解,解释下运行流程

运行流程:

        1、将数组(1,2,3,4)传入transfrom中 

        2、在for循环中遍历,将数组的下标和值传入action方法中(index*element) 

        3、第一次循环 下标index为0 值为1  在action方法中1*0返回0赋值给newValue 

        4、再将array数组中下标为index 的位置替换成newValue中的值  直到循环结束

        5、这样得到的新数组array中的值为{0,2,6,12}

//与上面方法穿惨作用相同 省掉方法名称
transfrom(numbers) { index, element -> 
            index * element
        }

forEachIndexed方法

        val list = arrayListOf<Int>(1,2,3,4,5,6)
        //括号内输出
        list.forEachIndexed(action = {index: Int, element: Int ->
            println("forEachIndexed:${index}->${element}")
        })
        //括号外输出
        list.forEachIndexed { index, element ->
            println("forEachIndexed:${index}->${element}")
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值