如何清楚地表达长长的条件清单?

时间:2015-10-02 19:48:32

标签: javascript c#

考虑动作游戏的以下if语句

if (state.isPrimaryJumping && state.timeUntilCanJump == 0 && state.isStartPrimaryJumping && state.jumpIsLoaded && state.primaryJumpsSinceTouchedGround < moveStats.maxJumps) {
  // do awesome jumping stuff
}

在这种情况下,六个条件中的每一个都是不同的,没有一个可以删除。但是,该语句包含在页面末尾并且很难理解。

表达一长串重要条件的最明确方法是什么?

由于

3 个答案:

答案 0 :(得分:3)

当进入这样的长if语句时,通常用换行符分隔每个条件:

private void xpto()
{
    timerScore[0] = new Foo ();
    timerScore[0].Name = "test";
    timerScore[0].Score = 30;
}

我更喜欢把&amp;&amp;&amp;在该行的末尾,使用条件而不是操作符开始下一行,但两者都可以。这样的东西通常也包含在你的组织风格指南中。

答案 1 :(得分:3)

为了使其更具可读性,我会将您的语句放入一个具有返回bool的描述性名称的方法中。像这样:

if (CanDoAwesomeJumpingStuff()) 
{
  // do awesome jumping stuff
}

private bool CanDoAwesomeJumpingStuff()
{
    return state.isPrimaryJumping && 
               state.timeUntilCanJump == 0 && 
               state.isStartPrimaryJumping && 
               state.jumpIsLoaded && 
               state.primaryJumpsSinceTouchedGround < moveStats.maxJumps

}

虽然它可能会添加额外的代码行,但您确切知道检查的条件是什么。

答案 2 :(得分:1)

您应该在&amp;&amp;&amp;&#39;之前列出包含换行符的条件:

if (state.isPrimaryJumping
    && state.timeUntilCanJump == 0 
    && state.isStartPrimaryJumping 
    && state.jumpIsLoaded 
    && state.primaryJumpsSinceTouchedGround < moveStats.maxJumps) {
      // do awesome jumping stuff
}