gpt4 book ai didi

coding-style - 标签 "can be displayed completely differently on different types of systems and editors"?

转载 作者:行者123 更新时间:2023-12-04 23:20:54 25 4
gpt4 key购买 nike

在阅读反对使用标签的争论时,我遇到了这个( 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.



我对编程相对较新,我的代码中从未遇到任何选项卡问题,我使用过许多编辑器,包括 Notepad++、Programmer's Nodepad、Gedit、Kate、Sublime Text 等。我可能没有完成足够的编码为了达到这一点,因此问题是:

有人可以简单地解释一下引文所说的内容吗?标签的问题仍然相关吗?

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

最佳答案

我假设你想看一些例子,所以下面我列出了一些最常见的。

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

这是给 “在不同类型的系统和编辑器上的显示完全不同”部分。

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

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

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

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

缩进

假设有人在他们的编辑器中使用 tab width: 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.

由于制表符宽度不一致,因此 line with 现在也不一致。

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

这是给 “标签的语义不是很明确”部分。

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

但在某些情况下,制表符可能用于一些不同的东西。例如,在文字处理器中,tab 的意思是“移动到下一个制表位”,其中制表位是完全任意的(并且很可能不是相同宽度的事件)。

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

Document with tab stops

现在假设他们需要在其中粘贴一些代码片段。如果代码使用选项卡,则会发生以下情况:

Code in document with arbitrary tab stops

他们不能保持原样。他们必须修改代码以将制表符替换为空格。

结论

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

空间没有上述问题。

关于coding-style - 标签 "can be displayed completely differently on different types of systems and editors"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300205/

25 4 0