Por que “foo” e “bar”?

por Fabio A. Mazzarino

Dificilmente alguém que estuda programação vai deixar de ver em algum momento, em alguma documentação, livro, ou exemplo essas variáveis: foo e bar. Mas por que essas variáveis são encontradas em tantos lugares? Por que são utilizadas em exemplos? E principalmente, posso utilizar essas variáveis no meu código?

Origem

A origem exata destas variáveis é de certa forma controversa. Por serem termos informais não há muita documentação sobre quando exatamente começou a ser utilizada. Possivelmente é uma variação do termo militar norte-americano FUBAR (Fucked Up Beyond All Repair – Ferrado Além do Reparável).

A primeira utilização documentada do termo foo foi em 1965 pela publicação estudantil do MIT Tech Engineering News. A primeira utilização documentada do termo foo em programação foi feita pelo Clube Técnico de Ferromodelismo, em 1960, aonde em caso de uma ação perigosa o relógio da estação exibia a mensagem FOO, uma tradução errada da primeira palavra de um mantra.

Utilização

O uso apropriado das variáveis foo e bar é estritamente para exemplos, pois salvo exceções não há como justificar tal nomenclatura dentro de algum contexto, afinal, são palavras que na maioria das línguas não tem sentido algum. E exatamente por isso devem ser evitadas em programação.

Profissionalmente

Profissionalmente é muito pouco recomendado a utilização destas variáveis, nomes de função, etc. Elas não tem sentido dentro de um contexto de desenvolvimento de software profissional, e por isso mesmo devem ser evitadas.

Por outro lado ao construir exemplos, seja na documentação de uso de uma biblioteca/framework, ou ao ministrar um curso, sua utilização é muito bem vinda, e para os que sabem o que significam aumentam a credibilidade do autor do exemplo.

FUBAR

Por outro lado o termo militar FUBAR pode ser utilizado, desde que devidamente documentado, para indicar uma situação de erro irrecuperável, ou irreparável. Ainda assim é uma referência a uma cultura que nem todos têm e que pode sofrer críticas durante um code review.