主题 8 · 编程
过程、函数与可维护的代码
编写带参数的可复用子程序,从函数返回值,理解局部变量和全局变量,并让代码易于维护。
第 5 课,共 7 课大纲 8.1更新于 2026年10月31日
为什么要用子程序?
子程序是一段有名字、只做一件事、可以在程序任何地方调用的代码。写一次、调用多次,让程序更短、更容易测试,也更容易修改。
子程序有两种。过程完成一项任务。函数完成一项任务并把一个值返回到调用它的地方。
过程
用 PROCEDURE ... ENDPROCEDURE 定义过程,用 CALL 运行它。传入的值叫作参数。
伪代码
PROCEDURE DrawLine(Size : INTEGER)
DECLARE Count : INTEGER
DECLARE Line : STRING
Line <- ""
FOR Count <- 1 TO Size
Line <- Line & "-"
NEXT Count
OUTPUT Line
ENDPROCEDURE
CALL DrawLine(10)
OUTPUT "Menu"
CALL DrawLine(10)函数
函数用 RETURNS 说明它返回的值的类型,并用 RETURN 把值送回去。因为它会返回一个值,所以函数要写在表达式中使用,而不是用 CALL。
- 1调用执行到
Area(4.5, 3)。 - 2参数
Width得到 4.5,Height得到 3。 - 3运行函数体计算出 13.5。
- 4返回13.5 替换这次调用,并存入
RoomArea。
伪代码
FUNCTION Area(Width : REAL, Height : REAL) RETURNS REAL
RETURN Width * Height
ENDFUNCTION
DECLARE RoomArea : REAL
RoomArea <- Area(4.5, 3)
OUTPUT "Carpet needed: ", RoomArea, " square metres"局部变量与全局变量
局部变量在子程序内部声明。它只在子程序运行时存在,不能在子程序外使用。DrawLine 中的 Count 和 Line 就是局部变量。
全局变量在主程序中声明,可以在任何地方使用,包括子程序内部。
考试提示: 优先使用局部变量和参数。只使用自己变量的子程序更容易测试和复用,也不会意外改动程序的其他部分。
编写可维护的程序
程序被阅读的次数远多于被编写的次数。让别人(或下个月的你)能轻松读懂和修改你的程序:
- 使用有意义的标识符:用
TotalScore而不是T。 - 用
//添加注释,解释代码为什么这样做。 - 使用过程和函数,让每一部分只做一件清楚的事。
- 对固定的值使用常量,并保持一致的缩进。
伪代码
// Works out the cost of a cinema trip
CONSTANT TicketPrice <- 8.5
DECLARE People : INTEGER
INPUT People
OUTPUT "Total cost: ", People * TicketPrice // before any discount关键术语
- 过程
- 完成一项任务、不返回值的子程序。
- 函数
- 返回一个值的子程序。
- 参数
- 调用子程序时传入的值。
- 局部变量
- 在子程序内声明、只能在其中使用的变量。
- 全局变量
- 在主程序中声明、任何地方都能使用的变量。
自我检测
过程和函数有什么区别?查看答案
函数返回一个值,过程不返回。
写出函数 IsEven 的首行:它接收一个整数并返回布尔值。查看答案
FUNCTION IsEven(Number : INTEGER) RETURNS BOOLEAN。
说出让程序易于维护的两个特点。查看答案
例如:有意义的标识符、注释、子程序、常量、一致的缩进。