it-swarm.cn

有人喜欢比例字体吗?

我正在阅读 维基百科上有关编程风格的文章 ,并注意到反对垂直对齐代码的参数中的某些内容:

依靠等宽字体;表格格式假定编辑器使用固定宽度的字体。大多数现代代码编辑器都支持比例字体,并且程序员可能更喜欢使用比例字体以提高可读性

老实说,我认为我从未见过喜欢使用比例字体的程序员。我也没有想到使用它们的任何真正好的理由。为什么有人会喜欢比例字体?

53
Jason Baker

带有注释的比例字体的公共点。

  • 您无法使用比例字体在垂直方向上精确对齐代码。我的意思是,如果每个人都在使用 弹性制表符 ,但您could可以使代码与比例字体垂直对齐。
  • 一些比例字体使区分某些字符组变得困难。 (例如mrnm)。但是,并不是所有的编程字体都是完美的,但是: Courier New具有相同的“ O”和“ 0”以及相同的“ 1”和“ l”。
  • 一些IDE对非固定宽度字体的支持不佳(例如 上述 Visual Studio或Python的IDLE)。同样,在某些情况下,您将无法使用它。 (例如终端)。
  • 选择比例字体进行编码将使您陷入无尽的圣战。但是,这里在键盘和椅子之间存在问题。

支持比例字体的点

  • 有些字符比其他字符宽。 必须在mn 的同一个空格中填充i,才能真正做到 挑战设计一个好的,可读的等宽字体
  • 恰到好处地改善了字母之间的间距。比较 此Proggy Clear屏幕截图 中的rnWIll,以获取错误的字体间距示例。
  • 大多数程序员字体缺少斜体或粗体。这使得难以使用有效的语法突出显示。
  • 无论如何,垂直对齐都是一罐蠕虫。制表符或空格还是制表符和空格?

就我个人而言,我一直很高兴地同时使用 'Ubuntu'字体 和WenQuanYi Zen Hei Mono,但发现自己无法彼此偏爱。 :)

Ubuntu
WenQuanYi Zen Hei Mono
buntu 10和WenQuanYi Zen He Mono 9比较。如果您问我,这里没有明确的赢家。

也就是说,字体就像食物。有些人喜欢将它们弄圆,有些则喜欢将它们麻辣烫-没有合适的字体,否则我们所有人现在都将使用它。可以选择!

47
badp

有一个原因使得实际上不可能使用等宽字体以外的字体进行编码,但是在其他答案中没有提及:矩形选择

此功能对于开发人员来说是必不可少的,它在使用普通文本时通常不是很有用,也不是很知名。您可能会想到多种情况:删除//在多行上注释,添加括号或其他字符等。这在矩形选择的高级支持中更有价值,例如在Visual Studio 2010中,您不仅可以选择和删除文本,还可以选择和替换文本。

让我们举个例子:

private IEnumerable<SELove> StackExchangeRocks()
{
    var howILoveSEWebsites = new []
    {
        new SELove { SiteName = "Stack Overflow", MyReputation = 5269,  MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Programmers",    MyReputation = 16937, MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Super User",     MyReputation = 650,   MyRating = Rating.QuiteGood,   },
        new SELove { SiteName = "Server Fault",   MyReputation = 489,   MyRating = Rating.Good,        },
        // Initialize other websites here.
    };

    return howILoveSEWebsites.OrderByDescending(c => c.MyRating);
}

private class SELove
{
    public string SiteName { get; set; }
    public int MyReputation { get; set; }
    public Rating MyRating { get; set; }
}

private enum Rating
{
    Outstanding,
    Good,
    QuiteGood,
}

在此旧代码中,我想用一种方法替换代码内评级,该方法将从Stack Exchange网站本身加载我的评级,从而始终拥有最新数据。我开始重构MyReputation属性,现在我想删除范围内的初始化。想象一下,我没有四个,但是全部有84个SE网站。

这是使用等号字体Consolas时发生的情况。我按Backspace键,仅此而已,我可以花剩余的时间做一些实际有用的事情。

The image shows that with Consolas, the rectangle selects reputation property.

这与Segoe UI相同。哎哟!

The image shows that with Segoe UI, some reputation properties are selected only partially, while on other lines, the beginning of rating property is selected.

30
Arseni Mourzenko

我曾经使用比例字体,主要是因为我发现标点符号实际上更容易区分,但是随着时间的流逝,我已经放弃了,因为其他人都没有这样做,而且每个人都在不知不觉中采用了等距字体(如Wikipedia文章所提到的,试图以表格形式格式,评论中的ascii艺术等)。

另外,Microsoft不想修复的 Visual Studio中的问题 基本上使反正不可能使用设计良好的比例字体。

15
Dean Harding

我个人不在乎。只要您可以使制表符保持对齐且字体清晰易读,就可以使用等宽,比例或其他一些墙外间距,这一点我都不在乎。只是不要开始用空格替换我的标签,并且您不会与我吵架。

9
Aeo

我使用比例字体(Arial是迄今为止找到的最好的字体,Verdana排名第二),老实说,我仍然对人们使用固定宽度的字体感到困惑。您为什么要牺牲这样的可读性?我可以理解表格格式是否可取,但不是,因为它会造成维护麻烦,而与字体无关。

6
rwallace

对于行数短且有很多开放空间的语言,我更喜欢等距字体。我发现在行长且语法密集的情况下,可变宽度字体可以提高可读性。

大多数比例字体的问题在于它们不是为编程而设计的。 此页面 显示某些字体。

Trim font

4
user287424

我记得在Bjarne Stroustrup的书中C++编程语言,使用了Propotianite间隔的字体作为代码。 (我无法在网络上找到任何示例页面)

我不记得确切的原因,但认为他提到了这一点以及另一处更改(我认为是C++语言本身),因为它是新的介绍书。

就个人而言,我更喜欢固定空间的。 Consolas是我的最爱。

4
Nivas

Pharo之类的Smalltalk环境使用比例字体,并且由于语言风格,在那里看起来很好。但是在Go或其他类似Erlang或Python的C风格的语言中,我更喜欢等宽字体。

2
themue

我花了一些时间为Eclipse找到一种好的,易读的字体,在XP)下,我花了相当长的一段时间使用Verdana。

这些是我的发现:

  • 大多数比例字体都是为散文而设计的,并且标点符号很少(反过来,通常是一个或很少两个字符)。 C语言族具有很多标点符号,在我看来,这根本看起来不好,而且比必需的更难阅读。
  • 可变长度字符表示行的长度不同。这使得使用箭头按钮导航时几乎无法猜测光标将在何处结束。我发现这很烦人。
  • 垂直间距也很重要。通常,这不是很容易覆盖的东西,大多数比例字体之间的行距比我想要的要少。
  • 很少有IDE使用比例字体进行测试。这样可以留出一些细微的错误,例如将光标放置在错误的位置,错误地重绘字符等。

因此,我发现这对我来说不值得麻烦。


关于对齐方式和其他布局的注意事项:我已将Eclipse设置为在每次保存时自动格式化每个文件,因此所有花式布局都会自动重置。 Eclipse使用制表符代替多个空格,即使使用比例字体也可以正确定位这些制表符。因此,格式化程序布局可以相互重叠,但是我们使用的标准格式化程序配置没有这种布局。

我相信,在进行法医分析时,每次保存时对每个人实施自动格式化都会最大程度地减少源控制系统中的误报。

2
user1249

永远不会,因为等宽字体使我可以比较不同的属性。

比较:

name1 = [“威廉”,“莎士比亚”,1564,“肖像”]

name2 = [“ John”,“ Locke”,1632,“哲学”]

name3 = [“ Jonathan”,“ Littell”,1967,“ Prose”]

收件人:

name1=["William",  "Shakespear", 1564, "Peotry"     ]
name2=["John",     "Locke",      1632, "Philosophy" ]
name3=["Jonathan", "Littell",    1967, "Prose"      ]

比例字体不能将等效属性恰好一个放在另一个之上。

0
Adam Matan

虽然我确实认为比例字体更漂亮,但在某些字体中(尤其是sans-serif字体),看不到“ I”和“ l”之间的区别。等等,我又给该变量命名了什么?

0
Billjk