为什么代码中的表格布局被认为是错误的原因是什么?

ste*_*tej 5 .net c# coding-style

我的同事告诉我,基于表格的代码格式很糟糕,而且没有可读性,我应该遵循惯例.基于表格的格式有什么不好?为什么禁止它?

我问,因为对我来说它更具可读性.

示例(不是真实代码):

if (res == ResultType.Failure)               
  something = ProcessFailure(..);
if (res == ResultType.ScheduledAndMonitored) 
  something = DoSomething(...) && DoSomething3(..);
if (res == ResultType.MoreInfoAvailable)     
  info = GetInfo(..);
if (res == ResultType.OK && someCondition)   
  something = DoSomething2(..);
.... continued
Run Code Online (Sandbox Code Playgroud)

与

if (res == ResultType.Failure)               something = ProcessFailure(..);
if (res == ResultType.ScheduledAndMonitored) something = DoSomething(...) && DoSomething3(..);
if (res == ResultType.MoreInfoAvailable)     info      = GetInfo(..);
if (res == ResultType.OK && someCondition)   something = DoSomething2(..);
.... continued
Run Code Online (Sandbox Code Playgroud)

为什么我认为第二个更好:

  • 我不需要用眼睛解析文本 - 我一眼就能看出命令的结构.
  • 我立即看到了
    • 有一些ifs和作业
    • 条件中使用的枚举是ResultType,仅此而已
    • 只有最后一个条件是由两个表达式组成的

更新:这不是真正的代码.我只想展示一些例子.考虑它就像是一个旧代码,有人在前一段时间写过,你需要阅读它.为什么第一种格式优先于第二种?

Pet*_*ore 13

当你的同事说你应该遵循惯例时,这是否意味着你的团队有格式约定?如果是这样的话,那就足够了.当每个人以相同的方式格式化他们的代码时,更容易阅读你的队友的代码.

  • 这是一个很好的观点,它已经向我描述如下:哪条路是开车的右侧?只要每个人都以正确的方式做到这一点并不重要. (2认同)

Rob*_*vey 5

您描述的"基于表格"的布局在某些情况下非常有用:

public string GetMessageFromErrorCode(int code)
{
    switch (code)
    {
        case 1: return "OK";
        case 2: return "Syntax Error";
        case 3: return "Other error";
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,此示例是c#规则的有效例外,"所有case语句也必须包含break".

我不喜欢对代码布局严格要求.遵循编码标准是一件好事.但是一旦你开始做一些事情,比如在函数调用中使用带有长名称的几个参数,编写linq查询,或使用匿名方法或复杂的lambda语句,它可以使你的代码更具可读性,不时违反规则.

另请参阅:
匿名方法/ Lambda(编码标准)


Caf*_*eek 5

原因很简单.

如果你使用空格来缩进所有内容,并使其成为阵容,那么当变量或条件发生变化时保持内联是一件痛苦的事.您必须手动进入并添加/删除空格.

如果您使用制表符缩进所有内容并使其成为阵容,则在每个人的计算机上看起来都不一样,因为不是每个人都将其标签设置为相同的宽度.有些人将它们设置为3个字符,其他人设置为5个字符,其他人设置不同 在你的机器上看起来漂亮整洁,"像桌子一样"看起来像是乱七八糟.

在if执行的语句周围抛出大括号,并正常格式化.

if (res == ResultType.Failure)               
{
  something = ProcessFailure(..);
}

if (res == ResultType.ScheduledAndMonitored) 
{
  something = DoSomething(...) && DoSomething3(..);
}

if (res == ResultType.MoreInfoAvailable)     
{
  info = GetInfo(..);
}

if (res == ResultType.OK && someCondition)   
{
  something = DoSomething2(..);
}
Run Code Online (Sandbox Code Playgroud)

哦,另一个原因是,并非每个人都使用固定的字体进行编程.信不信由你,一些开发人员使用比例字体.

  • @stej,不,当然是.不是每个人都有这个插件.为什么要使查看代码所需的环境比必要的更复杂? (2认同)