Kotlin知识——函数

基础语法

普通函数

Kotlin 中声明一个函数的基本语法如下:

fun max(a: Int,  b: Int): Int{
    
    
	return if (a > b) a else b;
}

说明:

  • max 为参数名称
  • a 和 b 为参数列表
  • 花括号前的 Int 为函数返回类型,用 Unit 或者直接省略时表示函数返回类型为空

表达式函数体

当函数的函数体是由单个表达式构成的时候,可以省略花括号和 return 语句,示例如下:

fun max(a: Int, b: Int): Int = if (a > b) a else b

“静态函数”

与 Java 使用关键字来表示静态函数不同,Kotlin 的类不能拥有静态成员,而是使用伴生对象的概念,其具体实现示例如下:

companion object{
    
    
	fun max(a: Int, b: Int): Int = if (a > b) a else b
}

被 companion object 标记的成员与 Java 里的静态成员类似。

进阶使用

命名参数

对于下面的 test 函数:

fun test(a: String, b: String, c: String, d: String){
    
    }

普通调用方式是:

test("a", "b", "", "")

但是在函数参数较多时此种调用方式可读性较差,因此可以使用以下的调用方式:

test("a", "b", c = "", d = "")

注:通过显示地表明一些参数的名称可以提高代码可读性,但是在指明一个参数名称之后,该参数后面的所有参数都需要标明名称。

默认参数值

在 Kotlin 中可以通过给函数参数设置默认值来减少函数重载的情况,示例如下:

fun test(a: String = "",
		 b: String = "",
		 c: String = "",
		 d: String = ""){
    
    }

此时可以用所有参数来调用这个函数,也可以省略部分参数,示例如下:

test("a")
test("a", "b")
test("a", "b", "c")
test("a", "b", "c", "d")

顶层函数

顶层函数实际上类似于 Java 中的静态函数,示例如下:
在 test.kt 文件中有:

package mytest

fun test(a: String){
    
    }

其在 Java 中会被编译为以下代码:

/* Java */
package mytest;

public class TestKt {
    
    
	public static void test(String a){
    
    }
}

因此在 Java 中可以像调用静态函数一样调用此方法:

/* Java */
import mytest.TestKt;
...
TestKt.test("a"); 

修改文件类名

通过添加@JvmName注解可以修改包含 Kotlin 顶层函数的生成的类的名称,示例如下:
在 test.kt 文件中有:

@JvmName("MyFunction")
package mytest //包名写在注解之后
fun test(a: String){
    
    }

此时可以这样调用这个函数:

/* Java */
import mytest.MyFunction;
...
MyFunction.test("a"); 

扩展函数

扩展函数即是定义在类外面的类成员函数,示例如下:

package strings
fun String.lastChar(): Char = this.get(this.length - 1)

此处 String 为接收者类型,this 为接收者对象(可省略),此时即可像调用类的普通成员函数一样调用此函数。

导入扩展函数

  • 方法一:单个导入
import strings.lastChar
val c = "Kotlin".lastChar()
  • 方法二:整体导入
import strings.*
val c = "Kotlin".lastChar()
  • 方法三:使用关键字 as 来修改导入的类或者函数的名称
import strings.lastChar as last
val c = "Kotlin".lastChar()

在 Java 中调用扩展函数

假设上述函数声明在 StringUtil.kt 文件中,示例如下;

/* Java */
char c = StringUtilKt.lastChar("Java");

可变参数

可变参数即是让函数支持任意数量的参数,通过用 vararg 修饰符实现,示例如下:

fun listOf<T>(vararg values: T): List<T> {
    
    ...}

此时的参数个数可以为任意数量:

val list = listOf(2, 3, 5, 7)

当需要传递的参数已经包含在数组中时,要显示地解包数组,以便每个数组元素在函数中能作为单独的参数调用,具体实现方式是在对应的参数前面放一个 *,示例如下:

fun main(args: Array<String>) {
    
    
	val list = listOf("args: ", *args)
	println(list)
}

猜你喜欢

转载自blog.csdn.net/qingyunhuohuo1/article/details/111573174
今日推荐