函数
函数(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是个单例类而不是关键字
实践
1.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`() }
报错情况