C++ 自学教程 第1.4b章 为什么函数如此有用,和怎么有效使用它们
现在我们知道了什么是函数,还有它们有哪些基本功能。这一节我们来仔细探讨一下它们为什么那么好用。
为什么要使用函数呢?
编程新手经常会问:“我们为什么不能把函数的代码直接放在主函数里呢?”。在许多例子里(尤其是简单例子),这样做是可行的的。但是函数的以下几个特性在复杂程序里面特别有用。
• 条理性。当程序变得越来越复杂,把所有代码都放在主函数里面会使得程序越来越复杂。一个函数就像个我们在存在于主函数外的迷你程序一样,我们编写函数的时候不用考虑太多剩余的程序。这就使得我们可以把复杂的任务分解成小的,简单的问题。这大大降低了整个程序的复杂度。
• 可“回收”,或者说可被再次利用。当一个函数写好后,它可以被多次调用,这就避免了重复代码,并且降低了由于复制黏贴带来错误的可能。函数也可以被不同程序使用,减少了每次需要从头编写的代码的数量。
• 测试/调试。因为函数减少了代码的冗余性,需要被调试的代码本身就减少了。同时因为函数是自给的,再验证了一个函数可以正确运行后,除非我们改动了什么,不然不需要再次测试。这减少了我们每次需要调试的代码的量,使得代码调试变得更加简单了。
• 拓展性。当我们需要将拓展我们的函数,使得它能处理一个以前没见过的例子。函数使得我们可以只改动代码的某个地方,并且该改动在这个函数每次被调用的时候都有效。
• 抽象性。使用一个函数,你只需要知道它的名字,它的输入跟输出,还有它在哪里定义的。你不需要知道它的工作原理,或者它是基于别的什么代码编写的。这一点在借用别人的代码变得特别简便。
即使看上去不像,每一次你使用std::cin和std::cout来输入输出的时候,你在用标准库提供的一个符合上述所有标准的函数。
有效的使用函数
编程新手在学习编程的时候碰到的最大的问题之一就是如何有效的使用函数。下面就是一些写函数的基本指南。
• 在程序中出现一次以上的代码通常都应被写成函数。比方说,我们多次以同种方式从用户那里读取输入,这就很适合写成一个函数。同样的,我们以同一个格式多次输入,也可以写成输出。
• 一个函数通常被用来完成一个任务。
• 当一个函数变得太长,太复杂,太难理解,它就应该被分成几个子函数。这也被叫做重构。
通常情况下,当学C++的时候,你写的大部分程序都需要完成下面三个任务:
1. 从用户那里读取输入。
2. 用输入计算出某个值。
3. 输出/打印该值。
对简单程序(少于20行的程序)来说,大部分的任务都能在主函数完成。但是对更长更复杂的函数来说,每一项任务都可以被写成函数。
编程新手经常在一个函数里又计算数值,又输出。但是这违反了一个函数只完成一个任务的规则。一个计算数值的函数应该把该数值返回给呼叫函数,并让它决定如何处理这个计算得到的数值。
我们会在1.10章的时候具体讨论。
说明: 这系列笔记是基于网上一个英文教程LearnCPP