目录
与数学里的函数不同,在仓颉中,函数是一个带有名字用于完成指定操作的代码块。(指定操作的代码块就初步的有了封装的思想,什么是封装,后面会给大家详细介绍)。
一、函数的定义
函数的结构:
func 函数名(参数1: 参数类型, 参数2: 参数类型, ...): 返回值类型{
函数体
}
代码如下:
package Study
func sayHi() {
println("你好!")
}
main(): Int64 {
return 0
}
注意:定义的sayHi()函数,没有参数,也没有返回值
什么是函数参数?
一个函数可以有0个到多个参数,参数分为:非命名参数和命名参数。
- 非命名参数函数:
package Study
func add(a: Int64, b: Int64) {
println("a + b = ${a + b}")
}
main(): Int64 {
return 0
}
- 命名参数:
package Study
func add(a!: Int64, b!: Int64) {
println("a + b = ${a + b}")
}
main(): Int64 {
return 0
}
注意:命名参数可以设置默认值
package Study
func add(a!: Int64 = 7, b!: Int64 = 8) {
println("a + b = ${a + b}")
}
main(): Int64 {
return 0
}
注意:命名参数和非命名参数可以组合使用,但是命名参数必须在非命名参数之后。
package Study
func add(a: Int64, b: Int64, c!: Int64) {
println("a + b = ${a + b}")
println("${c}: 在该函数里我是多余的")
}
main(): Int64 {
return 0
}
注意:在仓颉代码中,函数参数是不可变的。
错误代码如下:
package Study
func add(a: Int64, b!: Int64) {
a = a + 1
b++
println("a + b = ${a + b}")
}
main(): Int64 {
return 0
}
正确代码:
package Study
func add(a: Int64, b!: Int64) {
var m = a + 1
var n = b + 1
println("a + b = ${a + b}")
println("m + n = ${m + n}")
}
main(): Int64 {
return 0
}
什么是函数返回值呢?
函数的返回值是函数被调用后得到的结果的类型。
package Study
func add(a: Int64, b!: Int64): Int64 {
return a + b
}
main(): Int64 {
return 0
}
注意:return后跟函数返回值,且函数返回值类型必须与函数类型保持一致,与变量类型一样,函数类型也可以不写,有仓颉的编译器自动推断。
二、函数的调用和执行
定义函数后,只要不调用就不会执行,只有调用以后,才可以执行。
- 非命名参数函数的调用
package Study
func add(a: Int64, b: Int64): Int64 {
return a + b
}
main(): Int64 {
println(add(1,2))
return 0
}
- 命名参数函数的调用
package Study
func add(a!: Int64, b!: Int64): Int64 {
return a + b
}
func sum(a!: Int64 = 2, b!: Int64 = 3): Int64 {
return a + b
}
main(): Int64 {
println(add(a: 1, b: 2))
println(sum())
println(sum(a: 1, b: 2))
return 0
}
- 非命名参数函数和命名参数函数组合函数的调用
package Study
func add(a: Int64, b!: Int64 = 2): Int64 {
return a + b
}
main(): Int64 {
println(add(1))
println(add(1, b: 3))
return 0
}
函数执行过程:
程序会先找到函数定义的位置,然后将实际参数传递给函数的形式参数,接着执行函数体内的代码,最后同返回值跳转到函数调用的位置,执行后面的代码。函数体内的代码,依旧可以写顺序结构、分支结构和循环结构。
三、小结
本章为大家详细的介绍了仓颉编程语言中函数的定义、调用和执行的内容,下一章,为大家带来作用域、函数重载和递归函数的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!