【2025最新版Kotlin教程】Kotlin第一行代码系列第二课-函数和高阶函数
为什么要有函数,你可以想象我们写一个程序就好像工人建一个房子一样。工人身上的手和脚就相当是定义变量,工人会搬动砖头就相当函数,再给一些工具(程序也有工具类)就可以建房子了
函数就是方法,方法就是函数
- 变量的定义使用场景很明确,那什么时候定义函数呢
- 经验总结:行为,计算(也是一种行为),复用次数多
一、函数的定义
// 源码联系:893151960
fun main() {
//====================================函数的定义start==================
/**
* val var 变量
* fun是关键字,show是函数的名字,它是无参的所以(),{}内是方法体,就是方法里面要做什么功能或者说处理
*
* 声明:函数就是方法,方法就是函数。它们代表的是同一样的东西,没有任何区别,叫法不一样而已
*/
// 方式1:无参,无返回
// show()和show2()等价
fun show(){
println("我会跳舞")
}
fun show2():Unit{
println("我会跳舞")
}
// 方法2:有参,无返回
fun show(name:String){
println("${name}会跳舞")
}
// 方法3:有两个参数,你也可以继续加参数。无返回
fun show(name:String,age:Int){
println("${name}年龄${age}会跳舞")
}
// 方法4:带默认参数,调用时可不传sex参数
/**
* 经验总结,方法超过3个参数,建议竖着定义方法参数,调用也一样
*/
fun show4(
name: String,
age: Int,
sex: Int = 1
) {
println("${name}年龄${age}会跳舞")
}
show4(
"小白兔",
15)
// 方法5:带返回值的函数
/**
* 经验总结:看起来是不是像变量的定义 var showBack:String
* 有这个思想很好的,再学参数是方法就简单了
*/
fun showBack():String{
return "你好"
}
// 方法6:参数不允许为null
fun noneNullTest(s : String){
println(s)
}
// 方法7:参数允许为null
fun canNullTest(s:String?){
println(s)
//s为null,停止执行
s?.capitalize()
//s为null,抛异常
s!!.capitalize()
}
/**
* 选学内容:高阶函数
* 方法中参数是方法或者返回是方法就叫做高阶函数
* 它的使用场景:不用再声明各种接口回调了,直接用参数方法即可
*/
// 方法变量
var show:() ->String
show = ::showBack
val show2:(String)->Unit
show2 = ::show
// Lambda 就是函数的缩写
val me = { str:String ->
"233"
}
// 方法8:参数是一个参数为字符串,返回值是字符串的方法
// 是不是有点懵,其实它超级有用
fun showFun(method:(String) ->String):String{
val name = "小象"
return method(name)
}
showFun(me)
// 我们来看下showFun方法怎么调用
// (String) -> String
fun showBack2(name:String):String{
return "你好${name}"
}
val show3:(String) ->String
show3 = ::showBack2
// 第一:调showFun
println(showFun(show3))
// 第二:也可以直接用::showBack2
println(showFun(::showBack2))
// 第三:如果用Lambda,会更简单,你要记住Lambda就是函数的简写,它也是个函数
showFun {
"你好" //最后一行就是返回了
}
// 还有带接收者的高阶函数
fun showFunA(str:String.(Int) ->Unit){
"666".str(233)
}
// 调用
showFunA { index ->
println("这里是String的域,可以直接写String的方法,位置是${index}")
}
//====================================函数的定义end==================
}
二、参数是函数
fun main() {
//定义一个匿名函数
val showDiscount = { name:String,age:Int->
"方式一:${name}的年龄是${age}岁"
}
showOnBoard("小明",showDiscount)
//方式二:简略写法,直接在参数中定义,
//条件:1.是参数的最后一个参数;2.是唯一一个参数,两者满足其一即可使用该简略写法
showOnBoard("小明") { name: String, age: Int ->
"方式二:${name}的年龄是${age}岁"
}
//方式三:非最后一个参数写法
showOnBoard2({name:String,age:Int ->
"方式三:${name}的年龄是${age}岁"
},"小明")
//方式四:采用函数引用
showOnBoard("小明",::showMyFull)
}
private fun showMyFull(name: String,age:Int) = "方式四:${name}的年龄是${age}岁"
/**
* 参数为函数类型,作为最后一个参数
*/
private fun showOnBoard(name:String,showDiscount:(String,Int)->String){
val age = (10 .. 30).shuffled().first()
println(showDiscount(name,age))
}
/**
* 参数为函数类型,该非最后一个参数
*/
private fun showOnBoard2(showFullInfo:(String,Int)->String,name: String){
val age = (10 .. 30).shuffled().first()
println(showFullInfo(name,age))
}
三、返回值是函数
/**
*
* 返回值是函数类型
*/
fun main() {
val f = showOnBoard("小明")
println(f())
//nimingShowMethod 是 showMethod函数的返回值,这个返回值是一个函数
val nimingShowMethod = showMethod("Kotlin语言")
//nimingShowMethod是匿名函数
println(nimingShowMethod("yuknight", 25))
}
/**
* 参数为函数类型,作为最后一个参数
*/
private fun showOnBoard(name: String):()->String{
return {
val age = (10 .. 30).shuffled().first()
"返回值是函数类型:${name}的年龄是${age}岁"
}
}
//showMethod函数 返回一个匿名函数
fun showMethod(info:String):(String, Int)->String{
println("我是showMethod函数 info:$info")
//返回一个匿名函数
return { name:String, age:Int ->
"我就是匿名函数:我的name:$name,age:$age"
}
}
有兴趣的也可以看对应的视频教程:
[video(video-F3W9oJrq-1729561974143)(type-bilibili)(url-player.bilibili.com/player.html…)]
kotlin整个教程项目源码结构图:
有Android开发,鸿蒙开发需求问题或者完整源码的可以看简介联系我,也可以私信我,我每天都看私信的