Метапеременные
Метапеременные — это слова-заменители, которые применяются в технических текстах для обозначения чего-либо, что может стоять на их месте, метапеременные часто используются в программировании.
Обычно используют осмысленные имена метапеременных. Например, описание команды переименования файла может выглядеть следующим образом:
mv source target
Здесь source и target — метапеременные, обозначающие имя файла до (source) и после (target) переименования. Однако часто используются и слова, не несущие смысловой нагрузки, foo является каноническим примером.
Использование метапеременных в тексте аналогично использованию в математике букв x, y и z для неизвестных переменных и a, b и c для неизвестных констант. Метапеременные можно рассматривать как переменные метаязыка, используемого, например, для обсуждения программного кода, описания алгоритма и т. п.
Часто используемые метапеременные
Искусственные слова
- foo часто используется как первая метапеременная, для обозначения неопределённого (пока) объекта: функции, процесса, и т. п. Этимология этого слова также раскрывается в первоапрельском RFCRFC 3092.
- bar используется для ссылки на второй неопределённый объект в обсуждении. Например, «функция foo вызывает функцию bar» или «функция foo(bar)».
- часто применяется метапеременная foobar, имя которой образовано как объединение foo и bar.
- baz — каноническая третья метапеременная, после foo и bar.
- quux — каноническая четвёртая метапеременная. Иногда используется вариант qux для четвёртой метапеременной и quux, quuux, quuuux и т. д. — для следующих.
- bat — используется некоторыми программистами вместо quux.
- xyzzy и plugh — волшебные слова в старой текстовой игре ADVENT.
- qwe, asd, zxc — набор символов для ввода информации в текстовые поля для быстрого заполнения.
Английские слова
- spam и eggs — канонические метапеременные, используемые в языке программирования скетч комик-группы Монти Пайтон.
- needle (иголка) и haystack (стог сена) могут использоваться в примерах, объясняющих синтаксис команд или функций поиска; благодаря идиоме «искать иголку в стоге сена», становится понятно, что в чём ищется.
Другие примеры
В качестве метапеременных используются: test, mum, thud, beekeeper, hoge, corge, grault, garply, waldo, kalaa, puppu, dothestuff, temp, var, sub.
Часто используемые мета-числа
- 42 часто используется как инициализатор для переменных, когда конкретное значение не важно. Число взято из произведения Дугласа Адамса «Путеводитель для путешествующих автостопом по галактике», в котором оно фигурирует как ответ на главный вопрос жизни, вселенной и всего такого.
- другие числа: 23, 47, 69, 666, 0815, 1337, 4711, DEADBEEF16.
Наличие таких чисел в выводе может указывать на логическую ошибку в программе — неинициализированную переменную.
Имена людей
- J. Random (англ.random — случайный) и Ned Baker используются для обозначения любого человека или какого-то человека из определённой группы, например «J. Random User».
- Имена Алиса (Alice) и Боб (Bob) используются, когда идёт речь о взаимодействии двух человек, например при описании применения криптографических протоколов. В качестве продолжения ряда могут использоваться Carol, Dave и т. д. Для некоторых ролей используются традиционные имена, например, Ева (Eve) — это пассивный взломщик, который может перехватывать данные, но не может их изменять, Мэллори (Mallory) — это активный взломщик, Трент (Trent) — нейтральный арбитр.
Доменные имена
Ссылки
Approximately 212 RFCs, or about 7 % of RFCs issued so far, starting with [RFC269], contain the terms `foo’, `bar’, or `foobar’ used as a metasyntactic variable without any proper explanation or definition. This may seem trivial, but a number of newcomers, especially if English is not their native language, have had problems in understanding the origin of those terms. This document rectifies that deficiency.
Wikimedia Foundation . 2010 .
- Метановые углеводороды
- Метаплазия Баррета
Foo что это в программировании
Метапеременные — это слова, которые используются в программировании для обозначения определенных значений. Две самые популярные из них называют обобщенно 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»: как в программировании появились два самых популярных «зарезервированных имени»
Задумывались ли вы о том, откуда в программировании появились «зарезервированные имена» foo и bar? Недавно такой вопрос был задан на Stack Overflow, и, помимо лучшего ответа, мы собрали несколько различных мнений по этому поводу.
На Stack Overflow был задан вопрос:
Вот лучший пользовательский ответ:
Функций, операторы, модули
Функция может возвращать одно или несколько значений. Если функция не вернула ни одного значения, то считается, что она вернула None . Если возвращаемое значение не было присвоено переменной, то оно теряется.
loo(24)
x = foo(24)
x,y,t = bar(42)
Функции как переменные
Функция в Python — переменная специального типа function . Объявление функции можно рассматривать как объявление одноименной переменной:
def foo(x, y): return x + y bar = foo bar(2, 3) # 5 def comcall(x, y, fun): return fun(x, y) comcall(2, 3, foo) # 5
Некоторые встроенные функции
| Функция | Назначение |
|---|---|
| len(x) | Длина перечисляемого x , например строки, возвращает int |
| abs(x) | Абсолютное значение числа x |
| type(x) | Тип данных x , возвращает специальный объект — тип |
| print(x) | Печать на экран x , возвращает None |
| id(x) | Возвращает уникальный идентификатор объекта |
Операторы
Об операторах надо думать, как об упрощенной форме записи вызовов функций:
y = 1+2*3 # тоже, что и y = __add__(1,__mult__(2,3))
Операторы и вызовы функций можно свободно смешивать:
y = 2*len(x)+1
Многие операторы имеют сокращенную форму записи:
y = y + 1 y += 1
Арифметические операторы
bool, int, float
str, bytes, list
bool, int, float
bool, int, float
str, bytes, list * int
bool, int, float
bool, int, float
bool, int, float
bool, int, float
str, bytes
"hello %s" % "world"
Python позволяет смешивать переменные разных числовых типов в одном выражении, при этом тип результата определяется наиболее содержательным типом.
Некоторые логические операторы
Логические операторы возвращают значения типа bool и используются, в основном, в качестве различных условий.
not x
x and y
x or y
x >= y
x == y
x is y
x & y
x | y
Операторы над составными типами
in, not in
x in data
data[x]
data.x, data.foo(2)
Модули
Почти все функции как стандартной библиотеки, так и и сторонних организованы в модули
Для подключения модулей используется ключевое слово import
Для доступа к методам используется оператор .
import math math.cos(3) # Успешно: вызван метод ''cos'' модуля ''math'' cos(3) # Ошибка: метода ''cos'' неизвестен
from math import cos cos(3) # Успешно: вызван метод ''cos'' модуля ''math''
import math as m m.cos(3) # Успешно: вызван метод ''cos'' модуля ''math''
Собственные модули
Аналогично происходит импорт из одного файла в другой: если я хочу вызвать метод foo из файла myfuncs.py , то мне следует воспользоваться одним из следующих вариантов:
import myfuncs myfuncs.foo()
from myfuncs import foo foo()
Специальной командой from myfuncs import * можно импортировать все доступные методы из модуля, но это считается плохим стилем.
Приведение типов
Типы автоматически не приводятся. Но типы int , float и bool можно смешивать в арифметических выражениях. Результат будет определяться наиболее ёмким типом ( float > int > bool ).
| Исходный тип — переменная x | |||||
|---|---|---|---|---|---|
| Целевой тип | bool | int | float | str | bytes |
| bool | bool(x) | bool(x) | bool(x) | bool(x) | |
| int | int(x) | round(x) , math.ceil(x) , math.trunc(x) | int(x) | struct.unpack(fmt,x) | |
| float | float(x) | float(x) | float(x) | struct.unpack(fmt,x) | |
| str | str(x) | str(x) | str(x) | x.decode(encoding) | |
| bytes | x.to_bytes(length, order), struct.pack(fmt, x) | x.to_bytes(length, order), struct.pack(fmt,x) | struct.pack(fmt,x) | x.encode(encoding) | |
Используются модули math и struct .
Функция print
print() — печатает текст в консоли. Принимает произвольное число аргументов, производного типа, если аргумент не строка, то у него вызывается метод __str__() , а при отсутствии потом __repr__() (есть у всех переменных всех типов). Таким образом print так или иначе выведет на печать переменную любого типа.
a = 25 print("тест:", a , "-", 3.158)
#тест: 25 - 3.158 #
Дополнительные аргументы: sep — разделитель, по умолчанию пробел, end — конец строки, по умолчанию \n .
a = 25 print("тест:", a , "-", 3.158, sep=";", end="\nконец.\n")
тест:;25;-;3.158 конец.