【C语言-函数-引子】函数之为什么要引入函数

开发技术 作者: 精灵星空 SKY315.COM 更新于: 浏览: 193
码字发文不易,转载请注明出处【精灵星空 SKY315.COM】

同学们,咱们先做个思想实验。假设现在让你写一个程序,功能特别简单——算1到100的累加和。你肯定二话不说,一个for循环,三两行代码就搞定了。对吧?

好,那现在我再加一个需求:算完1到100的累加和之后,再帮我算一下1到50的累加和,然后再算一下50到100的累加和。

这时候你的代码变成啥样了?是不是特自然地就复制粘贴了三遍循环,然后改一改起始值和结束值?代码一下就变得老长了,看着是不是就有点烦了?

行,咱再往上加码。现在领导说了,整个系统里啊,有几十个地方都要做这种“从几加到几”的运算。你打算怎么办?挨个复制粘贴吗?那你这代码篇幅瞬间就得爆炸,满屏都是for循环。

这还不是最要命的。最要命的是啥?是改需求。

比如说,算法优化了,现在不光是求“和”,要求“平方和”了。你想想,如果你刚才偷懒复制了五十份循环代码,现在你得撸起袖子,把那五十个地方全找出来,挨个把里面的加法改成乘法加加法。这一通操作下来,先不说累不累,你就说你心里慌不慌?万一漏了一个地方没改,这程序跑出来的结果就是半对半错,你说这锅你背不背?

这就是咱们之前写代码最大的痛点:代码冗余和维护困难。你把同一段逻辑像贴膏药一样到处贴,最后自己都找不到哪块膏药是新的哪块是旧的了。

这时候,函数就来了。

你可以把“累加求和”这个功能,想象成一个“小工厂”或者一个“小黑盒”。

这个黑盒特别有意思,它的工作流程是这样的:

  1. 你得给它“喂”东西,比如喂给它一个起始数和一个结束数。

  2. 它拿到这两个数之后,就在自己肚子里吭哧吭哧地算(就是把那一套for循环封装在里面)。

  3. 算完了,它“吐”出一个结果给你。

这个黑盒,就是函数。

从此以后,你再也不用关心这个黑盒里面到底是怎么算的了(你也不用再写那一堆for循环代码了)。你只需要记住三件事:给它什么(参数),它能干啥(功能),它返回啥(返回值)。

咱们给它起个名字,就叫 getSum 吧。

有了这个小工厂,你再写开头那个需求,代码就变成了这样:

  • 求1到100的和:调用一下 getSum(1, 100)。

  • 求1到50的和:再调用一下 getSum(1, 50)。

  • 求50到100的和:再调一次 getSum(50, 100)。

你看,原本需要写好几十行循环的代码,现在只需要三行函数调用就搞定了! 代码顿时清爽了,像刚拖完的地一样干净。

更爽的是改需求。如果领导现在突然说改成“平方和”,你只需要干一件事:找到那个叫 getSum 的小工厂,把里面生产车间的流水线(代码)从“累加”换成“累加平方和”。然后呢?然后就没有然后了!因为外面所有调用它的地方都不用动,直接生效!

这就是引入函数的最大好处:

第一,它让你告别重复造轮子,极大地减少了代码量。 你写一遍,其他地方直接用,这叫“代码复用”。

第二,它让程序的逻辑变得超级清晰。 以后别人或者你自己再看代码,看到 getSum(1,100),一眼就知道这是在求1到100的和,而不用去读那一大坨for循环才反应过来。这就像书的目录一样,一看目录就知道这一章讲啥。

第三,它降低了拆解问题的难度。 将来你们做复杂项目,比如写一个学生管理系统,你不可能把“添加学生”、“删除学生”、“查找学生”所有功能都挤在 main 函数那一亩三分地里。你得把“添加”写成一个函数,“删除”写成一个函数。这样各司其职,思路清晰,哪怕代码有几千行,也被拆成了一个个独立的小模块,调试起来也方便。

所以说,函数,是现代编程思想的基石,是模块化编程的基本单元。咱们学函数,不光是在学语法,更是在学习一种如何把复杂问题拆分成一个个小零件,然后分别造好再组装起来的思维方式。