Coding style 如果语句格式设置是最佳做法,那么';你的风格是什么?

Coding style 如果语句格式设置是最佳做法,那么';你的风格是什么?,coding-style,Coding Style,希望改进我的IF语句,我想让我的代码看起来漂亮 这就是我目前正在做的,可读性好吗,还有改进的余地吗 我没有人可以四处打听。这就是我来这里的原因。请不要结束我的问题:(您的冗长导致代码可读性较差,我认为以下格式是最好的: if ( null == o || null == o.ID || null.Title || 0 == o.ID.Length || 0 == o.Title.Length ) { // do stuff } 我们都有高分辨率/宽屏显示是有原因的,没有理由用非常短的语法来

希望改进我的IF语句,我想让我的代码看起来漂亮

这就是我目前正在做的,可读性好吗,还有改进的余地吗


我没有人可以四处打听。这就是我来这里的原因。请不要结束我的问题:(

您的冗长导致代码可读性较差,我认为以下格式是最好的:

if ( null == o || null == o.ID || null.Title || 0 == o.ID.Length || 0 == o.Title.Length )
{
  // do stuff
}

我们都有高分辨率/宽屏显示是有原因的,没有理由用非常短的语法来锁定代码

if ( IsIDEmpty(o) )
{
  // do stuff
}

使代码更简单、更干净。该函数将执行实际检查并返回一个布尔值。我相信这可能是您可以重复使用的东西,而且它还可以作为一种简单的方法,使代码更加自我记录/注释。

如果它合适,我会将其全部放在一行上(这一行显然不适合).这样,我会将| |始终放在行的开头或结尾:

if( null == o ||
    null == o.ID ||
    null == o.Title ||
    0 == o.ID.Length ||
    0 == o.Title.Length
)

如果一条线上的条件大于1,我认为| |的位置更重要


我忽略了一个事实,null.Title似乎没有多大意义

老实说,我觉得它很让人分心。主要是因为“| |”开始发出有趣的声音

我更喜欢这样的东西

if ( o == null || o.ID == null || null.Title ||
     o.ID.Length == 0 || o.Title.Length )

或者更好,如果可能的话,把它放在一行中。

为了下一个家伙,我总是尽量避免复杂的布尔表达式,但是如果我不得不写一个不容易在一行上的表达式,我会将其格式化如下:

if (value1 == value2 ||
    value3 == value4 ||
    value5 == value6 ||
    value7 == value8) {

  executeMyCode();
}

我通常会这样做:

if(x < 0 || x >= width
|| y < 0 || y >= height)
{
    /* Coordinate out of range ... */
}
如果(x<0 | | x>=宽度
||y<0 | | y>=高度)
{
/*坐标超出范围*/
}
第一个y和x以单空格字体排列,这很好,我不会被半缩进搞糊涂


这种方法在做类似的比较时效果最好。否则,我通常会将我的if分开。

我认为它非常不可读

在我看来,将常数放在第一位的效果总是有点奇怪——如果大多数编译器在条件表达式中找到赋值,他们都会被说服发出警告

然后对两个不同的对象测试null,然后对两个不同的对象测试零长度,但重要的不是长度检查,而是要检查的成员

if (o == null       ||
    o.ID == null    || o.ID.length == 0 ||
    o.Title == null || o.Title.Length == 0) 

对于你所拥有的最简单的格式,我会选择每行一个

if(null == o
  || null == o.ID
  || null == o.Title
  || 0 == o.ID.Length
  || 0 == o.Title.Length)
如果您可以重构条件,使其适合于一行,则更好。我发现大量的| | |或&&通常很难读取。也许您可以将其重构为一个函数,并留下:

if(myFunction(...))

它是不可读的。 这就是我如何做真正长的如果(或那些我不得不经常玩弄的)

对于你的,我只做一行

if(o == null  || o.ID == null || o.Title == null || o.ID.Length == 0 ||  o.Title.Length == 0)

或者,如果你使用C++,我会做这样的事情:< /P>

if(!o)
{}
if(! (o.ID && o.Title && o.Length))
{}
…因为它将创造与正确分开


然而,由于我对新行的喜爱,我被指控臃肿的LOC。

< P>一般我和TravisO在这一点上,但是如果你的IF-语句中有这么多的条件,那么它就变得疯狂了,考虑把它自己的小功能改成:

bool wereTheConditionsMet()
{
  if( NULL == 0 )
    return true;
  if( NULL == o.ID )
    return true;
  :  :   // and so on until you exhaust all the affirmatives
  return false;
}

if ( wereTheConditionsMet() )
{
  // do stuff
}

传达一个命名良好的谓词函数的意图要比传达一个无穷无尽的| | s和&&s字符串容易得多。

我的经验法则:避免半智能自动格式化程序无法复制的任何格式

在我看来,拥有一套已定义的格式和一个自动工具/模板/配置来实际生成该格式的代码是一个巨大的优势


如果您的代码在自动格式化后仍然无法读取,那么很有可能您仍然需要重构。

与其只为这一个问题制定一个标准,我建议对您使用的任何语言采用现有的编码标准

例如:

GNU编码标准

Java编程语言的代码约定

.NET Framework类库开发人员通用参考设计指南

  • 使用自动代码格式化程序,并对其进行适当配置
  • 编写一个类似isPresent(String)的方法,检查String参数是否为NOTNULL和not empty(长度为零)
  • 重写原始条件以使用新的isPresent(String)方法,可能全部在一行中

  • “null.Title”?您看到的是null对象的Title成员?Shome mishtake,Shirley?这完全是主观的,以前已经被问过(并且已经结束)。@EBGreen-我认为这是以合理的方式问过的(真诚地寻求改进建议)有很多不同的答案,但我不认为任何答案是有争议的。我认为这是一个非常相似的问题,如果它有帮助的话。我不认为它是有争议的,但它是非常主观的,没有办法仅仅主观地结束它。也许,但最终会有一句话是不明智的一句话。我真的不想成为你办公室里的一个近视眼!“没有理由用非常短的语法来锁定你的代码”.当然,在我的屏幕上,Stackoverflow会在右边显示最后几个字符和一个滚动条!我不太希望所有内容都在一行中,但我同意将复杂的逻辑放在一个单独的函数中会让它更可读。@Paul-不仅仅是你的屏幕。所以的列固定在一定数量的ems上宽。我想这是因为杰夫·阿特伍德讨厌这样的人:“好吧,我在一个像样的显示器上用像样的编辑器编写代码,还有剩下的几个不配痛苦地死去的特罗格洛迪人。”.或类似的文字。+1表示在连续行的开头使用运算符。这使得程序员可以轻松快速地通知该行是前一行的延续,而不是第一行的延续
    if(o == null  || o.ID == null || o.Title == null || o.ID.Length == 0 ||  o.Title.Length == 0)
    
    if(!o)
    {}
    if(! (o.ID && o.Title && o.Length))
    {}
    
    bool wereTheConditionsMet()
    {
      if( NULL == 0 )
        return true;
      if( NULL == o.ID )
        return true;
      :  :   // and so on until you exhaust all the affirmatives
      return false;
    }
    
    if ( wereTheConditionsMet() )
    {
      // do stuff
    }