Procedures · 过程
A PROCEDURE is a named block
- A procedure is a named set of steps you run with
CALL. - Define it once, then call it as many times as you like.
PROCEDURE 是一个有名字的代码块
- 过程(procedure)是一组有名字的步骤,用
CALL来运行。 - 定义一次,就能想调用多少次就调用多少次。
PROCEDURE Greet
OUTPUT "Hello!"
ENDPROCEDURE
CALL Greet
CALL Greet // → Hello!(两次)
Parameters pass data in
- Put a parameter in brackets to send a value in.
参数把数据传进来
- 在括号里放一个参数,就能把一个值传进去。
PROCEDURE Greet(Name : STRING)
OUTPUT "Hi, ", Name
ENDPROCEDURE
CALL Greet("Ada") // → Hi, Ada
CALL runs it, then comes back · CALL 运行它,然后返回
CALL jumps into the procedure, runs its steps, then returns to the next line. · CALL 跳进过程,运行它的步骤,然后返回到下一行。
A parameter is a copy
- A parameter is a copy of the value you passed in.
- Changing it inside the procedure does not change the caller's variable.
- To get an answer back, use a FUNCTION and
RETURNit (next lesson).
参数是一个副本
- 参数是你传进来的值的副本。
- 在过程内部修改它,不会改变调用者的变量。
- 想把结果传回去,就用 FUNCTION 并
RETURN(下一课)。
FUNCTION Double(N : INTEGER) RETURNS INTEGER
RETURN N * 2
ENDFUNCTION
DECLARE X : INTEGER
X ← 5
OUTPUT Double(X) // → 10
Local and global
- A variable declared in the main program is global. A procedure can read it and change it.
- A variable declared inside the procedure is local. It hides a global of the same name, and it disappears when the call ends.
- A parameter is local too. It is a copy, so changing the parameter does not change the caller's variable.
局部变量与全局变量
- 在主程序里声明的变量是全局的。过程可以读取它,也可以修改它。
- 在过程内部声明的变量是局部的。它会挡住同名的全局变量,调用结束就消失。
- 参数也是局部的。它是一个副本,所以改参数不会改调用者的变量。
DECLARE Total : INTEGER
Total ← 10
PROCEDURE ShowLocal
DECLARE Total : INTEGER
Total ← 3
OUTPUT Total // → 3,局部的那个
ENDPROCEDURE
CALL ShowLocal
OUTPUT Total // → 10,全局的那个
Watch out
- You must write
CALLbefore a procedure's name — but never before a function's. - A procedure cannot hand a value back; that is what a FUNCTION is for.
- (
BYREFmakes a parameter the real variable rather than a copy. It is in the AS 9618 guide, not in the IGCSE 0478 syllabus for 2026–2028, so do not use it in Paper 2.)
注意
- 在过程名字前面必须写
CALL——但函数前面绝不写。 - 过程不能把值传回来,这正是 FUNCTION 的用途。
- (仅 AS 9618:
BYREF让参数成为真正的变量而不是副本。它不在 IGCSE 0478 的 2026–2028 考纲内, Paper 2 不要使用。)
Common mistakes
PROCEDURE Name(...) ... ENDPROCEDURE; run it withCALL name(...).- A procedure does a job but returns no value.
常见错误
PROCEDURE Name(...) ... ENDPROCEDURE;用CALL name(...)运行。- 过程完成工作,但不返回值。
Now you try
- Define a procedure, then
CALLit. - Press Check answer to test it.
现在轮到你
- 定义一个过程,然后
CALL它。 - 按检查答案来测试它。
Define a PROCEDURE Greet that outputs Hello!, then CALL it twice · 两次 (so Hello! prints on two lines). · 定义一个 PROCEDURE Greet,输出 Hello!,然后 CALL 它两次(于是 Hello! 打印两行)。
Click Run to see the output here. · 点击“运行”查看此处输出。
Define PROCEDURE Greet(Name : STRING) that outputs Hi, then the name, then CALL Greet("Ada"). Output should be Hi, Ada. · 定义 PROCEDURE Greet(Name : STRING),输出 Hi, 再接名字,然后 CALL Greet("Ada")。输出应为 Hi, Ada。
Click Run to see the output here. · 点击“运行”查看此处输出。
Define FUNCTION Double(N : INTEGER) RETURNS INTEGER that returns twice N. Set X to · 到 5, then output Double(X) (it should be 10). · 定义 FUNCTION Double(N : INTEGER) RETURNS INTEGER,返回 N 的两倍。把 X 设为 5,然后输出 Double(X)(应为 10)。
Click Run to see the output here. · 点击“运行”查看此处输出。
Total is a global INTEGER starting at 10. Inside PROCEDURE AddFive, add 5 to that same Total. After the call, output Total (it is 15). · Total 是全局 INTEGER,初值 10。在 PROCEDURE AddFive 里给同一个 Total 加 5。调用之后输出 Total(结果是 15)。
Click Run to see the output here. · 点击“运行”查看此处输出。