Kt学习笔记(10)函数

文章目录

          • 一、基本用法
          • 二、使用中缀标记法调用函数
          • 三、单表达式函数
          • 四、函数参数和返回值
            • 4.1、可变参数
            • 4.2、返回值类型

一、基本用法

  Kt函数必须使用fun关键字开头,后面紧跟函数名,以及一对小括号,小括号是函数参数列表,如果函数有返回值,在小括号后面加冒号,冒号后面是函数返回值类型。


/**
 * 函数的标准定义
 */
fun double(x : Int) : Int{
    return 2 * x
}

在Kt中调用函数,函数名后面是小括号,小括号中是要传递的函数参数值

 var result = double(2)

如果是调用成员函数,需要使用点(.)

Sample().foo()  首先会实例化Sample,然后调用foo函数
二、使用中缀标记法调用函数

使用中缀标记法调用函数

  • 中缀标记法:就是将函数名称放在两个操作数中间,左侧是包含函数的对象或者值,右侧是函数的参数值
  • 中缀标记法函数满足条件
    1、成员函数或者拓展函数
    2、只有1个参数
    3、使用infix关键字声明函数
infix fun String.div(str : String) : String{
    return this.replace(str,"") //将当前字符串中的所有Str替换为“”
}

    var str = "hello world"
    //一般方法调用div函数
    println(str.div("l"))

    //使用中缀标记法
    println(str div "l")

    //中缀标记法连续使用
    println(str div "l" div "o")
三、单表达式函数
  • 单表达式函数
       如果一个函数的函数体只有一句语句,而且是return语句,可以省略函数体的打括号和return关键字。return后面的表达式可以直接写在函数声明的后面,用等号与函数声明分割。
fun triple(x : Int) : Int = x * 3

Kt编译器可以推断出等号右侧的表达式的类型,那么可以省略函数的返回值类型。

fun triple(x : Int) = x * 3
四、函数参数和返回值
4.1、可变参数

  一个函数的一个参数(一般是最后一个参数)可以标记为 vararg,这样会将该参数作为可 变参数处理。所谓可变参数,就是指可以任意多个参数,在函数内部,会按数组来处理这些参 数值。

/**
 * asList 函数是一个泛型函数,该函数只有一个参数,井且是可变参数
 * 该函数返 回 List类型。 
 * asList函数的功能是将一组值转换为 List对象,并返回该对象。
 */
fun <T> asList(vararg ts : T) : List<T>{
    val result = ArrayList<T>()
    for (t in ts){
        result.add(t)
    }
    return result
}

调用:

//由于 ts 是可变参数,因此可以传递任意多个参数值,并且可以是任意类型的。

/**在 asList 函数内部,类型为 T 的 vararg参数会被看作一个 T类型的数组,也就是说, asList 函数中的 ts变量的类型为 Array。*/
    var list = asList(1,2,"a",4,5)
    println(list)

  只有一个参数可以标记为 vararg。如果 V缸arg 参数不是函数的最后一个参数,那么对于 vararg参数之后的其他参数,可以使用命名参数语法来传递参数值,或者,如果参数类型是函 数,可以在括号之外传递一个 Lambda表达式。例如,下面的 asList 函数有 3 个参数,第 1 个 参数是可变参数,后两个是 valueI 和 value2 参数 。由于最后一个参数不是可变参数,因此在 传递 valueI 和 value2 参数的值时 需要使用命名参数

fun <T>  asList (vararg ts : T,value1 : Int,value2 : String) : List<T>{
    val  result = ArrayList<T>()
    for (t in ts)
        result.add(t)
    println("value1 = ${value1}  value2 = ${value2}")
    return  result
}

调用:

//使用命名参数传递value1  和value2参数的值
   var  list = asList(1,2,3 ,value1 = 2,value2 = "abc")
    println(list)

  调用一个存在 vararg 参数的函数时,我们可以逐个传递参数值,如 asList(l, 2, 3),或者, 如果我们已经有了一个数组,希望将它的内容传递给函数 ,可以使用展开( spread)操作符(在 数组之前加一个*):

val a = arrayOf(1,2,3)
val list= asList(-1, 0, *a, 4)
4.2、返回值类型

你可能感兴趣的:(Kotlin,Kt)