Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Статьи

«Foo» и «bar» в программировании

8 июня 2023·2 мин чтения
Логотип YuSMP Group
Автор материалаРедакция компании YuSMP GroupБлог YuSMP Group
Профиль редакции
«Foo» и «bar» в программировании

TL;DR. Foo, bar и baz — метапеременные: слова-заглушки для переменных, функций и объектов в коде и документации, когда их имя не важно для примера. Пара foobar восходит к армейскому акрониму FUBAR времён Второй мировой войны, а порядок использования и альтернативные наборы имён официально зафиксированы в RFC 3092.

Метапеременные — это слова, которые используются в программировании для обозначения определенных значений. Две самые популярные из них называют обобщенно foobar. Расскажем, откуда они появились.

Читая код, вы наверняка часто встречали метод бар, который представляет собой самое популярное обозначение. Если вы погуглите «Fubar meaning», то наткнетесь на несколько версий происхождения этого названия.

В проектах, которые мы создали, они тоже встречаются — эти заглушки мелькают в черновиках кода на этапе разработки под ключ. Да и сложно найти продукты, в коде которых нет ни одного foo bar baz. Правда, третья метапеременная уже не считается каноничной. На многих платформах онлайн ведутся споры о ее применении.

Классические foobar хороши как своей лаконичностью, так и тем, что максимально отличаются друг от друга. А вот baz или bat очень похожи на bar по написанию. А различить их на слух тяжело даже нейтивам.

Если foo bar programming кажется недостаточным, то разработчики придумали список более подходящих имен для переменных. Специалисты веб-услуг и разработкив YuSMP Group готовы сделать для читателей экскурс в историю этих понятий.

Разработка мобильных приложений на заказ
Узнайте цену

Как появился foobar

Как ни странно, это название пришло из американской армии. Там существовал акроним FUBAR, который обозначал тотальное поражение. Во время Второй мировой войны в американских войсках создали целое семейство акронимов. Их активно применяли для описания боевых действий.

В книгах того периода, посвященных высадке в Северной Африки и Сицилии, описаны многочисленные акронимы, помогающие солдатам ярко и емко характеризовать происходящее.

Например, Рик Эткинс писал, что военные будни пробуждали в солдатах как цинизм, так и умение лаконично выражать свои мысли. FOOBAR — было способом рассказать, что все пошло максимально не по плану и обстановка хуже некуда.

Но вернемся к нашей теме. Если вы загуглите «fubar meaning», то, скорее всего, наткнетесь на книги по истории американской армии. Но в какой момент она превратилась в foobar — непонятно.

Согласно одной из версий, само слово изначально писалось через две «О». А в процессе использования оно изменилось, попав под немецкое влияние. В этом языке есть слово «furchtbar», которое обозначает нечто ужасное.

Foobar в наши дни

Сегодня эта пара метапеременных считается наиболее универсальной. То есть его используют разработчики приложений и платформ по всему миру. При этом есть и их менее популярные локальные версии.

Термины foo bar baz могут применяться как логические представления для любых переменных, команд и функций. При этом, нужно отметить, что foobar может использовать и самостоятельно. А вот все три слова применяются, когда нужно обозначить несколько объектов. Причем ими называют переменные именно в таком порядке. Первую — foo, вторую — bar и третью baz.

Еще больше интересных статей о программирование в блоге студии web-разработки YuSMP Group.

Как выбирать имена для метапеременных

Foo и bar работают как имена-плейсхолдеры именно потому, что их легко отличить друг от друга. У разработчиков сложилось негласное правило: хорошая метапеременная — короткая (2–3 буквы или один слог), заметно отличается по написанию и на слух от соседних слов в примере и легко произносится вслух. Baz и bat этому правилу уже не отвечают — они слишком похожи, и на слух их путают даже носители языка.

Именно поэтому RFC 3092 предлагает расширенный набор запасных имён — на случай, если foo, bar и baz в примере уже заняты и нужна четвёртая, пятая или шестая метапеременная.

НаборПорядок имёнГде встречается
Классическийfoo → bar → bazБольшинство кода и документации
Расширенный (RFC 3092)qux → quux → corge → grault → garply → waldo → fred → plugh → xyzzy → thudПримеры с 4+ переменными
Pythonspam → eggsОфициальная документация и туториалы Python
КриптографияAlice → Bob (→ Eve, Mallory)Описание протоколов обмена ключами
Код на экране монитора с примерами метапеременных foo, bar и baz

Другие метапеременные: spam/eggs, Alice и Bob, example.com

Foo, bar и baz — самый известный, но далеко не единственный набор метапеременных. У каждого сообщества и каждой предметной области сложился свой привычный словарь заглушек:

  • spam и eggs — стандартные имена в документации и туториалах Python, отсылка к скетчу Monty Python;
  • Alice и Bob — участники обмена данными в примерах по криптографии и сетевым протоколам, иногда к ним добавляют злоумышленницу Eve или Mallory;
  • example.com, example.org, example.net — зарезервированные IANA доменные имена для примеров в документации (RFC 2606), которые никогда не будут выкуплены и не приведут на реальный сайт;
  • 42 и DEADBEEF — метачисла: 42 как отсылка к «Автостопом по галактике», DEADBEEF — шестнадцатеричное значение, которым программисты помечают память в отладчике;
  • needle и haystack — метапеременные для операций поиска («иголка в стоге сена»), часто в описаниях строковых функций.

Принцип везде одинаковый: имя должно быть узнаваемым для читателя примера и не отвлекать на себя внимание — точно так же, как foo и bar в программировании.

RFC 3092 — официальный документ о происхождении foo

RFC 3092 «Etymology of ‘Foo’» — не просто интернет-легенда, а реальный документ Internet Engineering Task Force, опубликованный 1 апреля 2001 года. Несмотря на дату выхода, он серьёзно разбирает происхождение термина и отмечает, что слова foo, bar и foobar встречаются без каких-либо пояснений примерно в 212 других RFC — отсюда и появилась необходимость наконец задокументировать их этимологию.

Помимо военной версии с FUBAR, в документе приводится альтернативная история: в клубе технического моделирования железных дорог TMRC слово «FOO» загоралось на цифровом табло при срабатывании аварийного выключателя (scram switch), из-за чего такие переключатели стали называть «foo switches». Какая из версий точнее — сказать сложно, но обе сходятся в одном: foo родилось как внутренняя техническая шутка задолго до того, как стало стандартом в коде.

Частые вопросы о foo и bar в программировании

Что означают foo и bar в программировании?

Foo и bar — метапеременные (метасинтаксические переменные): слова-заглушки, которыми в коде и документации обозначают произвольные объекты — переменные, функции, файлы, — когда их конкретное имя не имеет значения для примера. Это программистский аналог «x» и «y» в алгебре.

Откуда взялось слово foobar?

Считается, что оно восходит к армейскому акрониму FUBAR (Fucked Up Beyond All Repair — «испорчено настолько, что не подлежит ремонту»), который появился в сленге американской армии во время Второй мировой войны. Со временем произношение и написание смягчились до foobar.

Правда ли, что RFC 3092 — официальный документ на эту тему?

Да. RFC 3092 «Etymology of ‘Foo’» — реальный документ IETF, опубликованный 1 апреля 2001 года. Несмотря на дату выпуска, он всерьёз фиксирует происхождение термина и упоминает, что слова foo, bar и foobar без пояснений встречаются примерно в 212 других RFC.

В каком порядке используют foo, bar и baz?

Канонический порядок такой: foo — первая метапеременная, bar — вторая, baz — третья. Их не переставляют местами: разработчики ожидают увидеть именно эту последовательность, когда встречают знакомые слова в чужом коде.

Как выбрать хорошее имя для метапеременной?

Ориентируйтесь на длину в 2–3 слога, максимальное отличие от соседних имён по написанию и на слух и лёгкое произношение. Например, baz и bat в связке путают чаще, чем foo и bar, — они слишком похожи по звучанию.

Есть ли другие метапеременные, кроме foo, bar и baz?

Да, их много: qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy и thud — расширенный набор из того же RFC 3092. В Python традиционно используют spam и eggs, в криптографии — имена Alice и Bob, а для примеров доменов — example.com.

Нужны разработчики в команду?

Подберём инженеров нужного стека под ваш проект — быстрый старт.

Обсудить команду