【问题标题】:how to write cleaner if-else statements and prevent nesting? [closed]如何编写更简洁的 if-else 语句并防止嵌套? [关闭]
【发布时间】:2022-01-08 02:34:55
【问题描述】:

所以我知道嵌套代码很快就会变得丑陋。因此,我查找了一种防止嵌套的方法,发现您可以执行以下操作

if (user == null) return;

console.log('Deleting');
user.delete();

而不是像那样使用大括号

if (user != null) {
    console.log('Deleting');
    user.delete();
}

但是,在使用 if-else 语句时,我真的看不出这有什么帮助。例如:我的项目中有这段代码,我真的很想用比这更干净的方式编写。但我正在努力弄清楚如何做到这一点。

           if (parseInt(year) == joinTime.getFullYear()) {
                if (parseInt(month) == joinTime.getMonth() + 1) {
                    if (parseInt(day) == joinTime.getDay()) {
                        channel.send(message);
                    } else {
                        comparison(day, hour, minute);
                    }
                } else {
                    comparison(day, hour, minute);
                }
            } else {
                comparison(day, hour, minute);
            }

【问题讨论】:

  • if (a && b && c) ... else ...…?!

标签: javascript if-statement nested conditional-statements coding-style


【解决方案1】:

我不认为删除大括号是使用嵌套 if else 语句时的解决方案。在这种情况下,我会尝试限制使用的语句数量。您可以将此代码转换为:

if(parseInt(year) == joinTime.getFullYear() && parseInt(month) == joinTime.getMonth() + 1 && parseInt(day) == joinTime.getDay()){
     channel.send(message);
}
else {
    comparison(day, hour, minute);
}

或者您可以使用解析的年、月和日来构造一个日期对象,然后将其与 joinTime 进行比较。

【讨论】:

    【解决方案2】:

    你可以这样写

    if (
    parseInt(year) == joinTime.getFullYear() &&
    parseInt(month) == joinTime.getMonth() + 1 && 
    parseInt(day) == joinTime.getDay()
    ) {
       channel.send(message);
    } else {
       comparison(day, hour, minute);
    }
    

    【讨论】:

      【解决方案3】:

      风格是旁观者,但假设您想要更简洁的代码,那么我会这样做:

          const yearMatch = (parseInt(year) == joinTime.getFullYear());
          const monthMatch = (parseInt(month) == joinTime.getMonth() + 1);
          const dayMatch = (parseInt(day) == joinTime.getDay());
          
          if (yearMatch && monthMatch && dayMatch) {
              channel.send(message);
          } else {
              comparison(day, hour, minute);
          }
      
      

      或者,如果您不关心额外的return(并且它不会破坏您的逻辑):

      
          const yearMatch = (parseInt(year) == joinTime.getFullYear());
          const monthMatch = (parseInt(month) == joinTime.getMonth() + 1);
          const dayMatch = (parseInt(day) == joinTime.getDay());
      
          if (yearMatch && monthMatch && dayMatch) return channel.send(message);
          
          comparison(day, hour, minute);
      
      

      当然,请根据需要更改变量名称。

      【讨论】:

        猜你喜欢
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2011-07-20
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        相关资源
        最近更新 更多