频道栏目
读书频道 > web开发 > Javascript > JavaScript编程精解(原书第2版)
3.10 添加新函数
2015-12-04 15:02:31     我来说两句
收藏   我要投稿
《高级程序设计(第3版)》是 超级畅销书的**新版。ECMAScript 5 和HTML5 在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为 增添了很多适应未来发展的新特性。本书这一版除增加5 章  立即去当当网订购

这里有两种常用的方法将函数引入到程序中。

第一种方法是找出你的程序中多次出现的相似代码。我们想尽量避免出现重复相似代码,因为代码越多,错误的概率也就越大,而且也增加了代码阅读者的负担。因此,我们可以把重复功能的代码提取出来放到一个函数中去,并起一个合适的名字。

第二种方法是当你写一些新功能代码,并觉得这些代码应该成为一个函数时,可以将这部分代码写到一个函数中,并取一个函数名。你甚至可以先编写调用函数的代码,然后再具体实现调用的函数。

给函数起名的难易程度取决于我们封装的函数的用途是否明确。对此,我们一起来看一个例子。

我们想编写一个打印两个数字的程序,第一个数字是农场中牛的数量,第二个数字是农场中鸡的数量,并在数字后面跟上Cows和Chickens用以说明,并且在两个数字前填充0,以使得每个数字总是由三位数字组成。


 

显然,我们需要编写一个接受两个参数的函数。编写的代码如下:


 

在字符串值后加上.length可以获取字符串长度。因此,while循环会不断在数字字符串前加上0,确保字符串长度至少为3。

任务完成了!但是,正当我们准备把代码提供给农民的时候(当然,还有厚厚一摞发票),他打电话告诉我们他还养了猪,问我们是否可以扩展软件来输出猪的数量?

当然没有问题。但是当再次复制粘贴这四行代码的时候,我们停了下来并重新思考。一定还有更好的方案来解决我们的问题。以下是第一种尝试:


 

这种方法解决了我们的问题!但是printZeroPaddedWithLabel这个函数并不十分恰当。它把三个操作,即打印信息、数字补零和添加标签放到了一个函数中处理。

这一次,我们不再将程序当中重复的代码提取成一个函数,而只是提取其中一项操作。


 

像zeroPad这样清晰和恰当的函数名,人们在阅读代码的时候就能很容易了解这个函数的用途了。而且这个函数不仅可以用于当前程序,还可以在其他程序当中使用。比如说,你可以使用这个函数来打印一组严格对齐的数字表。

我们的函数应该包括多少功能呢?我们可以编写一个非常简单的函数,只支持将数字扩展成3字符宽。也可以编写一个复杂通用的数字格式化系统,可以处理分数、负数、小数点对齐和使用不同字符填充等。

比较好的方法是,尽量不要在函数中添加过多功能,除非你真的需要它。我们总是希望能够编写一个通用的框架来解决遇到的各类问题。但是别急,这么做其实并不能解决任何问题,而且不会有人真的去使用这样的代码。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.9 递归
下一篇:3.11 函数及其副作用
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站