【问题标题】:When should we insert blank line(s) in source code?我们什么时候应该在源代码中插入空行?
【发布时间】:2011-04-14 09:54:29
【问题描述】:

我不确定应该在源代码中的何处添加新的空行。我想编写既易于阅读又易于理解的漂亮代码。

它是仅基于对象还是基于概念?带有示例的答案对我最有帮助。

【问题讨论】:

  • 我的偏好/实践是每当某件事在逻辑上完成或以空行分开时。我从不将ifelse 分开。
  • 这是一个最终的判断电话,但请记住,太多的空白永远不会伤害任何人。太少就不是这样了。
  • @CodyGray 实际上,Code Complete 2 引用了一项研究,称超过 16% 的空行显着增加了调试时间。
  • 没有代码示例的答案太多了!

标签: language-agnostic coding-style


【解决方案1】:

我个人不会使用太多垂直空格 - 其他人会推荐比我在下面描述的更多。只要在不同的事物之间有某种视觉上的分离,我就想看代码,而不是空行。我倾向于说:

  • 非成员函数之间的一个空行(在 C++ 中,在类外部定义的成员函数之间)
  • 类之间有一个空行。
  • cmets 前后的一个空行,与后面的多个函数/类相关,即在代码中定义“部分”:“用于 XML 处理的辅助函数”,诸如此类的注释。
  • 类中的成员函数之间没有空行
  • 函数内通常没有空行。如果一个函数分为几个阶段,我可能会在它们之间放置空行,或者只是在它们之间添加注释来解释这些阶段。很长的函数更有可能以这种方式被空格分解,并不是说我认为很长的函数是一件特别好的事情。如果一个成员函数确实有内部空行,我通常也会用空行将它与类中的其他成员函数分开。

两个连续的空白行在我看来有点可疑,而我自己几乎从不这样做。三是在我的显示器上浪费了非常好的空间 - 任何想要分开的东西都应该 IMO 将它们放在不同的文件中。

用于自动文档的注释块(Javadoc、Doxygen、Pydoc 等)也提供视觉分离 - 比几行空白更有效,比任何数量的空白都更有效。

当您在团队中工作时,复制您修改的任何文件的样式。不要重新格式化它以匹配您自己的偏好,不要使用您喜欢的格式添加新代码。要么同意房屋风格,要么就接受它。

【讨论】:

  • 我猜你喜欢的牙套样式吗? K&R
【解决方案2】:

我认为这是个人喜好或公司标准的问题,但在办公室里,即使我们有一些指导方针,每个人都有自己编写代码的方式,而空格是区别之一。

我更喜欢使用大量的空行。每次我的代码上下文发生变化时,我都会将此部分与上一个和下一个分开,并在之前注释整个块。

【讨论】:

    【解决方案3】:

    这取决于您自己的偏好或您公司的指导方针,您必须创建回车符。事实上,这样的指导方针也会决定你在哪里放置空格、标签以及你的呼吸方式。好吧,也许不是最后一个。

    如果您是一个人,并且想要简洁的编码方式,您总是可以考虑实施 Microsoft StyleCop。它可以控制您的编码习惯,您可以根据需要对其进行配置。

    【讨论】:

      【解决方案4】:

      就像每个人都表示每个人都有自己的方法一样。就我而言,我喜欢坚持做一些事情。

      超过一行的 cmets 前后的空白行。

      每个类前后至少有两个空行。

      函数由一行分隔。

      其他空行更可选。这里的问题是我喜欢 cmets 和 classes 脱颖而出。通常,适当的缩进会满足大多数其他需求。这里的诀窍是不要浪费垂直空间,除非你必须这样做。

      如果您必须使用其他人的代码,我认为如果他们遵循相同的空白时间表,您会很高兴。迷失在函数或类定义中可能会很麻烦。

      【讨论】:

        【解决方案5】:

        这可能是偏好或房屋风格的问题。

        我在函数之间以及较大的函数调用中的逻辑块之间包含空行。

        【讨论】:

          【解决方案6】:

          我的代码标准是:

          • 在每个 if / else 语句结束后(最后一个}
          • 在每个方法之后
          • 每个属性后由多行组成
          • 字段集合后

          示例:

              string a = "Note: ", b= "This", c= "A", d= "String", e= "Test";
              int f=1, h=1;
          
              string A { Get; Set; }
              string B { Get; Set; }
              string C { Get; Set; }
          
              string D 
              { 
                  Get 
                  {
                      Return this.d; 
                  }
                  Set 
                  { 
                      if (value == "Foo")
                      {
                         // DoSomething
                      } 
          
                      this.d=value; 
                  }
              }
              //empty line
          

          【讨论】:

            【解决方案7】:

            查看 StyleCop 以了解源代码布局:http://stylecop.codeplex.com/
            我还推荐 FxCop 或 ReSharper。
            还有,Control K 和 D 布局文档但不整理空行?

            【讨论】:

              【解决方案8】:

              如果一个函数太复杂以至于我们考虑添加空行以使其更易于理解,那么它可能需要一些重构,而不是空行。

              即,考虑这个简化的 php sn-p:

              function doStuff(){
                  $a = new A();
                  $result = $a->foo();
              
                  $b = new B();
                  $result += $b->bar();
              
                  return $result;
              }
              

              在我看来会更好:

              function doStuff(){
                  $result = $this->processA();
                  $result += $this->processB();
                  return $result;
              }
              

              通过这种方式,您仍然可以提高可读性,而不会浪费文件空间。

              我经常使用笔记本电脑工作,不得不在文件中滚动很多内容非常烦人。如果代码可以干净,避免不必要的空行,开发和理解会更快。

              【讨论】:

                猜你喜欢
                • 2021-09-07
                • 1970-01-01
                • 1970-01-01
                • 2011-07-04
                • 2016-11-11
                • 2011-03-21
                • 2017-09-13
                • 2021-12-29
                • 2011-07-17
                相关资源
                最近更新 更多