你试着让你的代码看起来漂亮吗?

Sco*_*den 30

我可能是一个肛门程序员,但我喜欢从远处看起来很好的代码.我发现自己排队了一个CSS样式,而不是这样:

#divPreview {
    text-align: center;
    vertical-align: middle;
    border: #779 1px solid;
    overflow: auto;
    width: 210px;
    height: 128px;
    background-color: #fff"
}
Run Code Online (Sandbox Code Playgroud)

它现在看起来像:

#divPreview {
    width: 210px;
    height: 128px;
    overflow: auto;
    text-align: center;
    vertical-align: middle;
    border: #779 1px solid;
    background-color: #fff";
}
Run Code Online (Sandbox Code Playgroud)

我几乎总是按照大小的顺序写数字比较

if (0 < n && n < 10)
Run Code Online (Sandbox Code Playgroud)

代替

if (0 < n && 10 > n)
Run Code Online (Sandbox Code Playgroud)

最后我倾向于安排if-then-else代码,以便THEN部分小于ELSE部分(导致较重的东西到底部,对吧?)

if (afflicted == true) {
  GetSome();
  HelpRight();
}
else {
  NowPlease();
}
Run Code Online (Sandbox Code Playgroud)

啊!

if (afflicted == false) {
  HowMuchTrouble();
}
else {
  IsItToDo();
  ThisReally();
}
Run Code Online (Sandbox Code Playgroud)

aahhh

我可以继续讨论更多的例子,但你明白了......

问题:我这里的神经症患者一个人吗?什么是你的编码纠结?

Pyr*_*cal 75

任何使代码更改时重新排序的代码样式都很糟糕.

它会搞砸差异.您正在使用版本控制系统吗?

还有一些其他的东西可以使你的代码更漂亮,但搞砸差异.

想象一下这段代码:

int foo = 42;
int fooBar = 1024;
Run Code Online (Sandbox Code Playgroud)

现在让我们通过排列=符号来使它变得更漂亮:

int foo    = 42;
int fooBar = 1024;
Run Code Online (Sandbox Code Playgroud)

但接着我们添加另一个变量:

int foo              = 42;
int fooBar           = 1024;
String nowLetsBeEvil = 6400;
Run Code Online (Sandbox Code Playgroud)

现在,如果你做了一个差异,那么所有3行都会改变,只有最后一行才会改变.

还有更多,在方法之间排列参数是不好的

sqrt(x + y, x - z);
sqrt(x    , x    );
Run Code Online (Sandbox Code Playgroud)

逗号和分号很好地排成一行,但是如果你改变了代码,你将不得不手动重新格式化所有在一起的sqrt行并再次搞乱差异.

基本上,永远不要手动格式化.始终使用IDE或漂亮的打印机强制执行代码样式. 但是,当代码没有时,也永远不会选择格式会改变的代码风格

编辑:

如评论中所述,一些diff工具可以忽略行内的空格.这很棒,但并非所有diff工具都能做到这一点.如果要对齐字段或参数,请确保:

  1. 不是手动完成的
  2. 您的diff工具可以忽略空白更改

  • 我完全不同意.手动编写的代码意味着由人而不是机器读取.因此,它应该尽可能可读. (12认同)
  • 如果您正在使用像DiffMerge这样的理智差异工具,您可以告诉它忽略像"空白"这样的"不重要"差异. (8认同)
  • 真正的机器应该适合我们,因此我们也不应该手动修改格式. (3认同)
  • 我真的很讨厌未对齐的代码.这是完全不可读的,而且它经常是错误的来源,因为它使得更难以看出其中一行是否包含拼写错误. (2认同)

Mus*_*sis 23

根据我的经验,漂亮的代码通常可以很好地工作,而丑陋的代码通常会以难以置信的方式打破.这种关注代码看起来如何细节的心灵也是一种注重更重要细节的心灵.

也就是说,重新排序CSS样式的元素,以便它们短至长,这是疯狂的.


kro*_*old 20

总是在if-else语句中首先出现积极情况.美在于内.

if (afflicted) {
    GetSome();
    HelpRight();
} else {
    NowPlease();
}
Run Code Online (Sandbox Code Playgroud)

  • @Bryan; 我通常更喜欢退出方法以获得笨块.或者提取强壮的方法. (3认同)

g .*_*g . 16

让代码看起来"好"很重要,这就是为什么我们有常规和样式指南.它的目的是使代码易于阅读并使错误的代码看起来错误.我会说这里的一些例子超出了这个范围并增加了一些价值.

CSS属性的顺序

#divPreview {
        width: 210px;
        height: 128px;
        overflow: auto;
        text-align: center;
        vertical-align: middle;
        border: #779 1px solid;
        background-color: #fff";
}
Run Code Online (Sandbox Code Playgroud)

我会发现按属性顺序保持一致更有用,而不是确保它们按每个选择器的升序排序.该惯例使您更容易找到您正在寻找的那个.

条件顺序

你这里的例子对我有意义,因为它清楚地表明n在0到10之间.

if (0 < n && n < 10)
Run Code Online (Sandbox Code Playgroud)

if/else块的顺序

最后我倾向于安排if-then-else代码,以便THEN部分小于ELSE部分(导致较重的东西到底部,对吧?)

我认为首先要有积极的条件(或更多的预期条件)更有意义.并且"== true"位是多余的.

if (afflicted) {
  GetSome();
  HelpRight();
}
else {
  NowPlease();
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 10

我可能会更进一步,这样做:

#divPreview {
        width            : 210px;
        height           : 128px;
        overflow         : auto;
        text-align       : center;
        vertical-align   : middle;
        border           : #779 1px solid;
        background-color : #fff";
            }
Run Code Online (Sandbox Code Playgroud)

  • 我不喜欢那些悬挂的牙套,看起来很邋/ /不平衡...... (8认同)

Ste*_*owe 9

它应该是

if (!afflicted)
{
    HowMuchTrouble();
}
else 
{
    IsItToDo();
    ThisReally();
}
Run Code Online (Sandbox Code Playgroud)

买一个漂亮的打印机,并获得OCD治疗;-)


Bil*_*l K 5

我认为它有点不同.代码应该被格式化以便于阅读,不一定是"漂亮" - 尽管这两者通常可能是相同的.

但作为反案,

if(x != null)
    y=x.getParam();
else
    y=0;
Run Code Online (Sandbox Code Playgroud)

比更漂亮的东西更具可读性:

y = x == null ? 0 : x.getParam();
Run Code Online (Sandbox Code Playgroud)

我知道这一点是有争议的,我完全得到它,我喜欢那个运算符和所有,但对于95%的程序员(包括下一个读取你的代码),它将需要更多的解析.

事实上,我甚至遇到了红宝石相当优雅的问题:

y = x.getParam() if x
Run Code Online (Sandbox Code Playgroud)

仅仅因为我习惯于通过扫描代码的左行来查看控制语句.

我不得不承认,当我看到这种语法时,我的膝盖有点弱(我认为它来自hascal)

y = x?getParam();
Run Code Online (Sandbox Code Playgroud)

这是一种优雅的水平,甚至可以压倒我疲惫不堪的观念.

最后,虽然格式化可以非常巧妙地在代码中显示模式,但如果你的代码中甚至有模式,那么你可能做得不对.

只要代码中有模式,就要寻找重构机会.尝试识别数据并将其拉出,然后将模式的重复部分分解为某种消耗数据的循环.

顺便说一下,你的第一个例子是数据,而不是代码 - 数据也非常需要格式化 - 甚至可能更多.