编码风格 – 标签“可以在不同类型的系统和编辑器上完全不同地显示”?

在阅读反对使用Tabs的论点时,我遇到了这个( source):

…it can be a good idea to avoid tabs alltogether, because the semantics of tabs are not very well-defined in the computer world, and they can be displayed completely differently on different types of systems and editors.

我对编程比较陌生,从来没有在我的代码中遇到任何标签问题,而且我使用了许多编辑器,包括记事本,程序员的Nodepad,Gedit,Kate,Sublime Text等.我可能没有做足够的编码达到这一点,因此问题:

有人可以用简单的语言解释一下引用的内容吗?标签的问题是否仍然相关?

请注意,我不是在问我是否应该在代码中使用制表符或空格.我只是在理性解释了我遇到的针对标签的特定论点之后.

我想你想看一些例子,所以我已经列出了一些最常见的例子.

问题#1:标签宽度不一致

这是为了“在不同类型的系统和编辑器上完全不同地显示”部分.

即使假设所有系统和编辑器(您的代码将显示在其上)同意相同的选项卡语义:“向右移动直到当前列是N的倍数”,N是任意的.

历史上这个N的“标准”是8,但现在大多数人将他们的编辑器配置为4或2以“看起来更好”.

这是标签宽度不一致问题的来源.

我将在我的示例中使用制表符宽度2和8来使差异更加直观,但同样适用于其他宽度.

缩进

让我们说有人在他们的编辑器中使用制表符宽度:2.他们看到这样的代码:

class Foo:
  def doSomething(a):
    if test(a):
      // some nice comment
      // about this
      bar(a)

现在有人在使用标签宽度为8的终端中读取此代码.他们看到如下代码:

class Foo:
        def doSomething(a):
                if test(a):
                        // some nice comment
                        // about this
                        bar(a)

有人可能会认为这不是很愉快.

对齐

到目前为止,我们已经看到缩进不一致.但有些人还喜欢对齐代码,例如作业,评论.

标签宽度2再次:

class Foo:
  def do_something(a):
    if test(a):
      foo     = a.foo     // some nice comment
      foo_bar = bar(foo)  // about this
      bar(a)

其他人在标签宽度为8的环境中再次阅读此内容.让我们说他们需要将此片段发布到网络并使用< pre>标签.浏览器默认使用“标准”选项卡宽度8,代码如下所示:

class Foo:
        def do_something(a):
                if test(a):
                        foo                     = a.foo                 // some nice comment
                        foo_bar = bar(foo)      // about this
                        bar(a)

他们不能按原样张贴.他们必须修改代码以将标签替换为空格.

线长

大多数编码标准定义了最大线宽.

让我们以最大线宽80为例.

使用标签宽度2的人可能会看到此代码完全符合标准.对于它们,最长的线宽为74(可见宽度,而不是行长度,以字节为单位,为72).

class Foo:
  def do_something(a):
    // Some very nice comment about code bellow using more then few words.

使用制表符宽度8(例如在终端中)的其​​他人将看到与不符合相同的行,因为现在最长的行宽为86:

class Foo:
        def do_something(a):
                // Some very nice comment about code bellow using more then few words.

由于标签宽度不一致,因此行与现在也不一致.

问题#2:Tab在任何地方都不一样

这是针对“选项卡的语义不是很明确”的部分.

到目前为止,我们假设每个人都使用制表符“向右移动,直到当前列为N的倍数”.

但在某些情况下,制表符可能会用于某些不同的东西.例如,在单词处理器中,选项卡表示“移动到下一个制表位”,其中制表位完全是任意的(并且很可能不是具有相同宽度的事件).

例如,假设某人正在编写使用制表位的文档:

现在让我们说他们需要在其中粘贴一些代码片段.如果代码使用制表符,则会发生以下情况

他们不能保持原样.他们必须修改代码以将标签替换为空格.

结论

正如您所看到的,不同上下文中的选项卡可能会使代码从轻微变为完全不可读.

空间没有上述问题.

相关文章
相关标签/搜索