欢迎来到结构化程序设计!

你有没有试过在没有计划的情况下,一次性制作一个大型的多层蛋糕?那一定会是一场灾难!程序设计也是一样。当程序变得庞大时,我们需要把它们拆解成更小、更容易处理的“组件”。在本章中,我们将学习如何使用子程序 (subroutines) 来让代码变得井然有序、可重复使用,并且更易于调试。别担心,即使起初听起来有点技术性,但在读完这些笔记后,你就会像专业架构师一样构建程序了!

1. 什么是子程序?

子程序 (subroutine) 是一段具备名称且执行特定任务的代码块。你可以把它想象成主程序中的一个“微型程序”。与其反复编写相同的代码,不如将其写在子程序中,每当需要时“调用 (call)”它即可。

你需要了解两种主要的子程序类型:

1. 过程 (Procedures): 执行任务,但不一定会将数值传回给主程序。
2. 函数 (Functions): 执行任务,并将一个数值回传 (return) 给调用它的程序部分。

我们该如何使用它们?

在考试中,你应该知道子程序被描述为“外连 (out of line)”。这意味着代码位于主程序流程之外。你只需在程序语句中写下子程序的名称,即可调用 (call)(执行)该子程序。

现实生活中的类比: 想象一个机器人上方的“冲茶 (MakeTea)”按钮。每次你想喝茶时,都不需要告诉机器人每一个步骤(烧水、拿杯子、放入茶包)。你只需按下“冲茶”按钮。按钮就是调用 (call),而机器人内存中的操作步骤就是子程序
快速回顾:子程序的优点

易于阅读: 主程序变得更短、更简洁。
可重复使用: 你可以在程序的不同部分多次使用同一个子程序。
易于测试: 你可以一次测试一个小型子程序,确保其运作完美。
团队合作: 不同的程序员可以同时开发不同的子程序。

重点总结: 子程序是结构化代码的基石。它们能节省时间,并防止出现“意大利面条式代码 (spaghetti code)”(即杂乱、令人困惑的指令)。

2. 参数 (Parameters):传入数据

有时子程序需要信息才能完成任务。例如,如果你有一个名为 CalculateArea(计算面积)的子程序,它需要知道图形的长度和宽度。我们使用参数 (parameters) 来传递这些信息。

参数 (parameter) 是一种特殊的变量,用于将数据传入子程序。你可以有一个参数,也可以有很多个!

示例: 在子程序调用 CalculateArea(10, 5) 中,数字 105 就是被传递到参数中的数据。

你知道吗? 在考试中,你可能会听到“实参 (argument)”这个词。别让它搞糊涂了!老师和程序员有时会将“实参”用于实际传递的值,而将“参数”用于子程序内部的变量名称,但 AQA 会将参数一词同时涵盖两者。

重点总结: 参数就像是你子程序的“输入”,让它每次被调用时都能处理不同的数据。

3. 回传值 (Return Values):传出数据

如果说参数是将数据带入子程序,那么回传值则是将数据带出。这就是将过程转变为函数 (function) 的关键。

当子程序完成任务后,它可以透过 RETURN 关键字将结果“送回”给主程序。这个结果随后可以存储在变量中,或用于计算。

咖啡机类比: 你放入水和咖啡豆(参数)。机器执行“冲泡 (Brew)”子程序。最后,它给你一杯咖啡(回传值)。
逐步说明:函数是如何运作的

1. 主程序调用函数并提供参数
2. 函数使用这些参数执行其代码。
3. 函数执行到 RETURN 语句。
4. 数值被送回,函数结束。

重点总结: 当你需要子程序进行计算并回传答案时,请使用函数

4. 局部变量 (Local Variables) 与作用域 (Scope)

当你在子程序内部创建变量时,它被称为局部变量 (local variable)。这对于 AQA 课程大纲来说是一个非常重要的概念。

是什么让变量成为“局部”变量?

• 它们仅在子程序实际执行时存在。
• 它们只能在该特定的子程序内部被访问。

为什么使用局部变量是“良好习惯”?

你可能会觉得无法从主程序中看到局部变量很不方便,但这实际上是一种安全功能!
1. 防止干扰: 你不必担心意外地更改了主程序中名称相同的变量。
2. 节省内存: 由于变量会在子程序结束后立即删除,这能释放电脑 RAM 中的空间。

常见错误: 试图在子程序之外使用局部变量。这会导致错误,因为程序的其他部分并不知道该变量的存在!

重点总结: 尽可能保持变量为“局部性”。这能让你的代码保持“封装 (encapsulated)”(即自包含且安全)。

5. 结构化方法 (Structured Approach)

程序设计的结构化方法是一种处理大型问题的方法,透过拆解 (decomposition) 将其划分为更小、更具逻辑性的模块(子程序)。

结构化程序设计的特征:

模块化 (Modularization): 将程序拆解为子程序。
局部变量: 使用仅在需要时才存在的变量。
参数与回传值: 使用清晰的“接口”在模块之间传递数据。
文档化接口: 明确定义每个子程序需要什么(参数)以及提供什么(回传值)。

结构化方法的优点

易于调试: 如果出现错误,你可以准确指出是哪一个子程序出了问题。
可维护性: 更新或更改程序的一部分要容易得多,而不必担心破坏其他部分。
团队合作: 在现实世界中,可能有 100 个人共同编写一个程序。结构化程序设计允许他们分别处理能完美拼凑在一起的独立模块。

记忆小技巧: 想象一下 LEGO (乐高)。每一块积木都是一个子程序。它们是独立的,拥有特定的形状(接口)来与其他积木连接,你可以将它们组合起来,构建出庞大且复杂的结构!

重点总结: 结构化程序设计意味着成为一个整洁且有逻辑的程序员。它能让你的程序变得强健且专业。

快速复习测验(心智检查!)

• 你能解释参数和回传值之间的区别吗?
• 为什么使用局部变量比全局变量更好?
• 将程序“拆解”成子程序的主要好处是什么?

(答案:参数用于传入,回传值用于传出;局部变量更安全且节省内存;子程序使代码可重复使用且易于测试!)