这里是“从锦囊妙计想到的12”, 本文是通过给锦囊打包, 从而引出函数(或者过程,子程序)的概念,从而对指令部分进行细化分析。
一. 给众多小锦囊打个包
还是说个故事,依然还是烙饼的故事(谁让这个东西好吃呢)。
关羽写锦囊, 张飞烙饼, 已经持续很多天了, 就像柯南永远也长不大那样,故事就这么一个场景, 反正, 人家柯南每次都不一样, 我们每次内容说明的知识也是不一样的。
关羽已经吃惯了张飞烙的大饼,每天都要来蹭一顿, 每天关羽都要写呀写呀一些锦囊,然后老张去烙饼。
最近老有人来蹭饭因此每次烙的饼数不一样了, 这样关羽每次都得重新写一下, 关羽很郁闷。 后来关于发现数量的变化可以通过增加一个锦囊, 在锦囊里面放一个装豆子的袋子就解决了。
不过每次锦囊数量很多,拿起来很不方便, 然后还得整理一番, 给这些锦囊重新编号。 关羽还是个聪明的人, 他用了一个非常大的袋子把这些锦囊都收集到一起,然后每次把这个大袋子给张飞拿起, 然后张飞可以打开袋子从里面拿出锦囊(也就是指令去执行了)去工作。如下图
通过一个大好的 麻袋把众多带有指令的锦囊和带有数据的锦囊打包到一起, 然后做为一个整体进行处理,管理,使用等就方便多了。
二. 形实结合的参数
上面通过一个麻袋把全部锦囊都打包的办法可以解决了很多的问题了, 但是还有一个问题就是, 每次当有需要修改麻袋里面内容的时候,需要将麻袋整体打开,然后修改, 最后在整体都打包在一起。
这样尽管也可以, 但是长时间工作后发现,有的时候由于士兵粗心,在重新装麻袋时会偶尔忘记个别的锦囊,这样就有了麻烦。如何解决这个问题?
出现这个问题是, 每次还是有一些东西要修改, 由于这些要修改的东西同其他东西放到一起了, 因此造成修改这些东西时,可能由于不小心等影响了其他东西, 简单的办法就是, 将要修改的东西同, 其他不修改的东西分开,然后在结合起来就可以避免了。如下图
如上图, 在一个大袋子里面放两个小袋子, 小袋子1里面存放需要变化的东西
在小袋子2中放不需要变化的东西。
在使用时, 先准备两小袋子A1和B1, 然后将大袋子那过来, 把A1里面的东西, 注入到A中, 将B1中的东西注入到B中, 然后这个修改好的大袋子整体就可以使用了, 如下图
如山图, 用A1 =》A , B1 =》 B的过程 一般叫做 实参替换形参。
其实A是大的袋子里面参与工作的一个袋子, B也是带袋子里面参与工作的一个袋子, 因此通常都成为参数(计算机里面都是数, 因此叫做参数, 你也可以理解是参与变化的袋子都可以, 总之到了计算机里面名称可以根据需要进行适当的变化)。
上面的在工作时通过一个具体的小袋子A1和B1替换真正的A和B的过程就是实参替换形参的过程。
整个过程是计算机函数的工作基础。
三. 函数、过程、子程序和参数
在计算机中经常需要将一系列的小袋子(指令)封装到一个袋子中, 然后在袋中在分为一部分为可以替换的部分, 一部分为固定的部分,这个过程通常叫做封装。 封装后的东西一般叫做“函数”, 也有的叫做“过程”, 还有的地方叫做“子程序”, 总之都可以理解为一个大袋子。
由于大袋子每次工作里面都有可能有些不一样的东西, 因此就了参数的概念, 其实参数就是一个可以更改的小区域, 这个区域在那个大袋子里是独立一个区域。
在实际工作过程中, 首先要实际的小袋子(变量A1和B1)替换A和B,
然后, 在通知其他人可以用这个袋子工作了, 这个时候在工作时在获取A和B其实就是取得A1和B1的内容了。
那么这种划分袋子的办法有什么好处?
由于在一个复杂的计算机中, 可能有非常多的功能也就需要非常多的指令(锦囊),因此若是这些锦囊零散的放着, 管理维护都不方便, 因此我们就需要将这些锦囊(指令)分类,打包, 这样我们就维护这些打包好的, 然后你会发现, 大部分都不需要经常修改。 你仅仅每次需要修改很少的一些大袋子(函数)。
这样提高了效率, 降低了发生错误的次数(可能性)
另外, 函数,过程和子程序 本质上没有特多区别。 函数一般都会有个返回值。
什么是返回值呢? 就是干完活说一声我干完了, 结果是多少! 这个值要告诉调用者。
四. 变量的作用域
我们从前面看到的A袋子, 仅仅在特定的A袋子里面是有效的,在其他的袋子里面即使有个同名的A袋子, 也是不一样的。
例如,北京市的 一个赵大妈, 同辽宁省的赵大妈 尽管名称相同, 但是他们的地域是不同的。
这种一个名称的有效的区域叫做变量作用域, 最常见的作用域就是函数内部,当然还有很多, 以后会慢慢提到。
今天就这么多吧, 明天说一下交互的事情,
相关文章