kotlin(六) 函数

本文详细介绍了Kotlin中的函数(function)和方法(method)的概念,强调两者在不同语言中的称呼差异。通过示例展示了函数的定义、参数、返回值、可变长参数、默认参数、具名参数、lambda表达式的使用以及函数引用。此外,还讲解了无参类型推断和带参类型推断的匿名函数以及如何将函数作为参数传递给其他函数。
摘要由CSDN通过智能技术生成

  函数(function)和方法(method)这两个概念经常被混淆,他们到底有什么关联和区别?其实,它俩没有什么区别只是不同语言叫法不一样,在Java中普遍叫方法。而在Kotlin中普遍叫函数。重点是:函数(function)和方法(method)是同一个东西,别搞错了。

函数定义使用关键字 fun,参数格式为:参数 : 类型

fun sum(a:Int ,b:Int ) :Int {  // Int 参数,返回值 Int

   return a+b

}

表达式作为函数体,返回类型自动推断:

fun sum(a:Int ,b:Int) =a+b 

public fun sum(a:Int,b:Int) :Int=a+b   // public 方法则必须明确写出返回类型

无返回值的函数Unit(类似Java中的void):

fun printSum(a:Int,b:Int) :Unit{

print(a+b)

}
// 如果是返回 Unit类型,则可以省略(对于public方法也是这样):
fun printSum(a:Int,b:Int){

print(a+b)

}

可变长参数函数

函数的变长参数可以用 vararg 关键字进行标识:

fun vars(vararg v:Int){
  for(vt in v){
     print(vt)
   }
}
//测试
fun main(args:Array<String)){
   vars(1,3,4,2,5)
}
  • 函数的参数默认值
    • 如果不打算传入值参,可以预先给参数指定默认值

  • 具名函数参数
    • 如果使用命名值参,就可以不用管值参的顺序(当参数过多的时候可以使用)

fun main() {
    println(doUserInfo("ShuaiCi", 18))
    //如果使用命名值参,就可以不用管值参的顺序
    println(doUserInfo(age = 6, name = "Kotlin"))
 
    //默认参数,可不传age
    println(doScUserInfo("Android"))
    //可传age
    println(doScUserInfo("Java",30))
}
 
private fun doUserInfo(name: String, age: Int): String {
    return "$name 今年已经$age 了哦"
}
 
//默认参数:预先给age指定默认值15
private fun doScUserInfo(name: String, age: Int = 15): String {
    return "$name 今年已经$age 了哦"
}

lambda(匿名函数)

lambda表达式使用实例:

定义 val 方法名:(类型)->返回类型={参数名 ->方法体,最后一句是返回值,}

匿名函数不需要return关键字来返回数据,匿名函数会隐式或自动返回函数体最后一行语句的结果

// 测试
fun main(args: Array<String>) {
    val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
    println(sumLambda(1,2))  // 输出 3
}
匿名函数参数只有一个 默认it
val lamber4:(Int)->String={
   
    "$it"
}

匿名函数可以不带参数,也可以带一个或多个任何类型的参数。

fun main() {
    //1、声明函数的输入() 输出String
    //2、实现函数
    val scFun :() -> String = {
        val name = "帅次"
        // 匿名函数不需要写retrun,最后一行就是返回值
        "$name 就是个战五渣"
    }

}

无参类型推断
        实践

    //无参类型推断
    val scFun4 = {
        val name = "帅次"
        // 匿名函数不需要写retrun,最后一行就是返回值
        "$name 无参类型推断"
    }


带参类型推断

    //带参类型推断
    val scFun5 = { age:Int,money:Float->
        val name = "帅次"
        // 匿名函数不需要写retrun,最后一行就是返回值
        "$name 带参类型推断 $age 岁啦,兜里$money"
    }
    println(scFun5(15,1.25f))

定义一个函数:参数是函数
        一个函数,作为另一个函数的参数。

      

fun main() {
    //2、声明函数
    val bookBeginner = {bookName:String,price:Double->
        "$bookName 定价为:$price"
 
    }
    //3、调用函数,传入函数bookBeginner
    learningAndroidBook("帅次",bookBeginner)
}
//1、定义一个函数(learningAndroidBook):参数是函数(bookPrice)
fun learningAndroidBook(name:String,bookPrice:(String,price:Double)->String){
    println("$name 来自 learningAndroidBook ")
    println(bookPrice(name,48.88))
}

简略写法
        一个函数的lambda参数排在最后,或者是唯一的参数,那么括住lambda值参的一对圆括号就可以省略。

fun main() {
    //4、简略写法(参数排在最后)
    learningAndroidBook("Kotlin 简略写法"){bookName:String,price:Double->
        "$bookName 定价为:$price"
    }
    //5、简略写法(唯一一个参数),()省略了
    learningAndroidBook2{bookName:String,price:Double->
        "$bookName 定价为:$price"
    }
}
//定义一个函数,参数是函数
fun learningAndroidBook2(bookPrice:(String,price:Double)->String){
    println(bookPrice("Kotlin 简略写法-唯一一个参数",48.88))
}

函数引用
        要把函数作为参数传给其他函数使用,除了传lambda表达式(匿名函数),kotlin还提供了其他方法,传递函数引用,函数引用可以把一个具名函数转换成一个值参,使用lambda表达式的地方,都可以使用函数引用。

        

fun main() {
    //6.2、函数引用
    learningAndroidBook("函数引用",::bookPriceName);
}
//6.1 定义具名函数
fun bookPriceName(bookName:String,price:Double):String{
    //具名函数这里要加return
    return "$bookName 定价为:$price"
}
//1、定义一个函数(learningAndroidBook):参数是函数(bookPrice)
fun learningAndroidBook(name:String,bookPrice:(String,price:Double)->String){
    println("$name 来自 learningAndroidBook ")
    println(bookPrice(name,48.88))
}

——————

函数返回类型为匿名函数

fun main() {
    //使用
    val funName = helloSc()
    println(funName(15))
}
//定义具名函数,返回类型为匿名函数
fun helloSc():(Int)->String{
    val name = "渣渣次"
    //返回的匿名函数,age传入的参数
    return {age->
        //匿名函数返回类型
        "$age 岁的$name"
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值