Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

多义函数

  所谓「多义函数」指的是同一个函数名,由于参数不同而做了完全不同的事情。它和函数重载的概念有点类似,或者也可以说是基于函数重载的,只是功能间的差异大的有点离谱。甚至有时候函数名是一个多义动词,根据参数的不同执行了这个动词上不同含义的动作。

jQuery 里的那些多义函数

  jQuery 中有很多这样的设计,css、attr 之类的方法根据参数来决定它的行为是获取还是修改。虽然有点奇怪,但这还算比较正常的函数重载。jQuery 中还有一个 get 静态方法和一个 get 成员方法。$.get 是发起 HTTP 的 GET 请求,而 $(...).get() 是将 jQuery 对象转换成数组。虽然差异是静态和成员,但使用了同一个名字,而且行为是完全不同的。还有一个更坑爹的 load 方法,它的一个功能是从服务器加载数据并放入一个元素中,另一个功能是给元素绑定 load 事件,也是完全不相干的东西使用同一个名字。

git 命令中的那些多义命令

  git 命令中也有大堆多义命令。一个典型的例子 git checkout,它的参数可以是一个分支名,功能是切换分支;也可以是一个文件路径,功能是恢复文件的修改。那么如果分支名和文件路径同名的话就要呵呵了。不过这也不是什么麻烦的事情,因为文件路径可以使用 ./xx 来指定,避开与分支名冲突的情况。

其它思考

  问题总是可以解决,但我们得思考一下这样的设计真的好么?其实我自己一直是不太喜欢这样的设计,希望每个动词都有唯一的含义。然而自然语言的词汇总是很有限的,而且存在各种多义词。我总是会避开这些多义、歧义的情况,所以经常会遇到词汇不够用,花半天的时间就想一个 API 的命名,最终还是无法决定。
  我觉得像 jQuery 的 load 方法那样的东西真不应该存在。或许最好的解决办法就是像莎士比亚那样不断地造出新词来描述那些原本语言无法准确描述的东西吧。

网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^