Formatting 设置代码格式的正确方法是什么?

Formatting 设置代码格式的正确方法是什么?,formatting,Formatting,当我编写代码时,我尝试将类似代码的行组合在一起,然后留下一个空行并编写另一个块 我相信这有助于代码的整洁性和可读性 我不太喜欢没有任何行距把东西聚在一起。它看起来像地狱,很难阅读,也很难理解 我的一位老师把我的一个作业降级了,因为我把代码按逻辑隔开了。他说,‘当你必须在现实世界中整天阅读代码时,你不会把这个行距加进去,你会感谢我。’当然,我从来没有也永远不会感谢他 现在我在现实世界中,我看到的绝大多数没有行距的代码文件都写得很差,考虑得也很差 这在VB类型语言中可能比在C类型语言中更普遍,但同样

当我编写代码时,我尝试将类似代码的行组合在一起,然后留下一个空行并编写另一个块

我相信这有助于代码的整洁性和可读性

我不太喜欢没有任何行距把东西聚在一起。它看起来像地狱,很难阅读,也很难理解

我的一位老师把我的一个作业降级了,因为我把代码按逻辑隔开了。他说,‘当你必须在现实世界中整天阅读代码时,你不会把这个行距加进去,你会感谢我。’当然,我从来没有也永远不会感谢他

现在我在现实世界中,我看到的绝大多数没有行距的代码文件都写得很差,考虑得也很差

这在VB类型语言中可能比在C类型语言中更普遍,但同样的概念也适用

我想到两个问题:

  • 您在代码中的什么地方留下空行
  • 多少行间距太大

在我看来,在代码中添加空格暗示您应该将函数拆分为更小的部分。通过添加空格来清理代码比一英里长的未拆分行列表更可取。通过拆分更小的函数来清理代码更好。

我遵循

编辑:是不要与IDE对抗。如果点击
CTRL K+D
,IDE将自动在代码段之间放置空行

接下来,如果您查看或上的C#示例代码,通常在每个逻辑放置的组之间有一个空行。因此,在所有成员变量之后会有一个空行,在每个方法之后会有一个空行,等等

对于我使用IDE进行C#编程的评论表示震惊和恐惧:


真正的程序员

我想我也会做类似的事情,但没有硬性规定。我喜欢将代码间隔在分组/相关逻辑的“段落”中


没有多余行距的代码阅读起来很糟糕。

垂直空间通常比水平空间更重要,所以过多的行距通常不是一个好主意。我确实认为用一个空行在逻辑上分隔代码块是一个好主意


听起来你的老师大多是个混蛋。俗话说,“能者,事竟成;那些做不到的人都在学习。" ;)

我们有一个编码标准,规定我们不应该在一行中放置多个空行。其他一切都取决于开发人员。实际上,我们按照你说的做-尝试将逻辑连接的行分组,并用空行将它们隔离。

因为我们没有你个人关于“逻辑”行距的想法的例子,所以我们不能真正说你是否应该降级


我倾向于在设置间距(如变量声明、循环等)之前将类似的语句或步骤按顺序分组。

我已经开始遵循Microsoft的设计指南:


我使用的行距与您非常相似。
我在现实世界中发现的代码往往布局相似,或者至少不是太密集以至于无法阅读。

使用一些小方法,以获得低成本。方法中的高圈复杂度通常意味着您的方法必须被划分为几个其他的子方法,这将更容易阅读,也更容易测试

我认为您的代码正面临这种问题

通常,一个有100多行代码的方法太大太复杂,必须重构

总而言之,与其用行空格分隔代码,不如将其拆分为单独的方法…

我的经验法则是:

在块之间放置一个空行 可以用一个 评论


但一般来说,我同意许多带有大量空白的大函数应该被分解成更小的函数。

听起来我在代码行中使用了类似于您的空格

但这是一个不相关的个人偏好,每个人都会有自己的“正确方式”去做。IMHO,最重要的事情是适应你即将进入的环境的风格

此外,在“真实世界”中,您还会发现类似的代码。。。但听起来你有更高的抱负


编辑:。。。不是比“现实世界”更高的抱负,而是比“现实世界”中常见的平庸垃圾更高。。。然而,如果你确实比“现实世界”有更高的抱负,你可能会想找一位专业人士

基本上和其他人说的一样。COBOL对于什么是句子和段落有非常明确的规则。我想,在我的脑海里,我遵循这些。如果你有一个大的If语句,你没有把句点放在嵌套的最后。类似地,我在最后一个}//end if后面放了一个空行


是的,我把//end if、//end for、//end方法的东西放在那里。我认识的一些声音更大的人不喜欢,但我喜欢。他们说你不应该把你的if语句写得太大,如果你需要结束if的东西,你可能编码错了,而我不需要它,但我确实发现它更容易阅读。叫我老式的,强迫症,随便什么。

除非你对垂直间隔发疯,否则我认为把代码分开没有问题。我知道人们喜欢反复考虑使用小方法的想法,但是即使你的方法只做一件事,那件事也可能需要很多代码才能完成。并非所有的事情都能在一屏代码中完成。

你的老师可能有一半是对的,在现实世界中,你没有行距。当然,在我遇到的大量的泥代码基础上,如果你得到一行空间,更不用说解释的注释了,你是幸运的

作为73年的一个例外
/* This section preps the widgets for display */
block 
of some 
code

/* This section passes the widgets to the display handler */
and 
so 
on
public static void Startup(bool startupUser)
{
    URI = "";
    AutoComplete = new AutoCompleteWrapper();
    SessionToken = Guid.Empty;
    ExternalDataSetLock = new object();

    ConfigDS.Init();
    CalendarDS.Init();
    CalendarDSBuilder.Init();

    if (startupUser && UserName != null)
    {
        string autoCompleteFilename = Path.Combine(UserFolder, "autocomplete.xml");
        AutoComplete.Load(autoCompleteFilename);
    }
}