foo bar,还是不 foo bar:这是个问题

To foo bar, or not to foo bar: that is the question

提问人:mwilliams 提问时间:10/25/2008 最后编辑:MathieuFmwilliams 更新时间:6/17/2012 访问量:1983

问:

这是查尔斯·布莱恩·奎因(Charles Brian Quinn)在acts_as_conference大书牧场(Big Nerd Ranch)的一次演讲中讨论过的问题。他正在讨论他从指导Ruby on Rails训练营中学到的东西,这些人包括编程新手和Rails新手。

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

哪个更容易理解?

baz = foo + bar

answer = first_number + second_number

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

这在试图教一个没有接触过编程的人时尤其适用,你最终需要解释 foo 和 bar 才能解释你实际想教的东西。

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

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

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

编码样式 命名约定 元语法变量

评论

2赞 Viktor Mellgren 7/3/2012
你试图教人们使用好的变量名称,你做的第一件事就是向他们扔“foo and bar”。我可以说这对非英语人士来说更令人沮丧,因为他们会感到困惑,不明白 foo 和 bar 是什么,并且可能认为 foo 和 bar 是语言结构。

答:

17赞 Niniki 10/25/2008 #1

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

如果你在训练场上,可能是一个更大的问题。

评论

0赞 mwilliams 10/25/2008
抽象思考的极好观点。这是我从未考虑过的事情。
7赞 Toon Krijthe 10/25/2008 #2

我有时会使用它们。但前提是“真实”姓名无关紧要。

41赞 Santiago Palladino 10/25/2008 #3

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

例如,如果你想展示如何抛出异常,我相信可以呈现一个像这样的片段

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);
   }

}

因为它掩盖了你试图教的东西。

1赞 tom.dietrich 10/25/2008 #4

每当我的听众对手头的概念足够熟悉时,我就会选择不喋喋不休,这会损害他们的理解。

唯一应该使用 Foo 和 Bar 的时候是当你谈论的东西太抽象了,以至于添加上下文需要额外的讨论时。然后 Foo 和 Bar 比 x、y 和 z 等替代方案更具可读性和创建的代码更易于遵循。

3赞 Kirk Strauser 10/25/2008 #5

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

0赞 user51498 1/7/2009 #6

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

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

1赞 Jim C 1/7/2009 #7

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

正因为如此,我从不将它用于非程序员,即使与有经验的程序员也很少使用它。如果我确实使用,你可以打赌我正在隐晦地提及手头的主题。

评论

0赞 TecBrat 5/8/2014
没有人能说服我,也没有任何不同的含义,我不喜欢它们的使用。示例代码应使用有意义的标签,例如“needle”和“haystack”foobar
0赞 TecBrat 5/8/2014
我在“相关问题”链接中看到了一个很好的替代方案:、 和 .但即使是这些,也只有在更多特定于上下文的标签有损于理解时才应该使用。spameggsspam_and_eggs
1赞 too much php 1/7/2009 #8

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

2赞 Ekaros 5/15/2009 #9

对于全新的程序员,我不得不说术语 foo 和 bar 可能并不为人所知。我以为它们是特定于语言的东西(即 C),但在 che 维基百科之后,我现在知道它们只是抽象的占位符。 因此,如果你的听众由不知道他们含义的人组成,那么其他事情就更清楚了。此外,first_number so 告诉人们,这些都是数字,无论它们是如何呈现的,而不是其他东西。

1赞 Matt Montag 6/17/2012 #10

我认为在示例中使用 和 还有另一个重要原因。这些名称清楚地表明您没有调用任何神奇的关键字。每当我阅读一些文档或代码示例时,我都喜欢将示例的任意部分与必要的部分清楚地区分开来。foobar

如果你用这个无意义的词来代替它在示例代码中通常表示的内容,你最终可能会得到一些看起来很像你试图解释的关键字、类或方法的名称。“my”前缀,如 ,是一个很好的折衷方案,它使名称脱颖而出,因为它是任意的。myNumbermyFunction