85

我在 SO 上看到了几个字体主题,似乎大多数人使用等宽字体进行编程任务。几年来我一直在使用 Verdana 进行编程,我真的很喜欢增强的可读性,并且不会错过任何与等宽相关的内容。

为什么要使用等宽字体?

4

15 回答 15

109

在等宽字体中:

  • 等长字符串文字看起来相等。
  • 更容易看到细小的标点符号,例如 : () {}
  • 相似的字符看起来更不同:Il 0O vsIl 0O
  • 您知道一行是否会在窗口 X 字符宽上换行。这意味着您的团队可以将 100 个字符行标准化,并且一行总是看起来像一行
于 2008-10-20T14:30:13.900 回答
107

我以前从未考虑过使用比例字体进行编码。所以为了科学的利益,我只是换了我的编辑来试一试。

以下是修复几张简单票后的一些观察结果:

  • 代码似乎非常密集。我的大部分代码大约有 80 列,很少超过 100 列。比例字体将其压缩到编辑器左侧的一个小条上。如果你的屏幕空间很短,也许很有用,但它似乎不必要地紧凑。
  • 代码的“纹理”丢失了。很难说出我在看什么样的结构——它只是一大块文本,需要几乎逐个字符地阅读。
  • 很容易错过. _ (如果(!foo),看!)!if (!foo)
  • 标点符号的定义非常糟糕。许多很难区分({}[]()vs {}[]())
  • 一些标点符号比其他标点符号大得多,从而推断出不打算强调的地方($@%与 $@% 相比)
  • 有些字符窄,很难识别('"!;:,.vs '"!;:,.)
  • 一些数字和字母非常相似(0Oo iIlvs 0Oo iIl)
  • 非常依赖语法高亮,没有它几乎不可能做诸如确认引号是平衡的等事情。
  • 对齐(除了简单的缩进)完全被破坏了。您可以通过添加额外的空格来调整它,但由于字体的比例特性,线条可能不会完全对齐 -代码看起来更混乱
  • 正则表达式是……有趣!

不过,也一些积极的方面。诚然,我只使用了一段时间,但肯定有一些方面在使用比例字体时效果更好:

  • “单词”更容易阅读——拼写错误(例如,变量拼写错误)会突然出现。
  • 我对使用更长、更具描述性的变量名感觉更好(也许是因为它们扫描得更好,也许是因为文本的水平大小被压缩了)
  • 阅读这样的代码似乎稍微容易一些。我的大脑更容易“标记”每个单词并理解其含义。虽然因为标点符号更难阅读,但它仍然很难 - 但如果有一点时间习惯它,可能会改变

明天我会再次更新这个答案(假设我能像这样度过一整天!)

于 2008-10-20T15:06:25.777 回答
29

我喜欢排列相关的条件句,试图让它们更明显地被分组。例如:

if ((var1 == FOO) && ((var2 == BAR) ||
                      (var2 == FOOBAR)))

可变宽度字体使这变得更加困难。

于 2008-10-20T14:30:41.777 回答
23

我在这里一直看到的一件事是关于“排列代码”和缩进的讨论。我想指出以下几点:

  • 在任何字体中,八个空格的长度始终是四个空格的两倍。
  • 在任何字体中,两个选项卡的长度总是一个选项卡的两倍。
  • 一行上的任何标识符在下一行上总是相同的宽度......在任何字体中!
  • 当然,如果你的队友使用的是等宽空间,而你没有,它看起来会有所不同……但你应该对某些东西进行标准化——不管它是什么——如果这是真的,那么每个人看起来都是一样的。 ..任何字体!对于笑声,您还可以尝试让每个人都在等宽屏幕上,并给其中一半人提供宽屏显示器……看看情况如何。
  • 如果您所做的任何事情都依赖于根据屏幕上这些字符的列位置而不是您使用的标识符的范围来排列代码,那么我认为您正在做的事情是一种黑客行为。标识符永远不应该以牺牲名称质量为代价限制在一定数量的字符上。除此之外……您还没有在代码中绘制带有星号的 ASCII 框来表示注释,是吗?

所以把所有这些画在一起,如果你在同一个地方开始每一行,并且一致的间距是相同的宽度,并且标识符不会自发地改变每行的宽度,那么你的代码实际上会排成一行!...直到有什么不同。

例如:

identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
  • 标识符.Method().Property.ToString();
  • 标识符.Method().OtherGuy.ToString(); //不好了!错位!
  • identifier.Method().Sumthing.YouGetThePoint; //...但谁在乎?它们是不同的属性!

我要承认的一点是,非字母数字字符通常不是很宽。这些包括 )(][}{,:|";',`! 和 。然而,这可以在字体编辑器中修复......只需使它们更宽。这不是非等宽固有的问题;只是没有对它的需求不是很多,所以它还没有完成。

总之,个人偏好很好,但我认为没有什么实际理由更喜欢等宽而不是非等宽。你喜欢它的外观吗?当然,做等宽。你想要更多的东西适合你的屏幕吗?去非单声道。但是人们将非等空间视为异端的方式有点夸大其词。

于 2010-07-30T22:57:55.530 回答
16

我对这个线程感到好奇,因为等宽字体的许多论点确实可以通过一些调整轻松地反驳。所以我将我的 IDE 切换到了 Calibri(因为它有一个漂亮的圆脸,并且针对 UI 屏幕的可读性进行了优化——完美)。现在我显然必须使用制表符而不是空格来缩进(忽略所有问题),并且 4 个空格宽度显然不够,所以我切换到 10 个。

现在看起来相当不错。但是,我可以发现一些明显的问题。在我测试此设置一段时间后,以后可能会出现更多。

  • 如前所述,某些字符(尤其是括号、分号)看起来太细了。我希望这是一个连续的文本,而不是源代码。我认为这将是最大的问题。
  • 符号不能很好地对齐。例如,考虑以下 C# 代码:

    var expr = x => x + 1;
    

    箭头 ( =>) 看起来像任何等宽字体中的一个单位。它看起来像其他字体中的两个相邻字符。>>对于诸如etc之类的运算符也是如此。

  • 空间看起来很小。我大力间隔我的源代码以提高可读性。当切换到比例字体时,这毫无意义。如果我可以控制空间的宽度,这肯定会有所帮助。
  • 上下文相关的缩进完全被破坏了:在某些情况下,缩进固定数量的制表符是不够的。采用可能以下列方式缩进的 LINQ 表达式:

    var r = from c in "This, apparently, is a test!"
            where !char.IsPunctuation(c)
            select char.ToUpper(c);
    

    您根本无法使用比例字体来做到这一点。

总而言之,字太窄了。同样,额外的字母间距可能会有所帮助,并且在标点符号的情况下绝对是必要的。然而,我感觉所有这些使比例字体更易读的调整只会自然地模仿等宽字体。到目前为止提到的所有观点都是正确的。

于 2008-10-20T15:07:11.113 回答
11

我使用Comic Sans MS,它看起来非常合理,因为它的小点大小(它只是开始在标题大小上看起来“开玩笑”)。它看起来很容易,但仍然保持文本足够小,以便在文本窗口中显示合理数量的代码,同时打开几个 VS 的停靠面板。

您可以打开解决方案资源管理器面板,并且无需水平滚动即可阅读 100 列文本。此外,我可以让 DXCore Documentor 面板(显示格式化的 XMLDOC)打开得足够宽以供阅读,同时仍然能够看到足够的文本来记录 XMLdocs。

于 2008-10-20T14:39:58.017 回答
10

只需要几个小时试图弄清楚为什么搜索没有找到某些东西,因为您的文字中有 2 个空格而不是 1 个空格,以意识到您应该使用等宽字体。我曾经在尝试修复 Lotus Notes 代理时遇到过这种情况,当时设计师没有使用等宽字体。直到我将代码粘贴到 CodeWright 中打印出来之后,问题才很明显。

于 2008-10-20T16:17:37.880 回答
10

等宽字体使排列代码更容易。

与团队合作时尤其如此;团队中的每个人都可以使用不同的字体,只要它们都是等宽的,一切都会排成一行。同样,如果一个人使用许多不同的开发工具,那么如果它们都是等宽的,那么一切都会排成一行。如果它们不是全等宽的,你必须确保它们都使用相同的字体,如果你在两个平台上开发,那可能会很困难。

事实上,一些开发工具只支持等宽字体。

另一个原因是等宽字体往往具有更多不同的字符。比较 lIiO0lIiO0和 ,你就会明白我的意思了。它们还使计算空格变得更加容易。

于 2009-10-30T17:04:22.710 回答
10

如果你在一个团队中工作,那么等距字体可以确保每个人的代码清晰且布局正确,无论他们喜欢使用哪种等距字体。

使用可变宽度字体时,您的代码可能看起来很清晰,但如果使用等宽字体用户打开它,则看起来不太可能相同。

于 2008-10-20T14:37:02.063 回答
7

我怀疑等宽字体是程序员的偏好,作为基于文本的 DOS 时代的遗留物。

另一方面,我自己尝试过 Verdana 和其他一些推荐的比例字体,但我无法应对这种变化。我的眼睛训练得太好了,不适合等宽。重符号的语言,例如:C/C++、C#、Perl 等,对我来说看起来太不一样了。符号的位置使代码看起来完全不同。

于 2008-10-20T14:30:53.010 回答
7

由于代码的性质而不是常规语言,最好将其正确排列。此外,在代码编辑中,有时您希望阻止选择、阻止复制和阻止粘贴。在 Visual Studio 中,您可以在进行鼠标选择时使用 ALT 键进行块选择。在不同的编辑器中可能会有所不同,但我一直发现编辑器中的该选项在某些情况下非常重要,而且它不会很好地工作,除非您使用的是等距字体。

于 2008-10-20T14:36:05.667 回答
5

我个人发现等宽字体在代码编辑器中更容易阅读。当然,我几乎是瞎子。那可能会有所作为。我目前在 15 点处使用带有高对比度字母的深色背景运行 consolas 字体。

于 2008-10-20T14:30:33.790 回答
2

一旦你比一层更深,使用空格进行缩进将是一个问题。

于 2008-10-20T14:30:17.270 回答
2

主要用于对齐目的(例如当函数参数声明跨越多行并且您想要将它们对齐或对齐注释等时)。

于 2008-10-20T14:49:48.073 回答
1

我认为,就像制表符的问题一样,复杂的因素是为了对齐而缩进某些东西,而其他人有不同的偏好。事情变得错位了。

于 2008-10-20T14:32:16.160 回答