¿Por qué muchos ejemplos de código, especialmente tutoriales, usan los nombres "Foo" y "Bar" con tanta frecuencia? Es casi un estándar.
Por ejemplo:
void foo(char* bar) {
printf("%s", bar);
}
¿Por qué muchos ejemplos de código, especialmente tutoriales, usan los nombres "Foo" y "Bar" con tanta frecuencia? Es casi un estándar.
Por ejemplo:
void foo(char* bar) {
printf("%s", bar);
}
Respuestas:
Foo y bar provienen del acrónimo de la Segunda Guerra Mundial del Ejército de EE. UU. FUBAR, "F-ed Up Beyond All Recognition". Toda una familia de estos términos se generalizó durante las campañas del norte de África y Sicilia (1942-43). El excelente Día de batalla de Rick Atkinson : La guerra en Sicilia e Italia, 1943-1944 da una lista de estos. Por ejemplo, un JANFU es un "Ejército Conjunto de la Armada F Up", como el incidente del 11 de julio de 1943 cuando la flota de invasión de la Operación Husky derribó 23 transportes C-47 de la Fuerza Aérea del Ejército que transportaban paracaidistas para reforzar la cabeza de playa.
Actualización: Wikipedia tiene una lista de acrónimos relacionados que incluye algunos de los originales de la Segunda Guerra Mundial enumerados por Atkinson.
Cualquier programador comprenderá la motivación para usar foo y bar para nombrar variables. Ciertamente han sido parte de la cultura C / UNIX desde el principio, y como señala @Walter Mitty, la precedieron.
Actualización (5/10/2009): Aquí está la descripción de Atkinson:
Su penetrante "civilismo" los hizo desconfiar del celo marcial. "No éramos románticos llenos de tonterías de capa y espada", escribió John Mason Brown, un teniente de la Reserva de la Marina que se dirigía a Sicilia. "La última guerra estaba demasiado cerca para eso". La vida militar inflamaba su sensibilidad irónica y su escepticismo. Un solo acrónimo crudo que capturó las bajas expectativas del soldado: SNAFU, "situación normal, todo jodido", se había expandido a un vocabulario de cinismo GI: SUSFU (situación sin cambios, aún jodida); FUMTU (jodido más de lo habitual); JANFU (mierda conjunta Ejército-Marina); JAAFU (coito angloamericano conjunto); FUAFUP (jodido y jodido propiamente dicho); y FUBAR (jodido más allá de todo reconocimiento) [Atkinson, p. 36]
Actualización (23/11/2011): @Hugo tiene una lista fantástica de los antecedentes no militares.
Creo que es la pronunciación fonética de fubar.
Lo que significa:
El New Hacker's Dictionary tiene una muy buena entrada en esto, y considero que es un mejor recurso para este tipo de cosas que Wikipedia:
variable metasintáctica /n./
Un nombre usado en ejemplos y entendido para representar cualquier cosa que se esté discutiendo, o cualquier miembro aleatorio de una clase de cosas en discusión. La palabra foo es el ejemplo canónico. Para evitar confusiones, los hackers nunca (bueno, casi nunca) usan 'foo' u otras palabras similares como nombres permanentes para nada. En los nombres de archivo, una convención común es que cualquier nombre de archivo que comience con un nombre de variable metasintáctica es un archivo de borrador que se puede eliminar en cualquier momento.
Hasta cierto punto, la lista de las variables metasintácticas preferidas es una firma cultural. Ocurren tanto en series (utilizadas para grupos relacionados de variables u objetos) como en singletons. Aquí hay algunas firmas comunes:
foo, bar, baz, quux, quuux, quuuux ...:
el uso de MIT / Stanford, ahora se encuentra en todas partes (¡gracias en gran parte a las primeras versiones de este léxico!). En el MIT (pero no en Stanford), baz dejó de usarse durante un tiempo en los años setenta y ochenta. Una mutación reciente común de esta secuencia inserta qux antes de quux.bazola, ztesch:
Stanford (desde mediados de los 70 en adelante).foo, bar, thud, gruñido:
Esta serie fue popular en CMU. Otras variables asociadas a CMU incluyen gorp.foo, bar, fum:
se informa que esta serie es común en XEROX PARC.Fred, Barney:
Ver la entrada de Fred. Estos tienden a ser británicos.corge, grault, flarp:
Popular en la Universidad de Rutgers y entre los hackers de GOSMACS.zxc, spqr, wombat:
Universidad de Cambridge (Inglaterra).lástima
Berkeley, GeoWorks, Ingres. Pronunciado / shme / con un corto / e /.Snork
Brown University, principios de los años 70.foo, bar, zot
Universidad de Tecnología de Helsinki, Finlandia.blarg, wibble
Nueva Zelanda.Toto, Titi, Tata, Tutu
Francia.Pippo, Plutón, Paperino
Italia. Pippo / pee'po / y Paperino / pa-per-ee'-no / son los nombres italianos de Goofy y Donald Duck.aap, noot, mies
Países Bajos. Estas son las primeras palabras que un niño usa para aprender a deletrear en un tablero de ortografía holandés.De todos estos, solo 'foo' y 'bar' son universales (y casi igual). Los compuestos foobar y 'foobaz' también disfrutan de una moneda muy amplia.
Algunos términos de la jerga también se usan como nombres metasintácticos; vomitar y murmurar, por ejemplo. Ver también Commonwealth Hackish para la discusión de numerosas variables metasintácticas encontradas en Gran Bretaña y la Commonwealth.
Wikipedia da esta definición de Variable Metasintáctica :
En informática, los programadores usan variables metasintácticas para describir un nombre de marcador de posición o un término de alias comúnmente usado para denotar el tema en discusión o un miembro arbitrario de una clase de cosas en discusión. El uso de una variable metasintáctica es útil para liberar a un programador de crear una variable con nombre lógico, que a menudo es útil al crear o enseñar ejemplos de un algoritmo. La palabra foo es el principal ejemplo.
El término "variable metasintáctica" se encuentra principalmente en la literatura informal. A veces también se usa como sinónimo de metavariable.
Cualquier símbolo o palabra que no viole las reglas del lenguaje puede usarse como una variable metasintáctica, pero las palabras sin sentido se usan comúnmente. El mismo concepto se emplea en otros campos donde se expresa mediante términos como variable esquemática (ver forma lógica ).
Por analogía matemática: una variable metasintáctica es una palabra que es una variable para otras palabras, tal como en las letras de álgebra se usan como variables para números.
El artículo también da ejemplos comunes de tales variables en diferentes lenguajes de programación:
C
En el siguiente ejemplo del lenguaje de programación C, el nombre de la función foo y la barra de nombre de la variable son ambas variables metasintácticas. Las líneas que comienzan con // son comentarios.
// The function named foo
int foo(void)
{
// Declare the variable bar and set the value to 1
int bar = 1;
return bar;
}
Pitón
El spam, el jamón y los huevos son las principales variables metasintácticas utilizadas en el lenguaje de programación Python. [5] Esta es una referencia al famoso boceto de comedia, Spam, de Monty Python, el epónimo del lenguaje. [6] En el siguiente ejemplo, el spam, el jamón y los huevos son variables metasintácticas y las líneas que comienzan con # son comentarios.
# Define a function named spam
def spam():
# define the variable ham
ham = "Hello World!"
#define the variable eggs
eggs = 1
return
Rubí
En el siguiente ejemplo, baz, foo y bar son variables metasintácticas y las líneas que comienzan con # son comentarios.
# 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
Aquí está la respuesta de wikipedia:
Los términos foobar, foo, bar y baz son nombres comunes de marcadores de posición (también denominados variables metasintácticas) utilizados en la programación de computadoras o en la documentación relacionada con la computadora. Se usan comúnmente para representar valores desconocidos, generalmente cuando se describe un escenario en el que se entiende el propósito de los valores desconocidos, pero sus valores precisos son arbitrarios y sin importancia. Los términos se pueden usar para representar cualquier parte de un sistema o idea complicada, incluidos los datos, las variables, las funciones y los comandos. Las palabras en sí mismas no tienen significado en este uso, y son meramente representaciones lógicas, al igual que las letras x e y se usan en álgebra. Foobar a menudo se usa solo; foo, bar y baz generalmente se usan en ese orden, cuando se necesitan múltiples entidades.
Foo ha ingresado al idioma inglés como un neologismo y es considerado por muchos como el ejemplo canónico de una variable metasintáctica. Eric S. Raymond lo ha llamado un "hackerismo importante" junto con kludge y cruft. [1]
http://en.wikipedia.org/wiki/Foo
Y de RFC 3092:
Cuando se usa en conexión con 'bar', generalmente se remonta al acrónimo del argot del ejército de la era de la Segunda Guerra Mundial FUBAR ('Fucked Up Beyond All Repair'), luego modificado a foobar. Las primeras versiones del archivo Jargon [JARGON] interpretaron este cambio como una bowdlerización de posguerra, pero ahora parece más probable que FUBAR sea en sí mismo un derivado de 'foo' quizás influenciado por el alemán 'furchtbar' (terrible) - 'foobar' puede En realidad ha sido la forma original.
Porque, al parecer, la palabra "foo" en sí tenía una historia inmediata de antes de la guerra en historietas y dibujos animados. En la caricatura de Warner Brothers de 1938 dirigida por Robert Clampett, "The Daffy Doc", una versión muy temprana de Daffy Duck sostiene un cartel que dice "¡EL SILENCIO ES FOO!" ... (recorte)
tl; dr
"Foo" y "bar" como las variables metasintácticas fueron popularizadas por MIT y DEC, las primeras referencias están en el trabajo en LISP y PDP-1 y Project MAC desde 1964 en adelante.
Muchas de estas personas estaban en el Tech Model Railroad Club del MIT, donde encontramos el primer uso documentado de "foo" en los círculos tecnológicos en 1959 (y una variante en 1958).
Tanto "foo" como "bar" (e incluso "baz") eran bien conocidos en la cultura popular, especialmente en los cómics de Smokey Stover y Pogo, que habrán sido leídos por muchos miembros de TMRC.
Además, parece probable que el FUBAR militar contribuyó a su popularidad.
El uso de "foo" solitario como una palabra sin sentido está bastante bien documentado en la cultura popular a principios del siglo XX, al igual que el FUBAR militar. (Algunas lecturas de fondo: FOLDOC FOLDOC Jargon File Jargon File Wikipedia RFC3092 )
Bien, entonces encontremos algunas referencias.
¡DETENGA LA PRENSA! Después de publicar esta respuesta, descubrí este artículo perfecto sobre "foo" en la edición del viernes 14 de enero de 1938 de The Tech ("El periódico más antiguo y más grande del MIT y el primer periódico publicado en la web"), Volumen LVII. No. 57, precio tres centavos:
Sobre el fooísmo
The Lounger cree que este asunto del foo-ismo ha sido llevado demasiado lejos por sus defensores equivocados, y por el presente toma su posición contra su abuso. Puede ser que no haya un foo como un viejo foo, y lo somos, pero de todos modos, un foo y su dinero son una fiesta. (Voz de las gradas: "¡No seas tonto!")
Como improperio, por supuesto, "foo!" tiene una posición definida y probablemente insustituible en nuestro idioma, aunque tememos que el uso excesivo al que está sometido actualmente pueda resultar en un olvido temprano (y, por desgracia, oscuro). Decimos por desgracia porque el uso adecuado de la palabra puede dar lugar a incidentes tan felices como los siguientes.
Fue una conferencia de termodinámica de 8.50 del profesor Slater en la sala 6-120. El profesor, después de cubrir la parte frontal de la pizarra, colocó el mango que opera el mecanismo de elevación, mientras se volvía hacia la clase para continuar su discusión. El tablero frontal lentamente, majestuosamente, se levantó, revelando el tablero detrás de él, y en ese tablero, escribe en grande, los símbolos que deletreaban "FOO".
El periódico Tech , un año antes, la Carta al Editor, septiembre de 1937 :
Cuando el tren llega a la estación, los neófitos están tan llenos de historias de la gloria de Phi Omicron Omicron, generalmente conocido como Foo, que son presa fácil.
...
No es que me importe haber perdido a mis primeros cuatro hijos en la Gran Hermandad Universal de Phi Omicron Omicron, pero deseo que mi quinto hijo, mi bebé, al menos sea advertido por adelantado.
Espero que sea tuyo
Madre indignada de cinco.
Y The Tech en diciembre de 1938 :
La tendencia general de pensamiento podría interpretarse mejor a partir de los comentarios realizados al final de las papeletas. Un voto dijo: "No creo que lo que haga sea asunto de Pulver", mientras que otro simplemente agregó un breve "Foo".
El primero documentado "foo" en los círculos tecnológicos es probablemente 1959 's Diccionario de la Lengua TMRC :
FOO: la sílaba sagrada (FOO MANI PADME HUM); ser hablado solo cuando esté inspirado para comunicarse con la Deidad. Nuestra primera obligación es mantener los mostradores de Foo girando.
Estos se explican en FOLDOC . El compilador del diccionario Pete Samson dijo en 2005:
El uso de esta palabra en TMRC es anterior a mi llegada allí. Un contador foo podría simplemente tener luces intermitentes al azar, o podría ser un contador real con una entrada oscura.
Y a partir de 1996 Jargon File 4.0.0 :
Las versiones anteriores de este léxico derivaron 'baz' como una corrupción de barra de Stanford. Sin embargo, Pete Samson (compilador del léxico TMRC) informa que ya estaba vigente cuando se unió a TMRC en 1958. Él dice "Provenía de" Pogo ". Albert the Alligator, molesto o indignado, gritaba '¡Bazz Fazz!' o 'Rowrbazzle!' Se dijo que el diseño del club modelaba los condados (míticos) de Nueva Inglaterra de Rowrfolk y Bassex (Rowrbazzle se mezcló con (Norfolk / Suffolk / Middlesex / Essex) ".
Un año antes del diccionario TMRC, el MIT Voo Doo Gazette de 1958 ("Suplemento de humor de la oficina del decano del MIT") (PDF) menciona a Foocom, en "Las leyes de Murphy y Finagle" de John Banzhaf (un estudiante de ingeniería eléctrica) :
La investigación adicional bajo una subvención conjunta de Foocom y Anarcom amplió la ley para que fuera global y aplicable universalmente: ¡si algo puede salir mal, lo hará!
También MIT Voo Doo (PDF) de 1964 hace referencia al uso de TMRC:
¡Si! Quiero ser un éxito instantáneo y clientes nevados. Envíame un título en: ...
Foo Counters
Foo Jung
Pero recordemos que esta pregunta se trata de ejemplos de código, así que busquemos "foo", "bar" y "foobar" publicados en el código.
Entonces, el archivo Jargon 4.4.7 dice de "foobar":
Probablemente originalmente propagado a través de los manuales del sistema DEC por Digital Equipment Corporation (DEC) en los años sesenta y principios de los setenta; avistamientos confirmados allí se remontan a 1972.
La primera referencia publicada que puedo encontrar es de febrero de 1964 , pero escrita en junio de 1963, The Programming Language LISP: su Operación y Aplicaciones por Information International, Inc., con muchos autores, pero incluyendo a Timothy P. Hart y Michael Levin:
Por lo tanto, dado que "FOO" es un nombre en sí mismo, "COMITRIN" tratará tanto a "FOO" como a "(FOO)" exactamente de la misma manera.
También incluye otras variables metasintácticas, tales como: FOO CROCK GLITCH / POOT TOOR / ON YOU / SNAP CRACKLE POP / XYZ
Espero que esto sea muy parecido a esta próxima referencia de "foo" del Proyecto MAC del MIT en AIM-064 de enero de 1964 , o Ejercicios LISP de Timothy P. Hart y Michael Levin:
coche [((FOO. CROCK). GLITCH)]
Comparte muchas otras variables metasintácticas como: CHI / BOSTON NUEVA YORK / BOTÓN DE ESPINACA / GLITCH DE CROCK FOO / TOOP DE POTO / TOOT TOOT / ISTHISATRIVIALEXCERCISE / PLOOP FLOT TOP / SNAP CRACKLE POP / ONE TWREE THREE / PLANE SUB THRESHER
Para ambos "foo" y "bar" juntos, la referencia más temprana que pude encontrar es del Proyecto MAC del MIT en AIM-098 de junio de 1966 , o PDP-6 LISP por nada menos que Peter Samson:
EXPLODE, como PRIN1, inserta barras, así que (EXPLODE (QUOTE FOO / BAR)) PRIN1 como (FOO // / BAR) o PRINC como (FOO / BAR).
Algunas más recordaciones.
@Walter Mitty recordó en este sitio en 2008:
Secundo el archivo de la jerga con respecto a Foo Bar. Puedo rastrearlo al menos hasta 1963, y el número de serie PDP-1 2, que estaba en el segundo piso del Edificio 26 en el MIT. Allí se utilizaron Foo y Foo Bar, y después de 1964 en la sala PDP-6 del proyecto MAC.
John V. Everett recuerda en 1996:
Cuando me uní a DEC en 1966, foobar ya se usaba comúnmente como un nombre de archivo desechable. Creo que fubar se convirtió en foobar porque el PDP-6 admitía seis nombres de caracteres, aunque siempre asumí que el término migraba a DEC desde el MIT. Había muchos tipos de MIT en DEC en esos días, algunos de los cuales habían trabajado con el CTSS 7090/7094. Como el 709x también era una máquina de 36 bits, foobar puede haber sido utilizado como un nombre de archivo común allí.
Foo y bar también se usaban comúnmente como extensiones de archivo. Dado que los editores de texto de la época operaban en un archivo de entrada y producían un archivo de salida, era común editar de un archivo .foo a un archivo .bar, y viceversa.
También era común usar foo para llenar un búfer al editar con TECO. La cadena de texto para llenar exactamente un bloque de disco fue IFOO $ HXA127GA $$. Casi todos los programadores PDP-6/10 con los que trabajé usaron esta misma cadena de comando.
Daniel PB Smith en 1998:
Dick Gruen tenía un dispositivo en su dormitorio, el conjunto habitual de baterías B, resistencias, condensadores y tubos de neón NE-2, que llamó un "contador de foo". Esto habría sido alrededor de 1964 más o menos.
Robert Schuldenfrei en 1996:
El uso de FOO y BAR como nombres de variables de ejemplo se remonta al menos a 1964 y al IBM 7070. Esto también puede ser más antiguo, pero ahí es donde lo vi por primera vez. Esto fue en Assembler. ¿Cuál sería el equivalente entero FORTRAN? ¿IFOO e IBAR?
Paul M. Wexelblat en 1992:
El primer ensamblador PDP-1 utilizaba dos caracteres para los programadores de símbolos (máquina de 18 bits) que siempre dejaban algunas palabras como espacio de parche para solucionar los problemas. (Salta al espacio de parche, haz un nuevo código, salta hacia atrás) Ese espacio convencionalmente se llamaba FU: que significaba Fxxx Up, el lugar donde arreglaste Fxxx Ups. Cuando se habla, se conoce como espacio FU. Ensambladores posteriores (por ejemplo, MIDAS permitió tres etiquetas char, por lo que FU se convirtió en FOO, y como TODOS los programadores de PDP-1 le dirán que ese fue el espacio FOO.
Bruce B. Reynolds en 1996:
En el lado de IBM de FOO (FU) BAR está el uso del lado de BAR como registro de dirección base; a mediados de la década de 1970, los programadores de CICS tuvieron que preocuparse por los diversos xxxBAR ... Creo que uno de ellos era FRACTBAR ...
Aquí hay un "BAR" de IBM directo de 1955.
Otras referencias tempranas:
1973 foo bar Consejo Conjunto Internacional sobre Inteligencia Artificial
1975 foo bar Consejo Conjunto Internacional sobre Inteligencia Artificial
No he podido encontrar ninguna referencia a foo bar como "señal de foo invertida" como se sugiere en RFC3092 y en otros lugares.
Aquí hay algunos de los F00 anteriores, pero creo que son coincidencias / falsos positivos:
El uso de palabras como "foo" y "bar" te hace concentrarte en el concepto, no en lo que puedes entender según los términos que conoces. Por ejemplo:
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");
}
}
El código anterior le permite recurrir a su conocimiento de las cosas del mundo real.
Si está tratando de explicar un concepto en el que la parte importante no es lo que se está haciendo (por ejemplo, imprimiendo maullidos o ladridos), sino cómo se está haciendo, entonces elimine las partes que le son familiares:
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");
}
}
Ahora tiene que concentrarse en lo que realmente está sucediendo, ya no puede adivinar lo que va a suceder.
Entonces, la versión corta es, que foo, bar y similares, se usan para enfatizar conceptos donde el contenido realmente no importa, pero la idea sí.
De http://en.wikipedia.org/wiki/Foobar
En tecnología, la palabra probablemente se propagó originalmente a través de manuales del sistema por Digital Equipment Corporation en los años sesenta y principios de los setenta. Otra posibilidad es que foobar evolucionó de la electrónica, como una señal foo invertida. Esto se debe a que si una señal digital está activa en baja (por lo que una condición de voltaje negativo o cero representa un "1"), generalmente se coloca una barra horizontal sobre la etiqueta de la señal. The Jargon File presenta un caso que posiblemente sea anterior a FUBAR
De los archivos de la jerga http://www.catb.org/jargon/html/F/foo.html
Foo Foo/
bar: / bar /, n.
De acuerdo con http://en.wikipedia.org/wiki/Foo :
Los orígenes de los términos no se conocen con certeza, y se han avanzado varias teorías anecdóticas para identificarlos. Foobar puede derivar del vulgar acrónimo militar FUBAR, o puede haber ganado popularidad debido al hecho de que se pronuncia igual.
Secundo el archivo de la jerga con respecto a Foo Bar.
Puedo rastrearlo al menos hasta 1963, y el número de serie PDP-1 2, que estaba en el segundo piso del Edificio 26 en el MIT. Allí se utilizaron Foo y Foo Bar, y después de 1964 en la sala PDP-6 del proyecto MAC.
Por lo que yo sé, foo proviene de foobar que es una alteración del "fubar", un phraase retén militar que significa " F *** ed u p b ás allá de un ll r l reconocimiento."
Por otra parte, puede haber otras fuentes.
Foo and Bar (también conocido como FUBAR ... F *** ed Up Beyond All Recognition) acaba de usarse como nombres genéricos estándar para cosas como clases, propiedades, nombres de métodos, etc.
Básicamente, la idea es transmitir su código sin tanta información extraña que pueda alejarse de cómo funciona el código (es decir, no necesitamos saber que su función se llama AddUser para ver el código y comprender qué hace si le cambiamos el nombre) a Foo ()).
Estas son palabras sin sentido que en la mayoría de los casos se pueden sustituir con palabras de ejemplo más relevantes. Las palabras "foo" y "bar" se usan con frecuencia en la programación cuando alguien no puede pensar en un buen ejemplo.
Si "foo" y "bar" se derivan de FUBAR, ¿por qué son utilizados por tantos profesionales en ejemplos de instrucción cuando los ejemplos no se parecen a nada más allá del reconocimiento?
Para mí, el uso común de estas palabras de manera inapropiada es lo que está más allá del reconocimiento.