今天我们来了解一个新的概念-函数,你可能已经在数学课上学过,数学意义上的函数指的是从一个集合到另一个集合到映射,反应的是从一个集合如何转化到另一个集合的转化关系,但是这不是编程意义上的函数,从编程的角度来说,一个函数指的是一段代码集合,或者一个子程序,通常由 4 部分组成,分别是
- 函数名
- 输入参数
- 输出参数
- 函数体
函数是一个具体算法的封装,可以有0个到多个输入参数,可以有0条(即空函数)到多条程序指令组成的函数体,通常来说,一个函数只有0个(即没有返回值)或一个输出参数(即一个返回值),但是有些编程语言也支持多个输出参数(即多个返回值),比如 python
函数的作用
通常来说,函数的作用有两点
- 便于理解
- 可重用
有时候程序很长,我们希望把程序拆解成几个短的代码段,每一代码段完成一件事情,这个时候就可以用到函数,给函数起一个有意义的名字,可以帮助我们更容易的理解函数完成了什么工作
函数的另一个作用是重用,假设我们写了一个计算直角三角形斜边长度的算法,对两个数字先算平方,再加和,再算平方根,即

我们只要改变 x 和 y 的值,然后调用函数,就能算不同三角形的斜边长度啦,函数本身是不变的
变量作用域
提到了函数,就不得不提另外一个概念,变量的作用域,变量的作用域指的是一个变量的可见范围,一般来说有两种:
- 全局变量
- 局部变量
全局变量指的是一个变量是全局可见的,在程序中的任何地方都可以对这个变量进行读写操作
而局部变量则是指只在某个范围内可见的变量,比如一个变量只在一个函数里可见,出了这个函数的函数体,就找不到这个变量了,这就是局部变量
micro:bit 中的函数
在 micro:bit 中,函数模块会略显简陋,即没有输出参数,也没有输入参数,只有参数名和函数体,但是我们可以通过设置变量来模拟输入参数和输出参数,同时所有的变量作用域都是全局的,所以没办法体现局部变量的作用范围,还是通过一个例子来展示函数的定义和调用
函数模块位于 函数 分类下,只有两个模块,创建函数和调用函数

首先我们来定义一个函数,点击 创建一个函数 模块,它会弹出一个窗口,让我们填写函数的名字,这里我们要计算平方根,因此取名 pingfanggen

接着我们需要定义 3 个 变量,2 个用于输入参数,分别是 x 和 y,1 个输出参数 z

接下来我们来实现这个 pingfanggen 函数,我们要做的是
- 计算出 x 的平方,即 x * x
- 计算出 y 的平方,即 y * y
- 把 1 2 步的结果相加
- 求第 3 步结果的平方根
- 把第 4 步的结果赋值给 变量 z

接着我们来调用这个函数
- 在 当开机时 模块里,先分别设置 x 为 3, y 为 4,
- 拖动一个 调用函数 模块到 当开机时 模块里,注意选择 函数名为 pingfanggen
- 由于我们把计算结果放到了 变量 z 里,因此可以直接用 显示数字 模块把 z 的值输出到屏幕上

最后的执行结果:

思考题
通过尝试改变 x 和 y 的值,来看看输出的变量 z 的值有何变化
hex 文件可以从这里下载:
下载地址(请右键另存为)