Чому багато прикладів коду, особливо навчальні посібники, так часто використовують назви "Foo" та "Bar"? Це майже стандарт.
Наприклад:
void foo(char* bar) {
printf("%s", bar);
}
Чому багато прикладів коду, особливо навчальні посібники, так часто використовують назви "Foo" та "Bar"? Це майже стандарт.
Наприклад:
void foo(char* bar) {
printf("%s", bar);
}
Відповіді:
Foo і бар походять від абревіатури Другої світової війни FUBAR, "F-ed Beyond All Recognition". Ціла родина цих термінів набула широкого вжитку під час північноафриканських та сицилійських кампаній (1942-43). Відмінний День битви Ріка Аткінсона : Війна на Сицилії та Італії, 1943-1944 рр. Дає перелік цих. Наприклад, JANFU - це "Об'єднаний флот армії F Up", наприклад, інцидент 11 липня 1943 р., Коли флот вторгнення для операції "Хаскі" збив 23 транспортні засоби ВС ВС ВС ЗС 47, які перевозили десантники, щоб підсилити пляжний край.
Оновлення: У Вікіпедії є список пов’язаних абревіатур, що включає деякі оригінали, перелічені Аткінсоном.
Будь-який програміст зрозуміє мотивацію використання foo та bar для назви змінних. Вони, безумовно, були частиною культури C / UNIX з самого початку, і як зазначає @Walter Mitty, перед цим.
Оновлення (5.10.2009): Ось опис Аткінсона:
Їх повсюдна «цивільність» змусила їх насторожено ставитися до воєнного завзяття. "Ми не були романтиками, сповненими миску з мечем і мечем", - написав Джон Мейсон Браун, лейтенант запасу військово-морського флоту, що прямував до Сицилії. "Остання війна була для цього занадто близькою". Військове життя розпалювало їх іронічну чуйність і скептицизм. Єдиний сирий абревіатура, яка охопила знижені сподівання солдата - SNAFU, "ситуація нормальна, всі трахнули" - перетворилася на словниковий запас цинізму GI: SUSFU (ситуація незмінна, все ще трахкалася); FUMTU (трахкав більше, ніж зазвичай); JANFU (об'єднана армія-флот); JAAFU (спільний англо-американський ебать); FUAFUP (трахкав і правильно трахкав); та FUBAR (трахкавсь поза всім визнанням) [Аткінсон, с. 36].
Оновлення (23.11.2011): @Hugo має фантастичний перелік невійськових попередників.
Я думаю, що це фонетична вимова фубару.
Що означає:
Словник « Нового хакера» має дуже хороший запис у цьому питанні - і я вважаю це кращим ресурсом для подібних речей, ніж Вікіпедія:
метасинтаксична змінна /n./
Ім’я, яке використовується в прикладах, яке розуміється як річ, що обговорюється, або будь-який випадковий член класу речей, що обговорюються. Слово foo - канонічний приклад. Щоб уникнути плутанини, хакери ніколи (ну, навряд чи коли-небудь) використовують "foo" або інші слова, подібні до нього, як постійні назви ні для чого. У назви файлів загальною умовою є те, що будь-яке ім'я файлу, що починається з імені метасинтаксичної змінної, - це файл скретчів, який можна видалити в будь-який час.
Певною мірою список бажаних метасинтаксичних змінних є культурною ознакою. Вони трапляються як послідовно (використовуються для споріднених груп змінних чи об’єктів), так і як одиночні. Ось кілька загальних підписів:
foo, bar, baz, quux, quuux, quuuux ...: використання
MIT / Stanford, що зараз зустрічається скрізь (завдяки значною мірою ранній версії цього лексикону!). У MIT (але не в Стенфорді) баз на деякий час відмовився від використання в 1970-х і 80-х. Поширена недавня мутація цієї послідовності вставляє qux перед quux.bazola, ztesch:
Стенфорд (з середини 70-х років).foo, bar, thud, grunt:
Ця серія була популярною у КМУ. Інші змінні асоційовані з CMU включають gorp.foo, bar, fum:
Повідомляється, що ця серія є поширеною на XEROX PARC.fred, barney:
Дивіться запис для fred. Це, як правило, британізми.corge, grault, flarp:
Популярний в університеті Ратгерса і серед хакерів GOSMACS.zxc, spqr, вомбат:
Кембриджський університет (Англія).shme
Berkeley, GeoWorks, Ingres. Вимовлений / шме / з коротким / е /.snork
Brown University, початок 1970-х.foo, bar, zot
Гельсінський технологічний університет, Фінляндія.благ, вібл
Нова Зеландія.тото, титі, тата, туту
Франція.піппо, плуто, паперино
Італія. Pippo / pee'po / і Paperino / pa-per-ee'-no / - італійські назви Гуфі та Дональда Дака.aap, noot, mies
Нідерланди. Це перші слова, якими дитина навчилася писати правопис на дошці правопису.З усього цього, лише "foo" і "bar" є універсальними (і майже так). Сполуки foobar і `foobaz 'також користуються дуже широкою валютою.
Деякі терміни жаргону також використовуються як метасинтаксичні назви; барф і бурмотіння, наприклад. Дивіться також Commonckalth 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 зазвичай використовуються в такому порядку, коли потрібно кілька об'єктів.
Foo увійшов до англійської мови як неологізм, і багато хто вважається канонічним прикладом метасинтаксичної змінної. [Потрібне цитування] Він широко використовується в прикладах програмування комп'ютерів (іноді виражається як "для одного разу") і псевдокоду. Ерік С. Реймонд назвав це "важливим хакерством" поряд з глуздом і суровістю [1].
http://en.wikipedia.org/wiki/Foo
І від RFC 3092:
При використанні у зв'язку з "бар", це, як правило, простежується до армійського сленгового абревіатури епохи Другої світової війни FUBAR ("Fucked Up Beyond All Repair"), пізніше модифікованого на foobar. Ранні версії файлу про жаргон [JARGON] інтерпретували цю зміну як повоєнну будлеризацію, але тепер, мабуть, більш ймовірно, що FUBAR був самим похідним 'foo', можливо, під впливом німецького 'furchtbar' (жахливо) - 'foobar' насправді були первісною формою.
Бо, здається, саме слово "foo" мало безпосередню довоєнну історію в коміксах та мультфільмах. У мультфільмі «Брати Уорнер» 1938 року режисера Роберта Клампета «Докфій Дакфі» дуже рання версія Даффі Дак підписує знак «МІРНІСТЬ СТРАШЕ!» ... (фрагмент)
тл; д-р
"Foo" і "bar" як метасинтаксичні змінні були популяризовані MIT і DEC, перші посилання є в роботі над LISP і PDP-1 та Project MAC з 1964 року.
Багато з цих людей були в залізничному клубі Tech Model MIT, де ми знайшли перше задокументоване використання «foo» в технічних колах у 1959 році (і варіант у 1958 році).
І "foo", і "bar" (і навіть "baz") були добре відомі в популярній культурі, особливо з коміксів Smokey Stover та Pogo, які прочитали багато членів TMRC.
Крім того, мабуть, військова FUBAR сприяла їх популярності.
Використання самотнього "foo" як дурницького слова досить добре зафіксовано в популярній культурі на початку 20 століття, як і військовий FUBAR. (Деякі фонові читання: FOLDOC FOLDOC Jargon File File Jargon Wiki Wikipedia RFC3092 )
Гаразд, тож давайте знайдемо кілька посилань.
СТОП ПРЕСС! Опублікувавши цю відповідь, я виявив цю ідеальну статтю про "foo" у випуску The Tech ("найстаріша і найбільша газета MIT & перша газета, опублікована в Інтернеті" 14 січня 1938 р. ), Том LVII. № 57, ціна три центи:
Про Фуосизм
Лоундж вважає, що цей бізнес Фоосизму був занадто далеко перенесений його помилковими прихильниками, і цим і негайно виступає проти своєї зловживання. Можливо, немає такого дурака, як старий дур, і ми його, але все одно, фу та його гроші - це якась партія. (Голос від відбілювачів - "Не журися!")
Як вибагливий, звичайно, "foo!" займає певну і, мабуть, незамінну позицію в нашій мові, хоча ми побоюємось, що надмірне вживання, якому вона зараз піддається, може призвести до того, що воно потрапить у раннє (і, на жаль, темне) забуття. Ми говоримо на жаль, тому що правильне використання цього слова може спричинити такі щасливі випадки, як наступні.
Це була лекція професора Слейтера в кімнаті 6-120 про термодинаміку 8.50. Професор, накривши лицьову сторону дошки, встановив ручку, яка управляє механізмом підйому, тим часом повернувшись до класу, щоб продовжити свою дискусію. Передня дошка повільно, велично піднялася сама, виявивши дошку за нею, а на цій дошці, написавши великі, символи, які написали "ФОО"!
Газета «Тех» , роком раніше, Лист до редакції, вересень 1937 року :
На той час, коли поїзд дійшов до станції, неофіти настільки наповнені історіями про славу Філі Омікрон Омікрон, яку зазвичай називають Фу, що вони є легкою здобиччю.
...
Я не маю на увазі те, що втратив своїх перших чотирьох синів у Великому і Всезагальному братстві Фі-Омікрон Омікрон, але я хочу, щоб мій п’ятий син, моя дитина, був принаймні попереджений.
Сподіваємось, ваш,
Обурена мати п'яти.
І техніка в грудні 1938 року :
Загальна тенденція думки може бути найкраще інтерпретована із зауважень, зроблених наприкінці бюлетенів. Один голос сказав: "Я не думаю, що я займаюся будь-якою справою Пульвера", а інший лише додав скорочення "Foo".
Перша документальна «Foo» в технічних колах, ймовірно , +1959 «s Словник TMRC Мова :
FOO: священний склад (FOO MANI PADME HUM); слід говорити лише тоді, коли під натхненням спілкуватися з Божеством. Наше перше зобов'язання - тримати повороти лічильників Foo.
Це пояснюють у FOLDOC . Укладач словника Піт Самсон сказав у 2005 році:
Використання цього слова в TMRC передбачило моє приїзд туди. Лічильник foo може просто мати випадково блимаючі вогні, або може бути справжнім лічильником з неясним входом.
І з файлу Jargon 1996 року 4.0.0 :
Раніші версії цього лексикону походили як "баз" як корупція Стенфорда. Однак Піт Самсон (укладач лексикону TMRC) повідомляє, що це вже було актуальним, коли він приєднався до TMRC в 1958 році. Він каже: "Походив з" Пого ". Альберт Алігатор, коли його примушують або обурюють, кричить" Bazz Fazz! " або "Rowrbazzle!" Казали, що клубний макет моделює (міфічний) округи Нової Англії Роурфолк та Бассекс (Роурбалз змішався з (Норфолк / Суффолк / Міддлсекс / Ессекс) ".
За рік до словника TMRC, 1958 року, газета MIT Voo Doo Gazette (" Доповнення юмору в декані департаменту MIT") (PDF) згадує Foocom у "Законах Мерфі і Фінагле" Джона Банджафа (студента електротехніки) :
Подальші дослідження в рамках спільного гранту Foocom і Anarcom розширили закон, щоб бути всеохоплюючим і загальноприйнятим: якщо щось може піти не так, це буде!
Також 1 964 «S MIT Voo Doo (PDF) посилається на використання 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" з MAC's Project MAC у січні 1964 року AIM-064, або вправи LISP Тимофі П. Харт та Майкл Левін:
автомобіль [((FOO. CROCK). GLITCH)]
Він ділиться багатьма іншими метасинтаксичними змінними, такими як: CHI / BOSTON NEW YORK / SPINACH BUTTER STEAK / FOO CROCK GLITCH / POOT TOOP / TOOT TOOT / ISTHISATRIVIALEXCERCISE / PLOOP FLOT TOP / SNAP CRACKLE POP / ONE TWO THRER / PLANE
Як для "foo", так і для "bar" разом, найраніша довідка, яку я могла знайти, - це проект MAC Project MAC в червні 1966 року AIM-098 або PDP-6 LISP ніким, крім Пітера Самсона:
EXPLODE, як PRIN1, вставляє косої риси, тому (EXPLODE (QUOTE FOO / BAR)) PRIN1 як (FOO // / BAR) або PRINC як (FOO / BAR).
Ще кілька спогадів.
@Walter Mitty нагадав про цей сайт у 2008 році:
Я другий файл жаргону щодо Foo Bar. Я можу простежити це, принаймні, до 1963 року, і серійний номер 2 PDP-1, який знаходився на другому поверсі будинку 26 в MIT. Foo і Foo Bar були використані там, а після 1964 року в кімнаті PDP-6 на проекті MAC.
Джон В. Еверетт згадує у 1996 році:
Коли я приєднався до DEC в 1966 році, foobar вже часто використовувався як ім'я файлу, що викидається. Я вважаю, що фубар став foobar, оскільки PDP-6 підтримував шість імен символів, хоча я завжди припускав, що термін перенесений на DEC з MIT. В ті часи в DEC було багато типів MIT, деякі з яких працювали з 7090/7094 CTSS. Оскільки 709x був також 36-бітною машиною, foobar, можливо, там використовувався як загальне ім'я файлу.
Foo і bar також часто використовувались як розширення файлів. Оскільки текстові редактори дня працювали над вхідним файлом і створювали вихідний файл, звичайно було редагувати з.
Також було часто використовувати foo для заповнення буфера під час редагування TECO. Текстовий рядок, щоб точно заповнити один блок диска, був IFOO $ HXA127GA $$. Майже всі програмісти PDP-6/10, з якими я працював, використовували цей самий командний рядок.
Даніель П. Б. Сміт у 1998 році:
Дік Грюен мав пристрій у своїй гуртожитковій кімнаті, звичайну збірку батареї В, резистори, конденсатори та неонові трубки NE-2, які він назвав «лічильником футу». Це було б близько 1964 року.
Роберт Шульденфрей у 1996 році:
Використання FOO і BAR як прикладних імен змінних приходить щонайменше до 1964 року та IBM 7070. Це теж може бути старшим, але саме там я вперше побачив це. Це було в Асемблері. Яким був би цільовий еквівалент FORTRAN? IFOO та IBAR?
Пол М. Вексельблат у 1992 році:
Найдавніший Ассемблер PDP-1 використовував два символи для символів (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 року.
Інші ранні посилання:
Я не зміг знайти жодних посилань на колонку 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-х. Інша можливість полягає в тому, що фоабар еволюціонував з електроніки, як перевернутий сигнал кадру. Це відбувається тому, що якщо цифровий сигнал активний низьким (тому умова негативної або нульової напруги являє собою "1"), то над міткою сигналу зазвичай розміщується горизонтальна смуга. Файл Jargon робить випадок, який, можливо, передує FUBAR
З файлів Jargon http://www.catb.org/jargon/html/F/foo.html
foo: / foo /
бар: / бар /, н.
Відповідно до http://en.wikipedia.org/wiki/Foo :
Походження термінів не відомо з певністю, і для їх ідентифікації було розроблено кілька анекдотичних теорій. Foobar може походити від вульгарного військового абревіатури FUBAR, або він набув популярності через те, що він вимовляється тим самим.
Я другий файл жаргону щодо Foo Bar.
Я можу простежити це, принаймні, до 1963 року, і серійний номер 2 PDP-1, який знаходився на другому поверсі будинку 26 в MIT. Foo і Foo Bar були використані там, а після 1964 року в кімнаті PDP-6 на проекті MAC.
Наскільки я знаю, Foo приходить від Foobar який є зміна «FuBar», військовий улов phraase , що означає « F *** ред у р б eyond Л.Л. г ecognition.»
Потім знову можуть бути інші джерела.
Foo і Bar (інакше відомий як FUBAR ... F *** ed Up Beyond All Recognition) щойно використовуються як стандартні загальні імена для таких речей, як класи, властивості, назви методів тощо.
В основному ідея полягає в тому, щоб передати код без такої кількості сторонньої інформації, яка могла б відійти від того, як працює код (тобто нам не потрібно знати, що ваша функція називається AddUser, щоб побачити код і зрозуміти, що він робить, якщо ми перейменовуємо його до Foo ()).
Це нісенітниці, які в більшості випадків можуть бути замінені більш відповідними прикладними словами. Слова "foo" і "bar" часто використовуються в програмуванні, коли хтось не може придумати хороший приклад.
Якщо "foo" і "bar" є похідними від FUBAR, то чому їх використовує так багато професіоналів у прикладах інструкцій, коли приклади не нагадують нічого, що не виходить з-за невпізнання?
Для мене загальне використання цих слів недоцільно - це те, що вийшло невпізнанним.