2

我在考虑大括号放置的旧圣战,并认为这对于程序员来说真的不是问题,而是 IDE 的问题。

大多数 C 风格的编程语言* 支持程序员想要的任何间距和对齐方式:

foo(bar, baz) {
  fizz();
  buzz();
}

在功能上等同于:

foo(bar, baz)
{
    fizz();
    buzz();
}

在功能上等同于:

foo(bar,baz){fizz();buzz();}

没有人对此提出质疑,但程序员仍然倾向于不同意正确的格式。

因为这是用户偏好,所以我认为如果有一个 IDE 可以自动将编写的代码重新排列为用户偏好指定的格式,同时保持原样:

foo
(
bar
,
baz
)
{
fizz();
buzz();
}

将自动格式化为:

foo(bar, baz)
{
    fizz();
    buzz();
}

或任何您的偏好无需更改原始代码(或者在保存时自动将其转换为不同的格式)......

然后我意识到我不太可能有一个原创的想法。

所以问题的症结在于这个功能是否已经存在,而我根本没有找到它,或者它是否不存在,我需要制作它。


* 我通常使用 JavaScript、CSS、C# 和 PHP 编写代码;显然,这对于 Python 之类的语言来说毫无用处。

4

1 回答 1

4

它们被称为(代码)“格式化程序”或“美化器”,周围有很多,有些甚至内置在您最喜欢的 IDE 中。

他们遭受的最大问题是坚持微观格式属性的人,以及程序员之间关于什么是好的布局几乎是宗教战争的分歧。我称之为“艺术”问题:每个人都喜欢他的,不喜欢别人的。

通常这意味着该组无法就格式达成一致,因此不会发生格式设置,并且您最终会得到格式错误的代码。我个人觉得这很惊人。我认为为组织选择几乎任何风格都是一种胜利,因为现在每个人都知道会发生什么。考虑到程序员花费 50% 的时间阅读代码,这在我看来是一种严重的浪费。

AStyle被广泛使用。它有很多选择,因此即使是脾气暴躁的人也可以得到他们想要的格式。

其中大部分基于临时字符串黑客技巧。例如,使用正则表达式查找关键字和特殊语法,例如花括号。以这种方式构建基本格式化程序非常容易。如果这种字符串黑客不能完全理解语言语法(如果花括号在字符串文字等中转义怎么办),它们可能会损坏您的代码(通常通过插入虚假语法错误,有时通过破坏以更微妙的方式编写代码),因此格式化后重新编译和验证格式化的模块很重要。

我的公司基于对语言文本的解析和重新生成,为编程语言制作了多种不同寻常的格式化程序。这些工具具有无法破坏您的代码的属性(除非我们在构建解析器前端时出错,这比使用正则表达式的人更不可能)。因此,您可以在完整的代码库中运行它们,而不必担心破坏任何东西。

我们的选项往往比 Astyle 少,尽管其中许多选项允许您在各种“典型”位置放置大括号(如果在该语言中很重要,例如 PHP 或 Java)。但即使是像 Python 这样的无大括号语言也可以有关于大括号以外的东西的布局规则,比如如何缩进复合条件表达式等。我们的工具通常有这些。

于 2012-03-30T19:57:20.550 回答