我们已经介绍了函数是什么以及它们的一些基本功能,现在让我们仔细看看为什么函数有用以及如何有效地使用函数。
为什么要使用函数?
新程序员常常会问:“我们不能把所有代码都放在main函数中吗?” 对于简单的程序,你绝对可以。然而,函数提供了许多好处,使它们在长度或复杂性不小的程序中非常有用。
- 组织——随着程序变得越来越复杂,让所有代码都位于 main() 函数中变得越来越复杂。 函数几乎就像一个小程序,我们可以与主程序分开编写,而无需在编写时考虑程序的其余部分。 这使我们能够将复杂的程序简化为更小、更易于管理的块,从而降低程序的整体复杂性。
- 可重用性——一旦编写了一个函数,就可以在程序中多次调用它。 这可以避免重复的代码(“不要重复自己”)并最大限度地减少复制/粘贴错误的可能性。 函数还可以与其他程序共享,从而减少每次必须从头编写(并重新测试)的代码量。
- 测试——因为函数减少了代码冗余,所以首先需要测试的代码就更少了。 另外,由于函数是独立的,一旦我们测试了函数以确保其工作正常,我们就不需要再次测试它,除非我们更改它。 这减少了我们必须一次测试的代码量,从而更容易发现错误(或从一开始就避免它们)。
- 可扩展性——当我们需要扩展程序以处理以前未处理的情况时,函数允许我们在一处进行更改,并在每次调用函数时使更改生效。
- 抽象——为了使用一个函数,你只需要知道它的名称、输入、输出以及它所在的位置。 您不需要知道它是如何工作的,或者它依赖于什么其他代码来使用它。 这减少了使用其他人的代码(包括标准库中的所有内容)所需的知识量。
如何有效地使用函数
新程序员遇到的最大挑战之一(除了学习语言之外)是理解何时以及如何有效地使用函数。 以下是编写函数的一些基本准则:
- 在程序中出现多次的语句组通常应制成一个函数。 例如,如果我们以相同的方式多次读取用户的输入,那么这就是一个很好的函数候选者。 如果我们在多个地方以相同的方式输出某些内容,那么这也是函数的一个很好的候选者。
- 具有明确定义的输入和输出集的代码是函数的良好候选者(特别是当它很复杂时)。 例如,如果我们有一个想要排序的项目列表,那么执行排序的代码将是一个很好的函数,即使它只执行一次。 输入是未排序的列表,输出是排序的列表。 另一个好的预期功能是模拟 6 面骰子滚动的代码。 您当前的程序可能只在一个地方使用它,但是如果您将它变成一个函数,那么当您以后扩展您的程序或在未来的程序中时,它就可以被重用。
- 一个函数通常应该执行一项(且仅一项)任务。
- 当一个函数变得太长、太复杂或难以理解时,可以将其拆分为多个子函数。 这称为重构。
通常,在学习 C++ 时,您会编写很多涉及 3 个子任务的程序:
- 读取用户的输入
- 根据输入计算值
- 打印计算值
对于简单的程序(例如少于 20 行代码),其中部分或全部可以在函数main中完成。然而,对于较长的程序(或只是为了练习),这些中的每一个单独功能都可以编写一个函数。
新程序员经常将计算值和打印计算值结合到一个函数中。然而,这违反了函数的“单一任务”经验法则。计算值的函数应该将值返回给调用者,并让调用者决定如何处理计算出的值(例如调用另一个函数来打印该值)。
原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/why-functions-are-useful-and-how-to-use/