首页>Program>source

我和同事之间存在以下争议,哪一个更优雅.我不会说谁是谁,所以这很公正.哪个更优雅?

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone != target)
            {
                _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
                _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
                _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);
                _hitZone = target;
                _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
                _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
                _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
            }
        }

...或...

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone == target)return;
            _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
            _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
            _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);
            _hitZone = target;
            _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
            _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
            _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
        }
最新回答
  • 7天前
    1 #

    这是可以违反规则的情况之一(即最佳做法).通常,您希望函数中的返回点尽可能少.这样做的实际原因是,它可以简化您的代码阅读,因为您始终可以假设每个函数都将采用其参数,执行其逻辑并返回其结果.在各种情况下投入额外的报酬往往会使逻辑复杂化,并增加阅读和完全破解代码所需的时间.一旦您的代码到达维护阶段,则新程序员尝试破译逻辑时(如果注释稀疏且代码不清楚,则尤其糟糕),多次返回可能会对生产力产生巨大影响.该问题随函数的长度呈指数增长。

    那么为什么在这种情况下每个人都类似选项2? 这是因为您正在建立一个协议,该函数通过验证传入数据或可能需要检查的其他不变量来强制实施.构造验证最漂亮的语法是检查每个条件,如果条件无效,则立即返回.这样,您不必通过所有检查都维护某种isValid布尔值。

    总而言之:我们实际上是在研究如何编写验证代码,而不是通用逻辑.选项2更适合用于验证代码。

  • 7天前
    2 #

    在大多数情况下,尽早返回可降低复杂性并使代码更具可读性。

    这也是Spartan编程中应用的技术之一:

    Minimal use of Control

    通过使用专门的方法来最大限度地减少条件语句的使用 构造这样的分层结构 继承,以及诸如Class之类的类 默认值,一次分类和一次分类 分隔符

    使用早期 return简化条件 .

    通过使用动作施加器最大限度地减少循环构造的使用 诸如Class Separate和Class 类FileSystemVisitor。

    通过提前退出简化迭代逻辑(通过 returncontinuebreak 声明)。

    在您的示例中,我将选择选项2,因为它使代码更具可读性.在检查函数参数时,我使用相同的技术。

  • 7天前
    3 #

    只要将早期返回值组织为函数/方法主体顶部的块,那么我认为它们比添加函数更具可读性.另一层嵌套。

    我试图避免身体中部的早日返回.有时它们是最好的方法,但我认为大多数时候它们都很复杂。

    此外,作为一般规则,我尝试最小化嵌套控制结构.显然,您可以将这一点讲得太深,因此您必须谨慎行事.即使谓词重复了一些子表达式(并且假设这不是某种语言的性能关键循环,但它也太笨而无法消除子表达式),对我来说,将嵌套的if转换为单个开关/大小写对我来说更加清晰.特别是,我不类似长函数/方法主体中嵌套ifs的组合,因为如果由于某种原因跳入代码中间,最终会上下滚动以从心理上重构给定行的上下文。

  • 7天前
    4 #

    根据我的经验,在项目中使用早期回报的问题是,如果项目中的其他人不习惯,他们就不会寻找它们.不管是否早退-如果涉及多个程序员,请确保每个人至少都知道自己的存在。

    我亲自编写代码以尽快返回,因为延迟返回通常会带来额外的复杂性,例如尝试安全退出一堆嵌套循环和条件。

    所以当我看一个陌生的函数时,我要做的第一件事就是寻找所有的 return s.真正有用的是设置语法颜色以给 return 与其他颜色不同的颜色. (我求助于红色。)这样, return 成为确定函数功能的有用工具,而不是为那些无所事事的人隐藏的绊脚石。

  • 7天前
    5 #

    守护者.

    Imho,是的-它的逻辑更清晰,因为返回是显式的,并且紧挨该条件,并且可以很好地将其归为相似的结构.在将"返回"替换为"引发新异常"的情况下,这更为适用。

  • objective c:NSTimeInterval到NSDate
  • postgresql:使用SQL查询多天的保留率