Kotlin 初学者函数(方法)

Posted 帅次

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 初学者函数(方法)相关的知识,希望对你有一定的参考价值。

作者简介:CSDN博客专家、华为云享专家认证

系列专栏:Kotlin 初学者

学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。

目录

函数

函数头

函数参数

Unit函数

Nothing类型

反引号中的函数名

使用空格和特殊字符对函数命名

Kotlin和Java互操作

拓展

匿名函数

it关键字

函数类型和隐式返回

匿名函数参数

类型推断

无参类型推断

带参类型推断

定义一个函数:参数是函数

简略写法

函数引用

函数返回类型为匿名函数


函数

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

函数头

        实践

fun main() 
    println(doUserInfo("ShuaiCi", 18))


private fun doUserInfo(name:String,age:Int):String
    return "$name 今年已经$age 了哦"

函数参数

  • 函数的参数默认值
    • 如果不打算传入值参,可以预先给参数指定默认值

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

        实践

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 了哦"

Unit函数

        无参数返回>默认返回Unit,可不写

        类似Java语言的void,只不过Unit是个单例类而不是关键字

        实践

fun main() 
    println(doUnit("ShuaiCi", 18))
    println(doUnit2("ShuaiCi", 18))

//无参数返回>默认返回Unit,可不写
//类似Java语言的void,只不过Unit是个单例类而不是关键字
private fun doUnit(name: String, age: Int):Unit 
    println("$name 今年已经 $age 了哦")

//不写:Unit 也一样一样的
private fun doUnit2(name: String, age: Int) 
    println("$name 今年已经 $age 了哦")

Nothing类型

        TODO函数的任务就是抛出异常,就是永远别指望它运行成功,返回Nothing类型。终止代码运行,不返回任何类型。你就就可以直接使用TODO()。

注意:不是注释提示,会终止程序的。

        实践

fun main() 
    println("-----start-----")
    TODO("终止程序")
    println("-----end-----")

        TODO函数

@kotlin.internal.InlineOnly
public inline fun TODO(reason: String): Nothing = throw NotImplementedError("An operation is not implemented: $reason")

反引号中的函数名

  • Kotlin可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来。(测试时可用)

  • 为了支持Kotlin和Java互操作,而Kotlin和Java各自却有着不同的保留关键字,不能作为函数名,使用反引号括住函数名就能避免任何冲突。

使用空格和特殊字符对函数命名

        实践

fun main() 
    `20211202 世界对称日`("公众号:帅次")

private fun `20211202 世界对称日`(name :String )
    println(name)

        这个提示是:Android项目中不允许使用标识符。不影响运行。

Kotlin和Java互操作

Java代码

public class Test 
    public static final void fun()
        System.out.println("来自Java的亲切问候");
    

Kotlin

fun main() 
    //使用空格和特殊字符对函数命名
    `20211202 世界对称日`("公众号:帅次")
    //Kotlin和Java互操作
    Test.`fun`()

报错情况

拓展

匿名函数

        定义时不取名字的函数,我们称之为匿名函数,匿名函数通常整体传递给其他函数,或者从其他函数返回。有了它,我们能够根据需要制定特殊规则,轻松定制标准库里的内置函数

    就代表匿名函数。

it关键字

        只有一个参数的匿名函数时,可以使用it关键字来表示参数名。当你需要传入两个值参,it关键字就不能用了。这里简单的了解一下,在后面的实践中使用。

函数类型和隐式返回

        函数的类型,由传入的参数和返回值类型决定

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

        实践

fun main() 
    //1、声明函数的输入() 输出String
    val scFun :() -> String
    //2、实现函数
    scFun = 
        val name = "帅次"
        // 匿名函数不需要写retrun,最后一行就是返回值
        "$name 就是个战五渣"
    
    //此处别忘记加(),这里是函数而不是属性
    println(scFun())

        然后你会发现在第一步下面有虚线,咱们操作一下。

        代码如下,更加简洁了

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

匿名函数参数

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

        需要带参数时参数的类型放在匿名函数的类型定义中参数名放在函数定义中

实践

fun main() 
    //带参数
    val scFun2: (Int) -> String =  age ->
        val name = "帅次"
        // 匿名函数不需要写retrun,最后一行就是返回值
        "$name 就是个战$age 渣"
    
    println(scFun2(16))

        这里是一个参数咱们尝试使用一下it关键字

        it关键字实践

        看 1 处,还有警告:这里的it代表传入的Int。

        当这里的传入参数变成多个时,it就无法使用了。

类型推断

        定义一个变量时,如果已把匿名函数作为变量赋值给它,就不需要显示指明变量类型。

无参类型推断

        实践

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

带参类型推断

        实践

    //带参类型推断
    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、简略写法(唯一一个参数),()省略了
    learningAndroidBook2bookName: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"
    

以上是关于Kotlin 初学者函数(方法)的主要内容,如果未能解决你的问题,请参考以下文章

将接口从片段传递到kotlin中的活动

Kotlin - 如何将空值传递给片段 newInstance 方法?

Android 上的 Kotlin:如何在片段中使用数据库中的 LiveData?

Kotlin系列之letwithrunapplyalso函数的使用

Kotlin 初学者函数式编程

Kotlin 初学者函数式编程