fn函数
函数是编程语言中的一个重要概念,由事件驱动或者当它被调用时执行的可重复使用的代码块。
在BT中,所有的语句都具有返回值,fn函数同样也是,默认会返回函数中最后一条语句的数据,当然你也可以在任何地方使用return返回数据,此时它会中断return
后面的所有语句执行。
// 这是一个简单的函数声明
fn add(a, b){
a + b
}
print add(1, 2)
// 如果你具有一定的编程基础,应该很理解`return`的使用,她用于返回数据,并中断后续的代码执行
fn add(a){
if a > 10 {
return '大于10'
} else {
return '小于10'
}
}
print add(20)
// 也可以使用赋值的方式声明函数,其实这个没啥意义,你喜欢就好,因为在bt中,上面的函数声明是可以重复声明的
add = fn(a){
return a
}
print add(123)
函数中的参数支持设置默认参数,如下:
// 给参数a和b添加默认参数
fn add(a=10, b=20){
a + b
}
print add() // 输出 30
print add(30) // 输出 50
print add(30, 40) // 输出 70
在编程语言中,函数声明大多使用function,也有使用func,而BT语言借鉴了母语Rust语言,延续使用了fn,我个人而言fn比func要好看,仅此而已。
而表达式的返回值也借鉴了Rust,以最后一条语句为返回值,使其更加简洁。
BT语言的函数使用和其他编程语言使用都一样,在这里作者需要跟大家说一声,BT语言的作用域借鉴了JS,所以函数之外的变量在函数内能正常访问,看下面的代码示例:
title = 'hello'
// 声明一个函数
fn set(){
title = 'world'
}
// 输出world,因为赋值也拥有返回值啊!就这么韧性
print set()
// 输出world,因为在set函数中被重新赋值了
print title
看到这里,你或许会有疑问,当我们定义一系列函数库时,那函数内的变量岂不是会污染全局变量?是的,是有这个风险,但BT语言既然这么设计,自然有其解决方案。
在函数中,当我们不需要读取外部变量或者需要再函数内的作用域中声明变量,那么我们使用关键字 let 声明即可。
title = 'hello'
// 声明一个函数
fn set(){
let title = 'world'
// 输出world
print title
}
set()
// 输出hello
print title
BT语言的作用域与JS一致,不过,你需要了解 let 关键字的具体用处,它主要用于在当前作用域中声明变量,而不污染外部变量,我们看一个复杂的。
title = 'hello'
// 声明一个函数
fn set(){
let title = 'world'
// 声明一个函数
fn demo(){
title = '你好'
let title = 'hi'
// 输出hi
print title
}
// 输出你好
print title
}
set()
// 输出hello
print title
很绕?你只需要知道在当前作用域中,未声明 let 的变量赋值,修改的是第一次声明所在的作用域,而使用 let 声明的变量,则会在当前作用域中重新声明,而不污染它所在作用域赋的值。
所以BT语言中,声明函数时,如果不需要污染外部变量,请用 let 关键字,若需要操作外部变量,则可以不用 let 关键字啦!