28

这是Big Nerd Ranch的 Charles Brian Quinn在acts_as_conference的演讲中最初讨论的内容。他正在讨论他从向许多编程新手和 Rails 新手指导 Ruby on Rails 训练营中学到的东西。

一张特别突出的幻灯片是在尝试教某人编程时从不使用 foo 和 bar 作为示例。他的理由很简单。

哪个更容易理解?

baz = foo + bar

或者

answer = first_number + second_number

我自己在解释某事时发生了很多次,我立即跳到 go to foo bar 占位符,但随后意识到我的错误,并通过使用真实世界的场景使示例更有意义。

这在尝试教没有编程经验的人时尤其适用,并且您最终需要在解释您实际尝试教的内容之前解释 foo 和 bar。

然而,对于有经验的程序员来说,使用 foo 和 bar 似乎没问题,尽管我个人认为,与 Charles 一样,这是需要改变的东西。

快速搜索“foo”会返回超过 20 页的结果,其中 foo 以我可以理解的更多方式使用。在某些情况下,我正在阅读有关特定语言的问题,我这样做是为了帮助更好地理解该语言。如果使用适用的变量名而不是 foo 和 bar,则更容易理解和解释问题。所以对于经验丰富的开发人员来说,这个结构似乎也有点缺陷。

这是一个永远可以被踢掉的习惯吗?你为什么选择 foo bar 或不 foo bar?

4

10 回答 10

40

这完全取决于你想教什么。有时,在展示一个编程示例时,您必须声明一些东西只是为了让代码片段“完整”,而这些东西并不是您展示的核心。

例如,如果您想展示如何抛出异常,我相信可以呈现如下片段

public void foo() { 

   // Do some things

   if (errorCondition) {
      throw new Exception("Error message");
   }

}

由于其中的要点是显示异常,因此关心方法名称没有意义,因此 foo 在这种情况下是“合法的”,或者至少对我而言。

我不接受的(在同一个例子中)是

public void foo() { 

   // Do some things

   if (bar) {
      throw new Exception(baz);
   }

}

因为它掩盖了您要教的内容。

于 2008-10-24T17:38:11.307 回答
16

与非程序员交谈时,我明白这一点,但是当您在白板上与一些团队成员讨论问题时.. 我会想念我的 foos 和我的酒吧。我认为 foo/bar 的流行是大多数程序员抽象思考能力的一个例子。

如果您在训练场上,可能会成为更大的问题。

于 2008-10-24T17:36:24.150 回答
7

我有时会使用它们。但只有在“真实”名称不相关的情况下。

于 2008-10-24T17:37:33.290 回答
3

我在演示 'foo' 和 'bar' 的任何值都足够时使用它们,例如“您可以使用 sizeof(foo) 获取对象的大小”。它有助于让人们理解一般概念,而不仅仅是细节。例如,如果我说“您可以使用 sizeof(int) 之类的东西获得对象的大小”,那么几乎可以肯定有人会问这是否也适用于浮点数。

于 2008-10-24T17:43:36.773 回答
2

For totaly new programmer I have to say that terms foo and bar might not be known. I thought that they were something language specific (namely C), but after cheking Wikipedia I now know they are just abstract place holders. So if your audience consist of people who don't know meanings of them, something else is much clearer. Also first_number and so tells that those are numbers how ever they are presented and not something else.

于 2009-05-14T21:52:37.403 回答
1

每当我的听众对手头的概念足够熟悉以致不利于他们的理解时,我都会选择不使用 foo 和 bar。

唯一应该使用 Foo 和 Bar 的情况是当您谈论的内容如此抽象以至于添加上下文需要额外讨论时。然后 Foo 和 Bar 比 x、y 和 z 等替代方案更具可读性和创建的代码更易于遵循。

于 2008-10-24T17:38:57.140 回答
1

我认为这是由于许多程序员的温和或不那么温和的讽刺性质。虽然许多人试图在 foo/bar 上赋予不同的含义,但我们中的大多数人,或者至少是很多人,都会想到“FUBAR”,F**K Up Beyond All Recognition。这是“有经验”的人对其他人发表讽刺评论的一种方式。

因此,我从不将它用于非程序员,即使有经验的程序员也很少使用它。如果我确实使用你可以打赌我正在对手头的主题进行含蓄的引用。

于 2009-01-06T21:34:57.707 回答
1

除了避免像 foo & bar 这样无意义的词之外,我发现为具有相同关系的真实场景提供代码示例更为重要。这确实有助于学习者正确理解一个主题并防止误解。例如,如果我正在教授依赖注入并展示示例代码,其中 Car 类的实例被注入到 Driver 类中,那么没有人会感到困惑并认为“那么这意味着 Car 控制 Driver 吗?”。

于 2009-01-06T21:46:43.267 回答
1

I think there is another important reason for using foo and bar in examples. These names make it clear that you are not invoking any magic keywords. Whenever I am reading some documentation or code examples, I like the arbitrary parts of the example to be clearly distinguished from the necessary parts.

If you substituted the nonsense word for what it generically represents in the example code, you might end up with some names that look a lot like the keywords, classes, or methods you're trying to explain. The "my" prefix, as in myNumber, myFunction, is a good compromise that makes names stand out as being arbitrary.

于 2012-06-17T10:49:09.143 回答
0

我是编程新手,或多或少是自学的。我在网上阅读了很多示例代码,一开始发现自己替换了 foo 和 bar &c。具有更相关的名称,例如上面的 firstnumber 和 secondnumber 示例。

我现在更喜欢 x,y,z,i... 因为 foo 和 bar 似乎在我的脑海中激发了语言冲动,可以分散我的注意力,而且我已经在某种程度上发展了持有一大堆不同的能力我脑海中的变量并记住它们是什么。但是我仍然肯定会建议在教别人时使用相关的命名,尤其是在向不会编程但需要了解程序如何工作的人解释代码时。

于 2009-01-06T21:25:37.350 回答