Почему многие примеры кода, особенно учебные пособия, так часто используют имена «Foo» и «Bar»? Это почти стандарт.
Например:
void foo(char* bar) {
printf("%s", bar);
}
Почему многие примеры кода, особенно учебные пособия, так часто используют имена «Foo» и «Bar»? Это почти стандарт.
Например:
void foo(char* bar) {
printf("%s", bar);
}
Ответы:
Foo и bar происходят от аббревиатуры Второй мировой войны армии США FUBAR, "F-ed Up Beyond All Recognition". Целое семейство этих терминов широко использовалось в ходе кампаний в Северной Африке и на Сицилии (1942-43). Превосходный День битвы: Война на Сицилии и в Италии, 1943-1944 гг., Рик Аткинсон приводит список из них. Например, JANFU - это «Объединенный военно-морской флот F Up», такой как инцидент 11 июля 1943 года, когда флот вторжения для операции «Хаски» сбил 23 армейских ВВС C-47, перевозящих десантников для усиления плацдарма.
Обновление: Википедия имеет список связанных сокращений, который включает некоторые оригинальные Второй мировой войны, перечисленные Аткинсоном.
Любой программист поймет мотивацию использования foo и bar для именования переменных. Они, безусловно, были частью культуры C / UNIX с самого начала, и, как указывает @Walter Mitty, предшествовали этому.
Обновление (05.10.2009): вот описание Аткинсона:
Их повсеместная «гражданственность» заставляла их опасаться боевого усердия. «Мы не были романтиками, наполненными болтовней накидки и меча», - писал Джон Мейсон Браун, лейтенант военно-морского резерва, направляющийся в Сицилию. «Последняя война была слишком близка для этого». Военная жизнь разжигала их иронические чувства и их скептицизм. Единственная грубая аббревиатура, которая захватила пониженные ожидания солдата - SNAFU, «ситуация нормальная, все испорчено» - расширилась до словаря цинизма GI: SUSFU (ситуация не изменилась, все еще испорчена); FUMTU (облажался больше, чем обычно); ДЖАНФУ (совместное соединение армии и флота); JAAFU (совместный англо-американский дебил); FUAFUP (облажался и облажался должным образом); и FUBAR (облажался до неузнаваемости) [Аткинсон, с. 36].
Обновление (23.11.2011): у @Hugo фантастический список невоенных предшественников.
Я думаю, что это фонетическое произношение фубара.
Что означает:
В «Словаре нового хакера» есть очень хорошая статья об этом - и я считаю, что это лучший ресурс для такого рода вещей, чем Википедия:
метасинтаксическая переменная /n./
Имя, используемое в примерах и понимаемое для обозначения того, что обсуждается, или любого случайного члена класса обсуждаемых вещей. Слово foo является каноническим примером. Чтобы избежать путаницы, хакеры никогда (ну, почти никогда) не используют `foo 'или другие подобные слова в качестве постоянных имен для чего-либо. В именах файлов распространенным соглашением является то, что любое имя файла, начинающееся с имени метасинтаксической переменной, является рабочим файлом, который может быть удален в любое время.
В некоторой степени список предпочтительных метасинтаксических переменных является культурной сигнатурой. Они встречаются как последовательно (используются для связанных групп переменных или объектов), так и в виде синглетонов. Вот несколько распространенных подписей:
foo, bar, baz, quux, quuux, quuuux ...: использование
MIT / Stanford, теперь встречающееся повсеместно (во многом благодаря ранним версиям этого лексикона!). В Массачусетском технологическом институте (но не в Стэнфорде) баз некоторое время выходил из употребления в 1970-х и 80-х годах. Обычная недавняя мутация этой последовательности вставляет qux перед quux.Базола, ztesch:
Стэнфорд (с середины 70-х годов).foo, bar, thud, grunt:
этот сериал был популярен в CMU. Другие переменные, связанные с CMU, включают gorp.foo, bar, fum:
Сообщается, что эта серия распространена на XEROX PARC.Фред, Барни:
см. запись для Фред. Это, как правило, британцы.corge, grault, flarp:
популярный в университете Rutgers и среди хакеров GOSMACS.zxc, spqr, wombat:
Кембриджский университет (Англия).Шме
Беркли, GeoWorks, Ingres. Произносится / шме / с коротким / е /.Университет
Брауна, начало 1970-х годов.foo, bar, zot
Хельсинкский технологический университет, Финляндия.blarg, качать
Новая Зеландия.Тото, Тити, Тата, пачка
Франция.Пиппо, Плутон, Paperino
Италия. Pippo / pee'po / и Paperino / pa-per-ee'-no / - итальянские названия для Гуфи и Дональда Дака.aap, noot, mies
Нидерланды. Это первые слова, которые ребенок использовал, чтобы научиться писать по буквам на голландской орфографической доске.Из всего этого, только 'foo' и 'bar' универсальны (а baz почти так). Составы foobar и `foobaz 'также имеют очень широкую валюту.
Некоторые жаргонные термины также используются как метасинтаксические имена; например, бормочет и бормочет. См. Также Commonwealth Hackish для обсуждения многочисленных метасинтаксических переменных, найденных в Великобритании и Содружестве.
Википедия дает это определение метасинтаксической переменной :
В компьютерных науках программисты используют метасинтаксические переменные для описания имени заполнителя или псевдонима, обычно используемого для обозначения обсуждаемого предмета или произвольного члена класса обсуждаемых вещей. Использование метасинтаксической переменной помогает освободить программиста от создания переменной с логическим именем, что часто полезно при создании или обучении примерам алгоритма. Слово foo является основным примером.
Термин «метасинтаксическая переменная» в основном встречается в неформальной литературе. Иногда он также используется в качестве синонима мета-переменной.
Любой символ или слово, которое не нарушает правила языка, может использоваться как метасинтаксическая переменная, но обычно используются бессмысленные слова. То же самое понятие используется в других областях, где это выражено такими терминами, как переменная схемы (см. Логическую форму ).
По математической аналогии: метасинтаксическая переменная - это слово, которое является переменной для других слов, так же как в алгебраических буквах используются в качестве переменных для чисел.
В статье также приведены общие примеры таких переменных на разных языках программирования:
C
В следующем примере языка программирования C имя функции foo и строка имени переменной являются метасинтаксическими переменными. Строки, начинающиеся с //, являются комментариями.
// The function named foo
int foo(void)
{
// Declare the variable bar and set the value to 1
int bar = 1;
return bar;
}
питон
Спам, ветчина и яйца являются основными метасинтаксическими переменными, используемыми в языке программирования Python. [5] Это ссылка на знаменитый комедийный набросок «Спам» Монти Пайтона, одноименный язык. [6] В следующем примере спам, ветчина и яйца являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.
# Define a function named spam
def spam():
# define the variable ham
ham = "Hello World!"
#define the variable eggs
eggs = 1
return
Рубин
В следующем примере baz, foo и bar являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.
# Declare the variable foo and set equal to 1
foo = 1
# Declare the variable bar and set equal to 2
bar = 2
# Declare the method (function) named baz, which prints the text 'Hello world'
def baz
puts 'Hello world'
end
Вот ответ Википедии:
Термины foobar, foo, bar и baz являются общими именами-заполнителями (также называемыми метасинтаксическими переменными), используемыми в компьютерном программировании или документации, связанной с компьютером. Они обычно используются для представления неизвестных значений, как правило, при описании сценария, в котором цель неизвестных значений понятна, но их точные значения являются произвольными и неважными. Термины могут использоваться для обозначения любой части сложной системы или идеи, включая данные, переменные, функции и команды. Сами слова не имеют смысла в этом использовании и являются просто логическими представлениями, так же, как буквы x и y используются в алгебре. Foobar часто используется один; foo, bar и baz обычно используются в том порядке, когда требуется несколько сущностей.
Фу вошел в английский язык как неологизм и считается многими каноническим примером метасинтаксической переменной. [Цитата нужна] Он широко используется в примерах компьютерного программирования (иногда выражается как «только один раз») и псевдокоде. Эрик С. Рэймонд назвал это «важным хакерством» наряду с клуджем и храбростью. [1]
http://en.wikipedia.org/wiki/Foo
А из RFC 3092:
При использовании в связке с «баром» он, как правило, прослеживается до аббревиатуры армейского сленга FUBAR («Fucked Up Beyond All Repair»), позже измененной на foobar. Ранние версии Jargon File [JARGON] интерпретировали это изменение как послевоенную боулдеризацию, но теперь кажется более вероятным, что FUBAR сам был производным от 'foo', возможно под влиянием немецкого 'furchtbar' (ужасный) - 'foobar' может на самом деле была оригинальная форма.
Кажется, что само слово «foo» имело непосредственную довоенную историю в комиксах и мультфильмах. В мультфильме Warner Brothers 1938 года режиссера Роберта Клэмпетта «Даффи Док» очень ранняя версия «Даффи Дак» держит знак «SILENCE IS FOO!» ... (отрывок)
ТЛ; др
«Foo» и «bar» как метасинтаксические переменные были популяризированы MIT и DEC, первые ссылки находятся в работе над LISP и PDP-1 и Project MAC с 1964 года.
Многие из этих людей были в техническом модельном железнодорожном клубе Массачусетского технологического института, где мы впервые обнаружили документированное использование «foo» в технических кругах в 1959 году (и вариант в 1958 году).
И "foo", и "bar" (и даже "baz") были хорошо известны в популярной культуре, особенно из комиксов Smokey Stover и Pogo, которые читали многие члены TMRC.
Кроме того, похоже, что военные FUBAR способствовали их популярности.
Использование одиночного «foo» в качестве бессмысленного слова довольно хорошо задокументировано в популярной культуре в начале 20-го века, как и военный FUBAR. (Некоторое чтение: FOLDOC FOLDOC Жаргон Файл Жаргон Файл Википедия RFC3092 )
Хорошо, давайте найдем несколько ссылок.
СТОП ПРЕССА! После публикации этого ответа я обнаружил эту прекрасную статью о "foo" в выпуске "Tech " в пятницу, 14 января 1938 года ("Старейшая и самая большая газета MIT & первая газета, опубликованная в Интернете"), том LVII. № 57, цена три цента:
На Фу-Изме
Lounger думает, что это дело Foo-ism зашло слишком далеко его заблудшими сторонниками, и тем самым и немедленно высказывается против его злоупотреблений. Может быть, что нет foo как старый foo, и мы это, но в любом случае, foo и его деньги - некоторая сторона. (Голос от трибунала: «Не будь дураком!»)
В качестве ругательства, конечно, "Фу!" имеет определенную и, вероятно, незаменимую позицию в нашем языке, хотя мы опасаемся, что чрезмерное использование, которому он в настоящее время подвергается, вполне может привести к его раннему (и, увы, темному) забвению. Мы говорим, увы, потому что правильное использование слова может привести к таким счастливым случаям, как следующие.
Это была 8,50 лекция по термодинамике профессора Слейтера в аудитории 6-120. Профессор, накрыв переднюю часть доски, установил ручку, которая управляет подъемным механизмом, и повернулся к классу, чтобы продолжить обсуждение. Передняя доска медленно, величественно приподнялась, обнажая доску за ней, и на этой доске написали большие символы с надписью «FOO»!
Газета Tech , годом ранее, Письмо в редакцию, сентябрь 1937 года :
К тому времени, когда поезд достиг станции, неофиты настолько наполнились историями о славе Phi Omicron Omicron, обычно называемой Foo, что они стали легкой добычей.
...
Я не возражаю против того, чтобы потерять своих первых четырех сыновей в Великом и Всемирном Братстве Пхи Омикрона Омикрона, но я действительно хочу, чтобы мой пятый сын, мой ребенок, был, по крайней мере, предупрежден заранее.
Надеюсь, ваш
Возмущенная Мать Пяти.
И Технология в декабре 1938 года :
Общая тенденция мышления может быть лучше всего интерпретирована из замечаний, сделанных в конце бюллетеней. В одном голосовании говорилось: «Я не думаю, что я занимаюсь каким-либо делом Пулвера», в то время как другое просто добавило краткий «Фу».
Первое документальное «Foo» в технических кругах, вероятно , 1959 «s Словарь TMRC Язык :
FOO: священный слог (FOO MANI PADME HUM); говорить только тогда, когда под вдохновением общаться с Божеством. Наше первое обязательство состоит в том, чтобы поддерживать счетчики Foo.
Это объясняется в FOLDOC . Компилятор словаря Пит Самсон сказал в 2005 году:
Использование этого слова в TMRC предшествовало моему приезду туда. Счетчик foo может просто иметь случайно мигающие огни или может быть реальным счетчиком с неясным входом.
А с 1996 года Jargon File 4.0.0 :
В более ранних версиях этого лексикона термин «баз» был назван «порчей Стэнфорда». Тем не менее, Пит Самсон (составитель лексикона TMRC) сообщает, что он уже действовал, когда он присоединился к TMRC в 1958 году. Он говорит: «Это произошло от« Pogo ». Альберт Аллигатор, когда раздражен или возмущен, будет кричать« Bazz Fazz! » или 'Rowrbazzle!' Макет клуба, как говорили, смоделировал (мифические) округа Новой Англии Роурфолк и Бассекс (Роурбаццл, смешанный с (Норфолк / Саффолк / Мидлсекс / Эссекс) ".
За год до словаря TMRC в газете MIT Voo Doo Gazette 1958 года («Дополнение юмора в деканате MIT») (PDF) упоминается Foocom в книге «Законы Мерфи и Финагла» Джона Банжафа (студент-электротехник) :
Дальнейшие исследования в рамках совместного гранта Foocom и Anarcom расширили закон до всеобъемлющего и универсального характера: если что-то может пойти не так, оно будет!
Также MIT Voo Doo (PDF) 1964 года ссылается на использование TMRC:
Да! Хочу мгновенного успеха и снежных клиентов. Пришли мне степень в: ...
Foo Счетчики
Фу Юнг
Но давайте вспомним, что этот вопрос касается примеров кода, поэтому давайте найдем "foo", "bar" и "foobar", опубликованные в коде.
Итак, Jargon File 4.4.7 говорит о «foobar»:
Вероятно, изначально она распространялась в руководствах DECsystem Digital Equipment Corporation (DEC) в 1960-х и начале 1970-х годов; подтвержденные наблюдения там восходят к 1972 году.
Первая опубликованная ссылка, которую я могу найти, относится к февралю 1964 года , но написана в июне 1963 года «Язык программирования LISP: его использование и применение» компанией Information International, Inc. со многими авторами, включая Тимоти П. Харта и Майкла Левина:
Таким образом, поскольку «FOO» является именем для себя, «COMITRIN» будет обрабатывать как «FOO», так и «(FOO)» одинаково.
Также включает в себя другие метасинтаксические переменные, такие как: FOO CROCK GLITCH / POOT TOOR / ON YOU / SNAP CRACKLE POP / XYZ
Я ожидаю, что это почти то же самое, что следующая ссылка на «foo» из MIT Project MAC в январе 1964 года AIM-064 или LISP Exercises Тимоти П. Харта и Майкла Левина:
автомобиль [((FOO. CROCK). GLITCH)]
Он разделяет многие другие метасинтаксические переменные, такие как: CHI / Бостон, Нью-Йорк / Шпинатный стейк, глянец с потрохами, помада / инструмент, инструмент / истиситивиалексCерзис / шлепанцы, топ / SNAP, хруст, поп / один из двух третей мест
Как для «foo», так и для «bar» вместе, самое раннее упоминание, которое я смог найти, - это проект MAC MIT в июне 1966 года AIM-098 или PDP-6 LISP, сделанные не кем иным, как Питером Самсоном:
EXPLODE, как PRIN1, вставляет косые черты, поэтому (EXPLODE (QUOTE FOO / BAR)) PRIN1 как (FOO // / BAR) или PRINC как (FOO / BAR).
Еще несколько отзывов.
@Walter Mitty вспомнил на этом сайте в 2008 году:
Я второй файл жаргона относительно Foo Bar. Я могу проследить это, по крайней мере, до 1963 года и до серийного номера PDP-1 2, который находился на втором этаже здания 26 в MIT. Foo и Foo Bar использовались там, а после 1964 года в комнате PDP-6 в проекте MAC.
Джон В. Эверетт вспоминает в 1996 году:
Когда я присоединился к DEC в 1966 году, foobar уже широко использовался как одноразовое имя файла. Я считаю, что fubar стал foobar, потому что PDP-6 поддерживал шесть имен символов, хотя я всегда предполагал, что термин перенесен в DEC из MIT. В те дни в DEC было много типов MIT, некоторые из которых работали с CTSS 7090/7094. Так как 709x был также 36-битным компьютером, foobar, возможно, использовался как общее имя файла там.
Foo и bar также обычно используются в качестве расширений файлов. Поскольку текстовые редакторы того времени работали с входным файлом и создавали выходной файл, было обычным редактировать файл .foo в файл .bar и обратно.
Также было распространено использование foo для заполнения буфера при редактировании с помощью TECO. Текстовая строка для точного заполнения одного блока диска была IFOO $ HXA127GA $$. Почти все программисты PDP-6/10, с которыми я работал, использовали одну и ту же командную строку.
Даниэль П.Б. Смит в 1998 году:
У Дика Грюна было устройство в его комнате в общежитии, обычная сборка B-батареи, резисторов, конденсаторов и неоновых трубок NE-2, которые он назвал «счетчиком foo». Это было бы около 1964 года или около того.
Роберт Шульденфрей в 1996 году:
Использование FOO и BAR в качестве примера имен переменных восходит, по крайней мере, к 1964 году и IBM 7070. Это тоже может быть старше, но именно там я впервые увидел это. Это было в Ассемблере. Что будет эквивалентно целому числу Фортрана? ИФОО и ИБАР?
Пол М. Вексельблат в 1992 году:
Самый ранний PDP-1 Assembler использовал два символа для символов (18-битный компьютер), программисты всегда оставляли несколько слов в качестве места исправления для исправления проблем. (Перейти к месту исправления, создать новый код, перейти назад) Это пространство обычно называлось FU: оно обозначало Fxxx Up, место, где вы установили Fxxx Ups. Когда говорилось, это было известно как пространство FU. Более поздние ассемблеры (например, MIDAS позволили три тега char, чтобы FU стал FOO, и, как ВСЕ программисты PDP-1 скажут вам, что это пространство FOO.
Брюс Рейнольдс в 1996 году:
На стороне IBM FOO (FU) BAR используется сторона BAR в качестве регистра базовых адресов; в середине 1970-х программисты CICS должны были беспокоиться о различных xxxBAR ... Я думаю, что одним из них был FRACTBAR ...
Вот такой прямой IBM "BAR" с 1955 года.
Другие ранние ссылки:
1973 foo bar Международный объединенный совет по искусственному интеллекту
1975 foo bar Международный объединенный совет по искусственному интеллекту
Я не смог найти никаких ссылок на панель foo как «инвертированный сигнал foo», как это предлагается в RFC3092 и в других местах.
Вот некоторые из более ранних F00, но я думаю, что это совпадения / ложные срабатывания:
Использование таких слов, как «foo» и «bar», заставляет вас сосредоточиться на концепции, а не на том, что вы можете понять, основываясь на известных вам терминах. Например:
public abstract class Animal
{
public abstract void speak();
}
public class Cat
extends Animal
{
public abstract void speak()
{
System.out.println("meow");
}
}
public class Dog
extends Animal
{
public abstract void speak()
{
System.out.println("bark");
}
}
Приведенный выше код позволяет вам вернуться к своим знаниям о реальных вещах.
Если вы пытаетесь объяснить концепцию, в которой важная часть состоит не в том, что делается (например, печать мяу или кора), а в том, как это делается, то удаление частей, которые вам знакомы, поможет:
public abstract class Foo
{
public abstract void star();
}
public class Bar
extends Foo
{
public abstract void star()
{
System.out.println("A");
}
}
public class Car
extends Foo
{
public abstract void star()
{
System.out.println("b");
}
}
Теперь вы должны сосредоточиться на том, что на самом деле происходит, вы больше не в состоянии угадать, что произойдет.
Итак, короткая версия заключается в том, что foo, bar и тому подобное используются для подчеркивания концепций, в которых содержание не имеет значения, но идея имеет значение.
С http://en.wikipedia.org/wiki/Foobar
В технологии это слово, вероятно, первоначально распространялось в системных руководствах Digital Equipment Corporation в 1960-х и начале 1970-х годов. Другая возможность состоит в том, что foobar развился из электроники, как инвертированный сигнал foo. Это происходит потому, что если цифровой сигнал имеет низкий активный уровень (таким образом, отрицательное или нулевое напряжение представляет собой «1»), то горизонтальная полоса обычно помещается над меткой сигнала. Файл Jargon делает случай, который foo возможно предшествует FUBAR
Из файлов жаргона http://www.catb.org/jargon/html/F/foo.html
foo: / foo /
bar: / bar /, n.
Согласно http://en.wikipedia.org/wiki/Foo :
Происхождение терминов точно не известно, и для их выявления было выдвинуто несколько анекдотических теорий. Foobar может происходить из вульгарной военной аббревиатуры FUBAR, или же он приобрел популярность из-за того, что он произносится так же.
Я второй файл жаргона относительно Foo Bar.
Я могу проследить это, по крайней мере, до 1963 года и до серийного номера PDP-1 2, который находился на втором этаже здания 26 в MIT. Foo и Foo Bar использовались там, а после 1964 года в комнате PDP-6 в проекте MAC.
Насколько я знаю, Foo приходит от Foobar который является изменение «FuBar», военный улов phraase , что означает « F *** эд U р б eyond а Л.Л. г ecognition.»
Опять же, могут быть и другие источники.
Foo и Bar (также известные как FUBAR ... F *** ed Up Beyond All Recognition) только что использовались в качестве стандартных универсальных имен для таких вещей, как классы, свойства, имена методов и т. Д.
По сути, идея состоит в том, чтобы передать ваш код без лишней посторонней информации, которая могла бы отойти от того, как работает код (т.е. нам не нужно знать, что ваша функция называется AddUser, чтобы увидеть код и понять, что он делает, если мы переименуем его в Foo ()).
Это бессмысленные слова, которые в большинстве случаев могут быть заменены более подходящими примерами слов. Слова «foo» и «bar» часто используются в программировании, когда кто-то не может придумать хороший пример.
Если «foo» и «bar» являются производными от FUBAR, почему они используются многими профессионалами в примерах инструкций, когда примеры не напоминают ничего, что было бы до неузнаваемости?
Для меня общее использование этих слов неуместно - это то, что так вышло до неузнаваемости.