请告诉我,下面这种风格的神圣力量是什么:
var javascript = new Language(
'Brendan Eich'
, new Date(1995, 0, 1)
, ['C', 'Java', 'Scheme']
);
Run Code Online (Sandbox Code Playgroud)
为什么许多程序员使用这种风格?它有什么好处?例如,
var javascript = new Language(
'Brendan Eich',
new Date(1995, 0, 1),
['C', 'Java', 'Scheme']
);
Run Code Online (Sandbox Code Playgroud)
我比以前更喜欢.谢谢.
YoY*_*nnY 14
已经有很多很棒的答案了.请允许我给你自己的,尽可能清楚.
我个人称之为编写代码'Haskel style'的方式,因为它是在Haskell中使用的常见样式.让我先给你一个Haskell示例:
data Settings = -- The user settings
{ has_sound :: Bool -- Determines if the user has sound
, has_power :: Bool -- Determines if the user has electricity
, has_graphics :: Bool -- Determines if the user has graphics
, user_name :: String -- The name of the user
, user_password :: String -- The hashed password of the user
, user_email :: Email -- The email address of the user
, stylesheet :: Style -- The stylesheet to use
}
Run Code Online (Sandbox Code Playgroud)
以及我的一个项目的Javascript代码段:
var events // Holds the events to generate a event handler for.
, var2 // Quick description for var2.
, var3 // Quick description for var3.
, ... // ...
;
events = // Event handlers will be generated for the following events:
[ "onmousedown" // Works outside of the window element
, "onmouseup" // Works outside of the window element
, "onmousemove" // Works outside of the window element
, "onmousewheel" // This will handle DOMMouseScroll aswell
];
Run Code Online (Sandbox Code Playgroud)
'Haskell style'利用了列样式布局.此列样式使您的代码更具可读性.实际上,它使您的代码更具可读性,因此您始终可以使用它.想象一下编写没有标签或前导空格的代码!
通过利用列样式布局,变量名称,类型等也更容易阅读.通过按前缀对变量进行分组,我们未来的读者可以轻松找到他要查找的内容,而无需使用高级搜索查询.
列样式布局具有更多优点.通过对我们的代码进行分组,我们可以添加一个为注释保留的列.现在您可以在不需要颜色突出显示的情况下阅读代码,并且在评论中添加信息就像找到正确的列并进行修改一样简单.此外,这种类似列的样式记录您的代码几乎是您使用像Doxygen这样的文档生成器后得到的,消除了这种工具的必要性.
注意到缺少逗号是使用这种编码风格的小菜一碟.只需寻找一条不以它开头的线!另一方面,我们在行尾有逗号.我们错过了一个?不,因为它是最后一个元素,或者因为表达式在下一行继续.找到列表中的第一个元素就像是一样容易.当用长线条处理,第一个元素很容易被忽略,但通过将第一个元素在它自己的线和puting一个[
或{
代替,
在它的右前方,很容易被发现.
您可能会说"但是一旦表达式变大,这种布局样式将无法处理!",这是完全正确的,但这对于其余代码有什么不同吗?我认为通过使用列样式,您至少可以保持代码的可读性,从长远来看,这比您可能需要将其适合列布局更有价值.
var scalable = // This is a example variable
[
[ new MyObject // This is how I would style Object Allocation
( "11"
, "This is the first element"
, function // This is a very secret function...
( secret // ..with secret..
, variable // ..variable..
, names // ..names!
)
{
// <-- Use spaces, not tabs :)
}
)
, "12"
]
,
[ { id: 21 // Where's 20?
, name: "This is the third element" // It sure is
, func: function() { /* My body feels empty :c */ }
}
, "22" // Notice how 21 is a integer, not a string. Sneaky!
]
];
Run Code Online (Sandbox Code Playgroud)
这种放置逗号'Haskell风格'的风格有几个优点:
Koe*_*ers 12
这是因为逗号属于新行下一个语句而不是前一个语句.(正如@Dave Newton在下面的评论中所述:伪BNF将是foo [,foo]* - ish)
例如:
如果你有这个:
a,
b,
c
Run Code Online (Sandbox Code Playgroud)
如果你需要删除c
那么你需要删除两件事:de c
和前一行的逗号.如果你这样做:
a
,b
,c
Run Code Online (Sandbox Code Playgroud)
现在你只需要删除c行.这种方式更有意义,因为b
第一个例子背后的逗号只是需要因为c
.尽管如此,它确实看起来更糟.这是代码的可维护性和外观之间的权衡.
Mar*_*nze 12
如果你在最后一行的末尾有一个额外的逗号,它将在某些浏览器中运行,但不适用于所有浏览器.使错误比开头的额外逗号更难检测(在所有浏览器上都失败).大多数开发人员更喜欢立即看到错误(因此他们可以修复它),而不是冒着生产问题而无意中不支持某些浏览器.特别是如果解决方案就像删除逗号一样简单.
另外,在行的开头加上逗号,可以更简单地在末尾添加一行,并且您只需要触摸该行(您不需要在行之前添加逗号).如果您使用版本控制(例如diff,annotate,bisect),这一点很重要.有人可以争辩说,在数组或对象的开头添加一行将需要触摸2行的相同额外工作(如果你在开头使用逗号),但根据我的经验,在开头插入一行不太可能在末尾插入一行.
我认为这样做可以更容易发现错过的逗号.
var something = 0,
foo = "a string",
somethingElse = []
bar;
var something = 0
, foo = "a string"
somethingElse = []
, bar;
Run Code Online (Sandbox Code Playgroud)