Por que muitos exemplos de código, especialmente os tutoriais, usam os nomes "Foo" e "Bar" com tanta frequência? É quase um padrão.
Por exemplo:
void foo(char* bar) {
printf("%s", bar);
}
terminology
history
variables
user15453
fonte
fonte
Respostas:
Foo e bar vêm do acrônimo FUBAR da Segunda Guerra Mundial do Exército dos EUA, "F-ed Up Beyond All Recognition". Uma família inteira desses termos foi amplamente difundida durante as campanhas do norte da África e da Sicília (1942-43). O excelente Dia da Batalha de Rick Atkinson : A Guerra na Sicília e na Itália, 1943-1944 fornece uma lista desses. Por exemplo, um JANFU é uma "Marinha do Exército Conjunta F Up", como o incidente de 11 de julho de 1943, quando a frota de invasão da Operação Husky derrubou 23 transportes da Força Aérea C-47 do Exército, transportando pára-quedistas para reforçar a cabeça da praia.
Atualização: a Wikipedia possui uma lista de acrônimos relacionados que incluem alguns dos originais da Segunda Guerra Mundial listados por Atkinson.
Qualquer programador entenderá a motivação para usar foo e bar para nomear variáveis. Eles certamente fizeram parte da cultura C / UNIX desde o início e, como aponta o @Walter Mitty, a antecederam.
Atualização (05/10/2009): Aqui está a descrição de Atkinson:
Atualização (23/11/2011): @Hugo tem uma lista fantástica dos antecedentes não militares.
fonte
Eu acho que é a pronunciação fonética de fubar.
O que significa:
fonte
O New Hacker's Dictionary tem uma entrada muito boa sobre isso - e considero que é um recurso melhor para esse tipo de coisa do que a Wikipedia:
fonte
A Wikipedia fornece esta definição de Variável metassintática :
O artigo também fornece exemplos comuns de tais variáveis em diferentes linguagens de programação:
fonte
Aqui está a resposta da wikipedia:
http://en.wikipedia.org/wiki/Foo
E da RFC 3092:
http://www.faqs.org/rfcs/rfc3092.html
fonte
tl; dr
"Foo" e "bar" como variáveis metassintáticas foram popularizadas pelo MIT e DEC, as primeiras referências estão sendo trabalhadas no LISP e PDP-1 e no Projeto MAC a partir de 1964.
Muitas dessas pessoas estavam no Tech Model Railroad Club do MIT, onde encontramos o primeiro uso documentado de "foo" nos círculos de tecnologia em 1959 (e uma variante em 1958).
"Foo" e "bar" (e até "baz") eram bem conhecidos na cultura popular, especialmente nos quadrinhos Smokey Stover e Pogo, que foram lidos por muitos membros do TMRC.
Além disso, parece provável que os FUBAR militares tenham contribuído para sua popularidade.
O uso de "foo" solitário como uma palavra sem sentido está muito bem documentado na cultura popular no início do século XX, assim como o FUBAR militar. (Alguma leitura de segundo plano: FOLDOC FOLDOC Jargon File Jargon File Wikipedia RFC3092 )
OK, então vamos encontrar algumas referências.
PARE DE IMPRENSA! Depois de postar esta resposta, descobri este artigo perfeito sobre "foo" na edição de sexta-feira, 14 de janeiro de 1938 , do The Tech ("o maior e mais antigo jornal do MIT e o primeiro jornal publicado na web"), Volume LVII. 57, preço três centavos:
O jornal Tech , um ano antes, a Carta ao Editor, setembro de 1937 :
E The Tech em dezembro de 1938 :
O "foo" documentada pela primeira vez em círculos tecnologia é provavelmente 1959 's Dictionary of the TMRC Idioma :
Estes são explicados no FOLDOC . O compilador do dicionário Pete Samson disse em 2005:
E a partir do arquivo Jargon File 4.0.0 de 1996 :
Um ano antes do dicionário do TMRC, o MIT Voo Doo Gazette de 1958 ("Suplemento de humor do escritório do Reitor do MIT") (PDF) menciona Foocom, em "As leis de Murphy e Finagle", de John Banzhaf (um estudante de engenharia elétrica) :
O MIT Voo Doo (PDF) de 1964 também faz referência ao uso do TMRC:
Mas lembre-se de que esta pergunta é sobre exemplos de código, então vamos encontrar "foo", "bar" e "foobar" publicados no código.
Então, o Jargon File 4.4.7 diz sobre "foobar":
A primeira referência publicada que posso encontrar é de fevereiro de 1964 , mas escrita em junho de 1963, The Linguagem de Programação LISP: sua Operação e Aplicações pela Information International, Inc., com muitos autores, mas incluindo Timothy P. Hart e Michael Levin:
Também inclui outras variáveis metassintáticas, como: FOO CROCK GLITCH / POOT TOOR / ON YOU / SNAP CRACKLE POP / XYZ
Eu espero que isso seja o mesmo que esta próxima referência de "foo" do Projeto MAC do MIT no AIM-064 de janeiro de 1964 , ou Exercícios LISP de Timothy P. Hart e Michael Levin:
Ele compartilha muitas outras variáveis metassintáticas, como: CHI / BOSTON NEW YORK / MANTEIGA DE ESPINAFRA / GLITCH FOO CROCK / POOT TOOP / TOOT TOOT / ISTHISATRIVIALEXCERCISE / PLOOP FLOT TOP / SNAP CRACKLE POP / ONE DOIS TRÊS / SUB THRESHER DO PLANO
Para "foo" e "bar" juntos, a referência mais antiga que pude encontrar é do Projeto MAC do MIT em AIM-098 de junho de 1966 , ou PDP-6 LISP de ninguém menos que Peter Samson:
Mais algumas recordações.
@Walter Mitty lembrou neste site em 2008:
John V. Everett lembra em 1996:
Daniel PB Smith em 1998:
Robert Schuldenfrei em 1996:
Paul M. Wexelblat em 1992:
Bruce B. Reynolds em 1996:
Aqui está um IBM "BAR" direto de 1955.
Outras referências iniciais:
1967 foo bar MIT AIM-127
1967 foo bar MIT AIM-127a
1965 foo MIT Tech Notícias sobre engenharia
1968 foo baz DEC
1971 FOO BAR UCLA-NMC RFC269
1972 FOO MIT AI
1972 FOO MIT AI HAKMEM ( digitalização em PDF )
1972 FOO DEC
1973 FOO DEC
1973 foo bar Conselho Conjunto Internacional de Inteligência Artificial
1975 foo bar Conselho Conjunto Internacional de Inteligência Artificial
1977 Foobar
1978 Foobar
1978 Moby Foobar em guerras de software
Não consegui encontrar nenhuma referência à barra foo como "sinal foo invertido", como sugerido na RFC3092 e em outros lugares.
Aqui estão alguns dos F00s anteriores, mas acho que são coincidências / falsos positivos:
1959 "FOO 31 IBM-704 Bettis Plant Usa uma técnica de mínimos quadrados" US Atomic Energy Commission
1960 FOO (FO Out, F1, F2, FOO, FOI) "Computador digital e engenharia de controle"
FOO de 1967?
fonte
usar palavras como "foo" e "bar" faz com que você se concentre no conceito e não no que você pode entender com base nos termos que você conhece. Por exemplo:
O código acima permite que você volte ao seu conhecimento das coisas do mundo real.
Se você está tentando explicar um conceito em que a parte importante não é o que está sendo feito (imprimir miado ou latido, por exemplo), mas como está sendo feita, remova as peças que você conhece:
Agora você precisa se concentrar no que realmente está acontecendo; não é mais capaz de adivinhar o que vai acontecer.
Portanto, a versão curta é que foo, bar e similares são usados para enfatizar conceitos em que o conteúdo realmente não importa, mas a idéia sim.
fonte
De http://en.wikipedia.org/wiki/Foobar
Em tecnologia, a palavra provavelmente foi propagada originalmente por manuais de sistema da Digital Equipment Corporation nos anos 1960 e início dos anos 1970. Outra possibilidade é que o foobar tenha evoluído da eletrônica, como um sinal de foo invertido. Isso ocorre porque se um sinal digital estiver ativo baixo (portanto, uma condição de tensão negativa ou zero representa um "1"), uma barra horizontal é normalmente colocada sobre a etiqueta do sinal. O Jargon File faz um caso que foo possivelmente antecede o FUBAR
fonte
Nos arquivos do jargão http://www.catb.org/jargon/html/F/foo.html
foo: / foo /
bar: / bar /, n.
fonte
De acordo com http://en.wikipedia.org/wiki/Foo :
fonte
Eu apóio o arquivo do jargão sobre Foo Bar.
Posso rastreá-lo pelo menos até 1963, e o número de série 2 do PDP-1, que ficava no segundo andar do prédio 26 do MIT. O Foo e o Foo Bar foram usados lá e, depois de 1964, na sala PDP-6 do projeto MAC.
fonte
Tanto quanto eu sei, foo vem de foobar que é uma alteração de "fubar", um phraase captura militar que significa " F *** ed u p b eyond um ll r eCognition."
Então, novamente, pode haver outras fontes.
http://en.wikipedia.org/wiki/Foo
fonte
Foo e Bar (também conhecido como FUBAR ... F *** ed além de todo reconhecimento) acaba de ser usado como nomes genéricos padrão para coisas como classes, propriedades, nomes de métodos, etc.
Basicamente, a idéia é transmitir seu código sem o máximo de informações estranhas que possam se afastar de como o código funciona (ou seja, não precisamos saber que sua função se chama AddUser para ver o código e entender o que ele faz se o renomearmos) para Foo ()).
fonte
Essas são palavras sem sentido que na maioria dos casos podem ser substituídas por palavras de exemplo mais relevantes. As palavras "foo" e "bar" são frequentemente usadas na programação quando alguém não consegue pensar em um bom exemplo.
Se "foo" e "bar" são derivados do FUBAR, por que eles são usados por tantos profissionais em exemplos de instruções quando os exemplos se assemelham a nada que está sendo buscado além do reconhecimento?
Para mim, o uso comum dessas palavras de maneira inadequada é o que há de tão irreconhecível.
fonte