Python 代码可读性的最佳选项卡大小

Python 代码可读性的最佳选项卡大小,python,readability,Python,Readability,撇开个人偏好不谈,对于代码可读性是否有一个最佳的标签大小(2个空格?3个空格?8个空格?)?在我从事的不同项目中,人们的标准似乎大不相同。我似乎看不懂2个空格缩进,但像谷歌这样的公司将其作为标准 有人能指出文档、研究或合理的参数来确定选项卡的最佳大小吗 如果我们想更具体一些,我主要使用python。这个问题的目的是为我工作的团队选择一个标准。我不知道有任何研究能够回答你的问题。我不认为这是一种非主观的方式,但我个人的偏好是4个空格 我一直使用一个选项卡作为两个空格 我喜欢8个空格(我知道,对吧?

撇开个人偏好不谈,对于代码可读性是否有一个最佳的标签大小(2个空格?3个空格?8个空格?)?在我从事的不同项目中,人们的标准似乎大不相同。我似乎看不懂2个空格缩进,但像谷歌这样的公司将其作为标准

有人能指出文档、研究或合理的参数来确定选项卡的最佳大小吗


如果我们想更具体一些,我主要使用python。这个问题的目的是为我工作的团队选择一个标准。

我不知道有任何研究能够回答你的问题。我不认为这是一种非主观的方式,但我个人的偏好是4个空格

我一直使用一个选项卡作为两个空格

我喜欢8个空格(我知道,对吧?)。它使块的开始/结束非常明显

至于你的问题,需要进行正式的可用性研究。让我们看看限制:

0个空格

function test(){
var x = 1;
for (i=0; i<=5; i++){
doSomething();
}
}
function test(){
                   var x = 1;
                   for (i=0; i<=5; i++){
                                      doSomething();
                   }
}
function test(){
        var x = 1;
        for (i=0; i<=5; i++){
                doSomething();
        }
}
功能测试(){
var x=1;

对于(i=0;i,如果你是Pythonista。

根据一项研究,我读到2个空格实际上是最佳的,该研究要求程序员根据缩进估计嵌套水平,但当被问到时,程序员认为4个是最佳的。需要引用,但找不到它。

过去我使用3个空格。这仍然是我的偏好。但是4个空格似乎是VB世界的标准。因此,为了与我看到的大多数代码示例以及我的团队的其他成员保持一致,我选择了4个空格。

这个讨论经常会产生误解,因为()它通常涉及三个不同的问题:

  • 在文本编辑器中按Tab键时会发生什么

  • 当我请求编辑器缩进一行或多行时会发生什么

  • 当我查看包含U+0009个水平制表符的文件时会发生什么情况

我的答案是:

  • 按Tab键应将当前行(或选定行)缩进一个附加级别

    作为第二种选择,我还可以容忍编辑器像Emacs一样,将此键用于上下文敏感的fix my indentation命令

  • 如果一致性足够强,缩进一行或多行应该遵循主导惯例;否则,我非常喜欢在每个级别上缩进4-空格

  • U+0009个字符应将后续字符移动到下一个制表位。制表位从第1列开始,相隔8列,无例外


我想我记得在中有一节是关于缩进的,引用了一些关于哪个级别的识别使代码最具可读性的研究,但是我现在没有它的副本,所以我无法检查它。

因为您使用的是Python,正如前面所说,您可以接受Python的style guide()建议:

压痕

Use 4 spaces per indentation level.
但报告说,情况不同:

制表符为8个字符,因此 缩进也是8个字符。 有一些异端运动试图 要制作缩进4(甚至2!) 字符很深,这与 试图将PI的值定义为 3.理由:缩进背后的整个理念是明确定义缩进的位置 控制块开始和结束。 尤其是当你看到 您的屏幕连续显示20小时, 你会发现更容易了解怎么做 如果有,缩进可以工作 大的凹痕


本文档还提供了一些示例,说明代码应该是什么样子,以及标识是如何改变的(虽然是在C中)

制表符覆盖空格的论点是,它允许每个人自定义他们的编辑器,以查看他们想要的缩进级别。反对制表符的论点是很难发现(对于作者而言)当它们混合了制表符和空格时。有时您会希望行不缩进到制表位,这会导致制表符/空格混合

使用2个空格有以下优点:可以有更多的嵌套块(如果有行限制,这一点很重要),并且使用双缩进(即4个空格)是包装长行的一种可读性很好的方式。缺点是有时很难判断两行是否在同一缩进

使用8个空格与使用2个空格的优缺点相反。很容易判断缩进级别,但很难管理深嵌套。许多人会将后一个缺点视为优点(因为这会降低深嵌套的可取性)

4空间介于这两个极端之间


但我个人的看法是,你使用的缩进级别没有区别。最重要的是选择一些标准并坚持它。正如其他人所说,如果你在写python,遵循PEP8;如果你在写java,遵循Sun的java风格指南;如果你在做linux内核黑客,遵循他们的风格指南使用一个标签空间比使用另一个标签空间有一些小的优势,争论选择哪一个是浪费精力的。做出决定,然后转到软件工程中有趣的部分。

我想4个标签空间使代码更具可读性……至少就我在项目中的工作而言,4个标签空间是最舒适的选择。。。.

到目前为止,还没有人提到这一点,所以我觉得我有义务发布一个。缩进大小的选择(我认为OP的意思)不仅影响代码缩进的方式,还影响代码在一行中可以容纳多少代码以及它们如何对齐

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
开发团队最终需要就行的长度达成某种协议。我从80列开始,直到今天我仍然坚持使用80列。好了,stackoverflow在源代码降价中也使用了80列

当使用缩进级别为8的典型函数嵌套3级时,代码将从第24列开始
            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 );
                        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 );
            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 );