匿名函数被认为有害吗?

Ste*_*ini 19 javascript language-design anonymous-function

我越深入研究javascript,就越会考虑某些设计决策和鼓励实践的后果.在这种情况下,我正在观察匿名函数,这个函数不仅是JavaScript提供的,而且我看到强烈使用.

我想大家都同意以下事实:

  • 人类的头脑不会超过7加减2个实体(米勒定律)
  • 深度缩进被认为是糟糕的编程习惯,如果缩进超过三个或四个级别,通常会指出设计问题.这扩展到嵌套实体,并且它在python Zen条目"Flat is than than nest"中得到了很好的体现.
  • 具有函数名称的想法既可供参考,也可轻松记录其执行的任务.我们知道或者可以预期一个名为removeListEntry()的函数.自我记录,清晰的代码对于调试和可读性非常重要.

虽然匿名函数似乎是一个非常好的功能,但它的使用导致深度嵌套的代码设计.代码编写速度快,但难以阅读.它不是被迫为一个功能发明一个命名的上下文,而是压缩你的可调用对象的层次结构,而是鼓励"深入一层",推动你的大脑堆叠,并迅速溢出7 +/- 2规则.艾伦·库珀(Alan Cooper)的" 关于面子 "(About Face)表达了类似的概念,引用了"人们不了解等级制度".作为程序员,我们确实理解了层次结构,但是我们的生物学仍然限制了我们对深层嵌套的掌握.

我想在这一点上听到你的意见.如果匿名功能被认为是有害的,我们后来发现的一种明显闪亮的语法糖是盐,甚至是鼠毒?

CW因为没有正确答案.

j_r*_*ker 16

在我看来,你面临的问题不是匿名功能,而是不愿意将功能分解为有用和可重用的单元.这很有趣,因为在具有一流功能(并且必然是匿名功能)的语言中重用功能比在没有语言的语言中更容易.

如果你在代码中看到很多深层嵌套的匿名函数,我会建议可能有许多常见的功能可以分解为命名的高阶函数(即带有或返回("构建")其他函数的函数)功能).如果经常使用现有函数的"简单"转换,则应给它们命名.这只是DRY原则.

  • 这是完全正确的.在有意义的情况下使用匿名函数并没有什么本质上的错误,但是当它们做任何非常重要的事情时,最好将实际功能放在命名函数中(或者几个,甚至). (4认同)

Jas*_*son 8

匿名函数在功能上比它们有害的更有用.我认为如果你足够好地格式化你的代码,你应该没有问题.我没有问题,我确定我无法处理7个元素,更不用说7 + 2 :)