文档

主题 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. 1
    调用
    执行到 Area(4.5, 3)。
  2. 2
    参数
    Width 得到 4.5,Height 得到 3。
  3. 3
    运行
    函数体计算出 13.5。
  4. 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。

说出让程序易于维护的两个特点。查看答案

例如:有意义的标识符、注释、子程序、常量、一致的缩进。