要foo吧,还是不要foo bar:这就是问题所在

时间:2008-10-24 17:32:53

标签: variables coding-style naming-conventions metasyntactic-variable

这是最近在Big Nerd Ranch acts_as_conference的{{3}}的Charles Brian Quinn的演讲中讨论的内容。他正在讨论他从指导Ruby on Rails Bootcamp中学到的东西给许多新手编程和Rails新手。

突出的一个特别的幻灯片是从未使用foo和bar作为例子,当试图教别人编程时。他的推理非常简单。

哪个更容易理解?

baz = foo + bar

answer = first_number + second_number

在解释某些内容时,我自己多次发生这种情况,我立刻跳到了foo bar占位符,然后意识到我的错误,并通过使用真实场景让这个例子变得更有意义。

这一点尤其适用于尝试教导没有编程曝光的人,并且在解释你实际上要教的内容之前最终需要解释foo和bar。

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

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

这是一种能够被踢的习惯吗?你为什么选择foo bar或foo bar?

10 个答案:

答案 0 :(得分:38)

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

例如,如果你想展示如何抛出异常,我相信可以提供一个像

这样的代码片段。
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 :(得分:15)

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

如果你在训练场上,可能会出现更多问题。

答案 2 :(得分:7)

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

对于全新的程序员,我不得不说术语foo和bar可能不为人所知。我认为它们是特定于语言的东西(即C),但在浏览维基百科后,我现在知道它们只是抽象的占位符。 因此,如果您的观众由不了解其含义的人组成,那么其他内容就会更加清晰。同样,first_number也告诉他们这些数字是如何呈现的而不是其他内容。

答案 5 :(得分:1)

每当我的观众对手头的概念足够熟悉时,我就选择不去追求和禁止它会对他们的理解产生不利影响。

Foo和Bar应该被使用的唯一时间是当你谈论一些如此抽象的东西时,添加一个上下文需要额外的讨论。然后,Foo和Bar更具可读性,并且创建的代码比x,y和z等替代品更具可用性。

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

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

如果您在示例代码中用无意义的单词替换它通常表示的内容,那么最终可能会出现一些与您尝试解释的关键字,类或方法非常相似的名称。与“myNumber myFunction一样,”我的“前缀是一个很好的折衷方案,可以使名称脱颖而出。

答案 9 :(得分:0)

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

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