除了个人偏好之外,是否有最佳的标签大小(2个空格?3个空格?8个空格?)以获得代码可读性?在我参与的不同项目中,人们似乎有着截然不同的标准。我似乎无法阅读2个空格缩进,但像Google这样的公司将其用作标准。
任何人都可以指出文章,研究或有关选项卡最佳尺寸的合理论据吗?
如果我们想要具体,我主要在python中工作。这个问题的目标是为我工作的团队选择一个标准。
答案 0 :(得分:37)
Four spaces and no hard tabs,如果你是Pythonista。
答案 1 :(得分:12)
我喜欢8个空格(我知道,对吗?)。它使块的开始/结束非常明显。
关于您的问题,需要进行正式的可用性研究。我们来看看极限:
0个空格
function test(){
var x = 1;
for (i=0; i<=5; i++){
doSomething();
}
}
没有缩进显然是坏的。你不知道什么开始或结束。
19个空格
function test(){
var x = 1;
for (i=0; i<=5; i++){
doSomething();
}
}
压痕的负载显然也很糟糕,因为您无法将代码可视化地链接到其父函数或循环(或者您有什么),因为您的周边视觉不会延伸到那么远。你的眼睛必须来回摆动太多才能方便阅读。
8个空格
function test(){
var x = 1;
for (i=0; i<=5; i++){
doSomething();
}
}
我想我决定使用8个空格,因为'function'这个词的长度是8个字符。但它对可读性似乎非常有用。所有代码都在我的周边视觉中,如果我快速扫描,我就无法错过新代码块的开始。
答案 2 :(得分:5)
2 space 4 busy coder
3 space for heavy if statement using script kiddies
4 space for those who make real money pressing space 4 times
8 space for the man in ties and suit who doesn't need to code
答案 3 :(得分:4)
这种讨论经常涉及误解,因为(as jwz describes)它通常涉及三个不同的问题:
当我在文本编辑器中按 Tab 键时会发生什么?
当我请求我的编辑缩进一行或多行时会发生什么?
查看包含U + 0009 HORIZONTAL TAB字符的文件时会发生什么?
我的回答:
按 Tab 键应缩进当前行(或选定的行)一个额外级别。
作为第二替代方案,我还可以容忍一个编辑器,就像Emacs一样,使用此密钥进行上下文相关的fix-my-indentation命令。
如果共识足够强,缩小一行或多行应遵循执政惯例;否则,我非常喜欢每个级别的 4-space indentation 。
U + 0009个字符应将后续字符移至下一个制表位。制表位从第1列开始,相隔8列,没有例外。
答案 4 :(得分:2)
我不知道有任何研究会回答你的问题。我不认为这是非主观的,但我个人的偏好是4个空格。
答案 5 :(得分:2)
到目前为止,没有人提到这一点,所以我觉得我有义务发布一个。缩进大小的选择(我认为OP意味着什么)不仅会影响代码的缩进方式,还会影响代码中可以容纳多少代码以及它们如何对齐。
开发团队最终需要就线路长度达成某种协议。我从80列开始,到今天我仍然坚持80列。 AFAIK,stackoverflow也在源代码markdown中使用80列。
当你使用8的缩进级别,一个典型的嵌套3级深度的函数时,你的代码将从第24列开始。这使我只用了56个字符来编写一行代码。
以下是使用indent = 4的VLC中的某些代码:
msg_Dbg( p_libvlc, "Adds %s to the running media player", mrl );
free( mrl );
/* send message and get a handle for a reply */
DBusMessage *reply = dbus_connection_send_with_reply_and_block( conn, msg, -1,
&err );
dbus_message_unref( msg );
以下是indent = 8
的样子 msg_Dbg( p_libvlc, "Adds %s to the running media player", mrl );
free( mrl );
/* send message and get a handle for a reply */
DBusMessage *reply = dbus_connection_send_with_reply_and_block( conn, msg, -1,
&err );
dbus_message_unref( msg );
虽然大缩进使代码更容易阅读,但它也可以减少在嵌套代码环绕之前编写嵌套代码的空间。
将标签大小保持为8. tab!= indent非常重要。虽然很难将硬标签作为缩进,但它也会产生非常糟糕的后果。很多人也喜欢调整他们的代码。所以上面的代码看起来像tab = 4:
msg_Dbg( p_libvlc, "Adds %s to the running media player", mrl );
free( mrl );
/* send message and get a handle for a reply */
DBusMessage *reply = dbus_connection_send_with_reply_and_block( conn, msg, -1,
&err );
dbus_message_unref( msg );
您会看到第&err
行不再与上面的conn
对齐。当在每一行的末尾添加多个注释时,情况会变得更糟。
答案 6 :(得分:1)
过去我使用了3个空格。这仍然是我的偏好。但是4个空格似乎是VB世界的标准。所以我已经切换到4,以便与我看到的大多数代码示例以及我团队的其他成员一致。
答案 7 :(得分:1)
由于您使用的是Python,如前所述,您可以使用python的样式指南(PEP 8)建议:
压痕
Use 4 spaces per indentation level.
但Linux kernel CodingStyle说的不同:
标签是8个字符,因此 缩进也是8个字符。 有尝试的异端运动 缩进4(甚至2!) 人物深处,这类似于 试图定义PI的值 3.理由:缩进背后的整个想法是明确定义在哪里 一个控制块开始和结束。 特别是当你一直在看 你的屏幕连续20个小时, 你会发现它看起来更容易 如果你有缩进,缩进是有效的 大缩进。
本文档还提供了一些代码应如何显示的示例,以及标识如何更改(但它在C中)
答案 8 :(得分:1)
空格选项卡的参数是允许每个人自定义编辑器以查看他们想要的任何缩进级别。反对制表符的论点是,当他们混合制表符和空格时,很难发现(对于作者)。有时,您会希望不缩进制表符的行,这会导致混合制表符/空格。
使用2个空格具有以下优点:可以使用更多嵌套块(如果您还有行限制,这很重要),并且使用双缩进(即4个空格)可以很好地读取长行的方式。缺点是有时很难判断两行是否在同一个缩进处。
使用8个空格对2个空格有相反的优点和缺点。判断缩进级别很容易,但深度嵌套变得难以管理。许多人会认为后者的缺点是一个优势(因为它使深度嵌套不太理想)。
这两个极端之间有4个空格。
但我个人认为,你使用的缩进程度没有区别。最重要的是选择一些标准并坚持下去。正如其他人所说,如果你正在编写python,请关注PEP8,如果你正在编写java,请遵循Sun的java风格指南,如果你正在做linux内核黑客攻击,请遵循他们的风格指南。即使使用一个优于另一个也有一些小的优势,这是浪费能量辩论的选择。做出决定,然后继续学习软件工程的有趣部分。
答案 9 :(得分:0)
我总是使用一个标签作为两个空格。
答案 10 :(得分:0)
我读到2个空间实际上是最佳的,基于一项研究,程序员被要求根据缩进来估计嵌套水平,但当被问及时,程序员认为4是最佳的。需要引文,但找不到它。
答案 11 :(得分:0)
我想我记得在Code Complete中有一个关于缩进的部分,引用了一些关于哪种级别的标识使代码最具可读性的研究,但我现在没有它的副本,所以我无法检查它。
答案 12 :(得分:-1)
我认为4个标签空间使代码更具可读性......至少就我在项目选项卡上工作而言,4空间是最舒适的选择....