物极必反,滥用闭包的结果就是回归结构化编程

简介:

烦透了闭包。目前在修改一个项目,该项目的原始代码中使用了大量的闭包。一个套一个,甚至套了三四层,那函数啊,那局部变量啊,叫一个多啊,那执行流程啊,叫一个乱啊。

下面是个draw函数,730行,把它的结构提取出来,有下面的树:

draw             15变量 
  function0    1变量 
  function1    13变量 
    function11 
    function12 
    function13 
    function14 
      function141 
      function142 
    function15 
      function151 
        function1511 
    function16 
      function161 
    function17 
    function18 
    function19 
    function1A 
  function2 
  function3    8变量 
    function31 
    function32 
  function4    26变量 
    function41 
    function42 
    function43 
    function44 
    function45 
    function46 
    function47 
    function48

如果只看draw作用域,那么draw下的15个变量对于从函数function0-function48来说就是外部变量。而对于function41-function48来说,外部变量就有26+15=31个。

这不就是最古老最邪恶的结构化编程的变种吗!

对这个函数来说,大量使用闭包,存在三个问题:

·阅读难——执行流程上串下跳的;

·调试难——调用栈结构层次就像天书一样;

·重构难——外部变量太多。

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2010/06/04/1751704.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

目录
打赏
0
0
0
0
23
分享
相关文章
技术经验解读:什么是闭包?闭包的优缺点?
技术经验解读:什么是闭包?闭包的优缺点?
133 1
探秘闭包:隐藏在函数背后的小秘密(下)
探秘闭包:隐藏在函数背后的小秘密(下)
探秘闭包:隐藏在函数背后的小秘密(下)
C语言编程陷阱:语义陷阱
C语言中只有一维数组,数组大小必须在编译器就作为一个常数确定下来。 C语言中数组的元素可以是任何类型的对象。
64 1
C语言编程陷阱:预处理器 陷阱
预处理器 不能忽视宏定义中的空格: #include <stdio.h>
45 1
教你精通Java语法之第十二章、递归
内层函数调用(子集处理)完成,外层函数才能算调用完成。
87 0
如何使用闭包进行一次降维打击?
如何使用闭包进行一次降维打击?
83 0
《C陷阱与缺陷》----词法“陷阱”
由于在C语言中赋值操作相对于比较出现更加频繁,所以将字符较少的符号=赋予更常用的含义—赋值操作。
124 0
编程基本功:变量局部化的教训
编程基本功:变量局部化的教训
83 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等