出于什么原因,一些程序员强烈讨厌空白问题的语言(例如Python)?

时间:2010-04-22 23:44:08

标签: programming-languages

C ++是我的第一语言,因此我习惯于被忽略的空格。但是,我一直在玩Python,我觉得很难习惯空白规则。但是,似乎互联网上的许多程序员都无法超越空白规则。从我所看到的,人们的C ++程序往往在空白方面的格式非常一致(或者很难阅读),那么为什么有些人会像Python这样的基于空格的语言出现这样的问题?

12 个答案:

答案 0 :(得分:24)

Somepeoplethinkthatwhitespaceshouldneverhavesyntacticmeaning.Theywritelikethis。

答案 1 :(得分:10)

它违反了Principle of Least Astonishment,因为我们在自己(无论是好还是坏)中根深蒂固,编程语言中的空白无关紧要。空白是个人风格留下的问题之一。

作为一名学习困难的学生,我仍然有一段难忘的回忆:8个空格等同于Makefile中的标签......啊,我失去的睡眠... < / p>

答案 2 :(得分:7)

也许你的C ++背景(以及你的同龄人是谁)使你对此的看法(即选择性采样)蒙上阴影但是根据我的经验,对Python的“白色空间是意图”模因的反应是任何地方都是矛盾的,他们绝对喜欢它。许多人喜欢它的原因是它迫使人们格式化他们的代码。

我不能说我遇到过任何“讨厌”它的人,因为讨厌它就像讨厌格式良好的代码一样。

编辑:让我从某种角度来看待这一点。

在Java世界中,有两种主要的打包和部署Web应用程序的方法:Ant和Maven。

Ant基本上是一个基于XML的Make工具,它可以完成您所做的常见任务。它是一个空白的板块,功能强大,但它也意味着你必须自己编写很多常见的东西,每个安装都可以自由地做一些不同的事情。所有这些都是善意的,但很难弄清楚某人的Ant脚本。

Maven功能更为全面。它有原型,基本上是项目类型。根据您使用的原型,您不必编写任何启动,停止,清理,构建等任务,但您将拥有强制目录结构,这是非常深的。

这样做的好处是,如果您看过一个Maven Web应用程序,那么您已经看到了它们。你知道这些命令。你知道结构。这非常有用。

但你有绝对讨厌 Maven的人,我认为这归结为:他们不喜欢放弃控制,即使这最终符合他们的利益。此外,您会发现某个品牌的人认为他们的用例是合理的例外。你看到了很多这种人格特质。例如,我认为一个古老的Joel帖子提到了一个故事,其中有人想使用“输入”从用户名转到密码表单字段,即使约定是输入执行默认操作(通常“OK”)所以他们不得不为此编写一个Windows自定义对话框类。

基本上有些人不喜欢被告知要做什么,而其他人则完全顽固地认为即使所有证据都相反,他们也是对的。

这可能解释了为什么有人讨厌Python的空白区域:他们不喜欢被告知如何格式化他们的代码。他们喜欢C / C ++的自由。

答案 3 :(得分:3)

我遇到的唯一正当理由是,如果没有重构工具(或语法识别的cut-andpaste),使用剪切和粘贴(不是复制)进行重构,如果容易出错,最终可能会改变语义。 / p>

答案 4 :(得分:2)

有几种不同类型的空白(空格,制表符,奇怪的unicode字符,回车符,换行符等),它们不一定在视觉上不同,语言和编辑可能会反复无常地对待它们。这不是反对精心设计的空白语义的论据,但很多人反对它的所有形式只是因为设计不佳的可能性。

答案 5 :(得分:2)

好吧,这是一个非常狭隘的视角,但我没有在其他地方看到过它:如果你试图自动生成一个脚本,那么跟踪空白是一件麻烦事。

当我第一次遇到Python时,我不记得细节,但我开发了一个带有GUI的Windows工具,允许新手用户配置多个设置,然后按OK。该工具的输出是一个脚本,用户可以将其复制到Unix机器上,然后在那里执行它来执行某些操作过于复杂或繁琐的操作。由于没有人维护生成的脚本,因此没有理由他们需要看起来不错。因此,从这个角度来看,跟踪缩进似乎是一种不必要的负担。

但是,对于大多数用途,我发现Python比任何其他语言都容易得多。

答案 6 :(得分:1)

人们讨厌它,因为它违反了常识。我在这里读到的回复中没有一个决定只是放弃期间和其他标点就可以了。实际上语法非常好。如果关于缩进实际上带有意义的废话是真的,我们都会忘记完全使用标点符号。

没有人知道新行以英语等横向语言终止句子,而是学会推断句子何时结束,无论标点符号是否存在。

对于编程语言也是如此,特别是对于我们这些开始使用显式块终止的编程语言的人来说。你学会推断一个块的开始和停止位置,这并不意味着间距对你来说就是这样,语言本身的语义就是这样。

大多数有文化的人在没有标点符号的情况下理解帖子没有问题。不得不依赖于缺少角色的表现并不是一个好主意。当你做你的待办事项清单时,你们中的任何一个都是零吗?

答案 7 :(得分:0)

因为它们习惯于像C和JavaScript这样的语言,可以根据需要调整项目。

<击> 说到Python,你必须根据它的上下文缩进代码:

def Print():
    ManyArgumentFunction(LongParam1,LongParam2,LongParam3,LongParam4...

在C中,您可以这样做:

void Print()
{
    ManyArgumentFunction(LongParam1,
                         LongParam2,
                         LongParam3,...
}

<击>

答案 8 :(得分:0)

因为改变是可怕的。也许,在某些开发人员中,有一些语言的微弱记忆,关于whitespacing的反复无常的规则难以记住和任意,这意味着编译器方便而不是表达。

最有可能的是,在解雇之前不给予空白意义的公平动摇是真正的原因。要求某人修复一个相当复杂但写得很好的Python程序中的错误,然后让他们在C,VB或Cobol中修复一个20岁的系统中的错误并询问他们喜欢哪个。

至于我,我在Python或Boo中的空白与我在Lisp中的括号一样麻烦。也就是说,没有。

答案 9 :(得分:-1)

他们必须习惯它。最初我有一个问题,我自己试图阅读一些例子,但在使用语言一段时间后,我开始喜欢它。

我认为这是人们必须克服的习惯。

答案 10 :(得分:-1)

我(也是C ++背景)听过Python的唯一抱怨来自于那些不喜欢在IDE中使用“替换带空格的选项卡”选项的人。

答案 11 :(得分:-1)

有些人已经养成习惯(例如:深度嵌套的循环,不必要的大函数),他们认为这些习惯在空格敏感的语言中难以支持。 有些人对悬挂凹痕产生了美学上的不喜欢。