如何清楚地表达长列表的条件

How to Clearly Express Long List of Conditions?

本文关键字:列表 条件 地表 何清楚 清楚      更新时间:2023-09-26

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

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

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

表达一长串重要条件的最清晰方式是什么?

谢谢

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

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

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

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

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

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

您应该在'&&':

前列出使用换行符的条件
if (state.isPrimaryJumping
    && state.timeUntilCanJump == 0 
    && state.isStartPrimaryJumping 
    && state.jumpIsLoaded 
    && state.primaryJumpsSinceTouchedGround < moveStats.maxJumps) {
      // do awesome jumping stuff
}