Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 使用没有大括号的if语句是一种不好的做法吗?_If Statement_Coding Style_Curly Braces - Fatal编程技术网

If statement 使用没有大括号的if语句是一种不好的做法吗?

If statement 使用没有大括号的if语句是一种不好的做法吗?,if-statement,coding-style,curly-braces,If Statement,Coding Style,Curly Braces,我见过这样的代码: if(statement) do this; else do this; someVar= someFlag ? 'someVal1' : 'someVal2'; if( statement ) { // let's do this } else { // well that sucks } 然而,我认为这更具可读性: if(statement){ do this; }else{ do this; } 既然这两种

我见过这样的代码:

if(statement)
    do this;
else
    do this;
someVar= someFlag ? 'someVal1' : 'someVal2';
if( statement ) {

    // let's do this

} else {

    // well that sucks

}
然而,我认为这更具可读性:

if(statement){
    do this;
}else{
    do this;
}

既然这两种方法都有效,那么这仅仅是一个使用哪种方法的偏好问题,还是一种方法比另一种方法更值得推荐?

我一直试图使我的代码标准化,并且看起来尽可能接近相同的代码。这使得其他人在负责更新时更容易阅读。如果你做了第一个例子,并在中间添加一行,它就会失败。 不起作用:

如果(声明) 这样做; 而这个,; 其他的
这样做

第一个版本的问题是,如果返回并在if或else子句中添加第二个语句,而不记得添加大括号,代码将以意外和有趣的方式中断

在可维护性方面,使用第二种形式总是更明智的


编辑:内德在评论中指出了这一点,但我认为也值得链接到这里。这不仅仅是一些象牙塔假设的废话:

我使用的是IDE的代码格式化程序。这可能有所不同,但可以在首选项/选项中进行设置

我喜欢这个:

if (statement)
{
    // comment to denote in words the case
    do this;
    // keep this block simple, if more than 10-15 lines needed, I add a function for it
}
else
{
    do this;
}

我的一般模式是,如果它适合一行,我会:

if(true) do_something();
如果有else子句,或者如果我要在
true
上执行的代码长度很长,请始终使用大括号:

if(true) {
    do_something_and_pass_arguments_to_it(argument1, argument2, argument3);
}

if(false) {
    do_something();
} else {
    do_something_else();
}

最终,它归结为风格和可读性的主观问题。然而,一般的编程世界几乎分成两部分(对于使用大括号的语言):要么无一例外地一直使用大括号,要么无一例外地一直使用大括号。我是后一组的一员。

从一开始就正确使用大括号应该有助于避免您不得不调试以下内容:

if (statement)
     do this;
else
     do this;
     do that;

这是一个偏好的问题。我个人使用这两种风格,如果我有理由相信我不需要再添加更多的语句,我会使用第一种风格,但如果可能的话,我会使用第二种。由于您无法在第一种样式中添加更多语句,因此我听到一些人建议不要使用它。但是,第二种方法会产生额外的代码行,如果您(或您的项目)使用这种编码样式,那么对于简单的if语句,第一种方法是非常首选的:

if(statement)
{
    do this;
}
else
{
    do this;
}
但是,我认为解决这个问题的最佳方法是使用Python。使用基于空格的块结构,创建if语句没有两种不同的方法:只有一种方法:

if statement:
    do this
else:
    do this

虽然这确实有一个“问题”,即您根本不能使用大括号,但您确实获得了这样的好处:第一种样式不再使用更多的行,它有能力添加更多语句。

我同意大多数答案,即最好在代码中显式使用大括号。就我个人而言,我会采用一套编码标准,并确保团队中的每个人都知道并遵守这些标准。在我工作的地方,我们使用.NET项目发布的编码标准。

对所有if语句使用大括号,即使是简单的语句。或者,重写一个简单的if语句以使用三元运算符:

if (someFlag) {
 someVar= 'someVal1';
} else {
 someVar= 'someVal2';
}
这样看起来好多了:

if(statement)
    do this;
else
    do this;
someVar= someFlag ? 'someVal1' : 'someVal2';
if( statement ) {

    // let's do this

} else {

    // well that sucks

}

但是,只有在绝对确定if/else块中没有其他需要的内容时,才使用三元运算符

就我个人而言,我使用第一种样式只是过早地从方法中抛出异常或返回。就像函数开始时的参数检查一样,因为在这种情况下,我很少有一件事情要做,而且从来没有其他事情要做

例如:

if (argument == null)
    throw new ArgumentNullException("argument");

if (argument < 0)
    return false;
if(参数==null)
抛出新ArgumentNullException(“参数”);
if(参数<0)
返回false;

否则,我使用第二种样式。

我更喜欢使用大括号。添加大括号使其更易于阅读和修改

以下是一些使用大括号的链接:


    • 省略语句块的一个问题是else歧义。也就是说,受C语言启发的语言忽略了缩进,因此无法将其分开:

      if(one)
          if(two)
              foo();
          else
              bar();
      
      由此:

      if(one)
          if(two)
              foo();
      else
          bar();
      

      根据我的经验,第一种形式唯一(非常)微小的优点是代码可读性,第二种形式增加了“噪音”

      但对于现代IDE和代码自动生成(或自动完成),我强烈建议使用第二种形式,这样您就不会花费额外的时间键入大括号,并且可以避免一些最常见的错误

      有足够的能源消耗的错误,人们只是不应该打开大门大浪费时间

      编写代码时要记住的最重要的规则之一是一致性。无论是谁编写的,每一行代码都应该以相同的方式编写。严格防止bug“发生”;)

      这与清晰明确地命名变量、方法、文件或正确缩进它们是一样的


      当我的学生接受这一事实时,他们不再反对自己的源代码,他们开始将编码视为一种真正有趣、刺激和创造性的活动。他们挑战他们的思想,而不是他们的神经

      我个人的偏好是混合使用空格和括号,如下所示:

      if(statement)
          do this;
      else
          do this;
      
      someVar= someFlag ? 'someVal1' : 'someVal2';
      
      if( statement ) {
      
          // let's do this
      
      } else {
      
          // well that sucks
      
      }
      

      我认为这看起来很干净,使我的代码很容易阅读,最重要的是-调试。

      我更喜欢放一个大括号。但有时,三元运算符有帮助

      代替:

      int x = 0;
      if (condition) {
          x = 30;
      } else {
          x = 10;
      }
      
      我们应该简单地做:
      intx=condition?30 : 20;

      再想象一个例子:

      if (condition)
          x = 30;
      else if (condition1)
          x = 10;
      else if (condition2)
          x = 20;
      
      如果你把大括号放进去会更好。

      我遵循的“规则”是:

      如果“If”语句正在测试以便执行某些操作(即调用函数、配置变量等),请使用大括号

      if($test)
      {
          doSomething();
      }
      
      这是因为我觉得你需要弄清楚调用了什么函数,程序的流程在什么条件下进行。让程序员准确地理解在这种情况下调用的函数和设置的变量是imp