包定义:
代码文件以包声明开始:
包名不必和文件夹路径一致:源文件可以放在任意位置。
更多包设置,https://love2.io/@meiritugua/doc/kotlin-in-chinese/Basics/Packages.md
函数定义:
在 kotlin 中用关键字 fun
声明函数:
定义一个函数接受两个 int 型参数,返回值为 int :
fun add(a: Int, b: Int): Int{ return a + b }
//只有一个表达式作为函数体,以及自推导型的返回值: fun add(a:Int,b:Int) = a+b;
//返回一个没有意义的值: fun printSum(a: Int, b: Int): Unit { println("sum of $a and $b is ${a + b}") } //Unit 的返回类型可以省略: fun printSum1(a: Int, b: Int) { println("sum of $a and $b is ${a + b}") }
调用函数有两种方法:
1.通过传统的方法调用函数
val result = add(2,3)
2.通过.
调用成员函数
Sample().foo() // 创建Sample类的实例,调用foo方法
中缀符号
在满足以下条件时,函数也可以通过中缀符号进行调用:
它们是成员函数或者是扩展函数
只有一个参数
使用infix
关键词进行标记
参数
函数参数是用 Pascal 符号定义的 name:type。参数之间用逗号隔开,每个参数必须指明类型
printSum(a: Int, b: Int)
默认参数
函数参数可以设置默认值,当参数被忽略时会使用默认值。这样相比其他语言可以减少重载。
fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size ) {
...
}
默认值可以通过在type类型后使用=
号进行赋值
命名参数
在调用函数时可以参数可以命名。这对于那种有大量参数的函数是很方便的.
下面是一个例子:
fun reformat(str: String, normalizeCase: Boolean = true,upperCaseFirstLetter: Boolean = true,
divideByCamelHumps: Boolean = false,
wordSeparator: Char = ' ') {
...
}
我们可以使用默认参数
reformat(str)
然而当调用非默认参数是就需要像下面这样:
reformat(str, true, true, false, '_')
使用命名参数我们可以让代码可读性更强:
reformat(str,
normalizeCase = true,
uppercaseFirstLetter = true,
divideByCamelHumps = false,
wordSeparator = '_'
)
如果不需要全部参数的话可以这样:
reformat(str, wordSeparator = '_')
注意,命名参数语法不能够被用于调用Java函数中,因为Java的字节码不能确保方法参数命名的不变性
变长参数
函数的参数(通常是最后一个参数)可以用 vararg 修饰符进行标记:
函数更多使用:https://love2.io/@meiritugua/doc/kotlin-in-chinese/FunctionsAndLambdas/Functions.md