为什么需要函数
本节阅读量:介绍完什么是函数及其基本功能后,这一节来仔细讲解函数为什么有用。
为什么使用函数?
新手经常会问,”不能把所有代码都放在main函数中吗?”对于简单的程序,绝对可以。然而,函数有许多好处,在较长或较复杂的程序中非常有用。
-
可组织性——随着程序功能增加,将所有代码放在main()中会变得越来越复杂。函数就像一个小程序,能独立于主程序编写,不必在编写时考虑程序的其余部分。它将复杂的程序简化为更小、更易于管理的模块,降低了程序管理的整体复杂性。
-
可重用性——一旦编写了函数,就可以在程序中多次调用。这避免了重复代码,并将复制/粘贴错误的概率降至最低。函数也可以与其他程序共享,减少了每次从头编写(并重新测试)的代码量。
-
可测试性——由于函数减少了代码冗余,需要测试的代码更少。此外,因为函数是自包含的,一旦测试确认函数工作正常,除非有更改,否则不需要再次测试。这减少了需要测试的代码量,从而更容易发现错误(或从一开始就避免错误)。
-
可扩展性——当需要扩展程序来处理以前没有处理的情况时,函数在一处更改,并在每次调用时生效。
-
抽象——使用函数时,只需要知道它的名称、输入、输出以及所在位置,无需了解它如何工作,也无需知道它依赖的其他代码。这降低了使用他人代码(包括标准库)所需的知识量。
有效的使用函数
新手遇到的最大挑战之一(除了学习语言本身)是理解何时以及如何有效地使用函数。下面是编写函数的一些基本准则:
- 程序中出现多次的语句组通常应编写成函数。例如,如果以相同方式多次读取用户的输入,将其组织成函数是很好的做法。如果在多个位置以相同的方式输出内容,也可以编写成函数。
- 具有明确输入和输出的代码(特别是逻辑较复杂时)适合编写成函数。例如,如果有一个要排序的列表,那么执行排序的代码就很适合做成函数,即使只被使用一次。输入是未排序的列表,输出是已排序的列表。另一个适合组织成函数的功能是模拟六面骰子的投掷结果。当前程序可能只使用一次,但如果将其转换为函数,以后就可以在扩展程序或其他程序中重用。
- 函数通常应执行一个(且只执行一个)任务。
- 当函数变得太长、太复杂或难以理解时,可以将其拆分为多个子函数。这称为重构。
通常,学习C++时,会编写许多包含多个子任务的程序:
对于简单的程序(例如少于20行代码),其中一些或全部子任务可以在函数main中完成。然而,对于较长的程序,将每个子任务封装为单独的函数更好。
新手通常将计算值和打印计算值合并到单个函数中。然而,这违反了函数的”一个任务”经验法则。计算值的函数应将值返回给调用方,让调用方决定如何处理结果(比如调用另一个函数来打印值)。