Existe um termo já cunhado, e é "Magical Number", que designa um caso específico do termo que acabo de cunhar, "Magical Values" – Valores Mágicos – que é uma daquelas coisas que seu professor fala pra não fazer, e no fim das contas você acaba fazendo do mesmo jeito.
E que raios é isso, Toupeira?
O valor mágico é aquele valor literal – ou seja, constante – que aparece no meio do código por motivos arbitrários e sem muita explicação. Pode ser número, string, expressão, não importa: constante arbitrária, é mágica! Normalmente quando alguém pergunta "Que raio de 6,75 é esse?!" o programador funciona "Bicho, não sei mais não, mas funciona!". Isso está no topo da lista negra dos professores de Programação de Computadores, junto com usar "v1, v2, vn" para nomes de variáveis e ignorar a identação.
Ah, mas vocês, programadores, também...
Não me olha com essa cara, não fomos nós que começamos! Juro! Duvida? Então vamos voltar pra sétima série...
Equação de segundo grau, AKA a famosa "ax2 + bx + c = 0". Como se resolve? Fácil: Bhaskara! E como é a fórmula de Bhaskara?
b2 - 4ac
A-hãm... E o que raios esse "expoente 2", ou o "4ac", significam? Viu, Bhaskara foi o primeiro matemático a usar "valores mágicos". E nem vou falar do Pitágoras... :/
Okay, e o que isso tem a ver?
Tem que é um mau hábito de programação que não é sério para seus trabalhos práticos, mas é seríssimo na vida real. Veja bem: projetos grandes são, por via de regra, trabalhados por várias pessoas. Normalmente, um bocado. Quando você insere um "7" e não explica o que raios esse 7 é, pode até ser que o negócio funcione, mas vai que o cara novo resolve otimizar a função que mostra as tabelas e, graças ao seu 7 no meio do código que captura os dados, o negócio todo vai pro brejo. E aí resolver é um problema...
O mesmo vale pra projetos em código aberto. Esse mau hábito acaba dificultando a modificação e consequente aprimoramento do seu programa por terceiros. E isso é chato e, no final das contas, vai contra o princípio de ter um código aberto pra começar.
E não só números, uma operação – Bhaskara, alguém? –, uma expressão regular – meu parser funciona com uma expressão que não sei se vai continuar pra sempre assim... –, tudo pode ser um problema se não estiver determinado a priori em algum local próprio do código. Principalmente se é um valor constantemente utilizado. Ter que substituir todos os 41 por 43 num código dividido em 14 módulos não é moleza...
A solução: use constantes. Toda linguagem de programação que se preze disponibiliza alguma forma de declarar constantes que valem para o resto do programa. Constantes são mais fáceis de entender que valores numéricos – "RESPOSTA" é bem mais inteligível que "42" –, e todo mundo fica feliz se o valor inicial dos vetores for de 1 para 0. Então, não subestime as constantes: elas estão aí pra ajudar...

Isaias Malta
03/06/2008 15:57
Aproveitando a sua viagem algorítmica e matemática, fale-me urgentemente sobre a máquina de Alan Turing. Como você a compreende? Estou a ponto de escrever um texto sobre isto e quando vi o artigo sobre as constantes, pinba! Pensei, taí o meu interlocutor perfeito. A propósito, sabes qual é a constante do universo?
Link para este comentário | Responder"Toupeira Profissional"
03/06/2008 19:16
Putz, assim de repente e com tanta responsabilidade? Pegou pesado... =#
Link para este comentário | ResponderBom, lá vai. A Máquina de Turing é puramente uma abstração algorítmica. O que Turing realmente fez com a máquina foi dispor de uma maneira de realizar computação por meio de símbolos e instruções simples(no caso, escrever, ler, mudar de posição...), e um mecanismo que, teoricamente, é capaz de resolver qualquer problema, desde que haja um algoritmo que o resolva.
Por si só, a Máquina de Turing nada mais é que um arcabouço teórico. A Máquina de Von Neumann – também conhecida como "computador" =P – é bem mais prática e usável na maioria dos casos.
A constante do Universo? Se não for phi(1.6180339887), a constante de Avogadro(6.02E-26) ou 42, não faço idéia.
Bruno Pedrassani
03/06/2008 16:00
Gostei mesmo do texto.
Link para este comentário | ResponderSe utilizar de constantes é algo que meus professores passaram no primeiro semestre da faculdade, não só por números e valores mágicos, mas também pra evitar que se você mude o valor dessa constante, não tenha que ir manualmente em todo o código mudar "na mão". Muito bom mesmo.
'Toupeira Profissional'
03/06/2008 19:17
Muito bom, resumiu meu texto em 3 linhas. :D
Link para este comentário | ResponderMoura
03/06/2008 19:42
Meu caro, "Toupeira Profissional", você está se profissionalizando nisto.
Link para este comentário | ResponderBem, acredito que o problema não esteja nas constantes e sim nas inconstantes formas de escrevê-las no código, veja o que ocorreu quando um amigo foi ao Baneb, isto mesmo no Banco do Estado da Bahia, escrevendo um código em Borland Delphi, a figura encontrou constantes, digo "inconstantes" com nomes tipo, assim, abacaxi, é verdade, e não era variável, ou invariável? também com este nome "abacaxi", já nem sei mais.
Parabéns! pelo post.
"Toupeira Profissional"
03/06/2008 21:55
Ora, pois sim, o problema é justamente a falta de padronização. Isto tudo exige prática, e até lá, são muitos "abacaxis"... =P
Link para este comentário | ResponderThiago-Nacio
05/06/2008 14:58
Mas sem os numeros mágicos como vou canalizar a energia do meu código?
Link para este comentário | Respondere quem dera o problema dos codigos open-source fosse somente esse... o meu predileto são os FIX-ME preciso, conciso e diz tudo...
Bruno Guedes (Toupeira Profissional)
05/06/2008 20:42
O problema não são os números em si, é ter os números soltos no meio do código. Isso dá problema de vez em quando. E não são só números, esses dias mesmo tivemos problemas porque eu defini um endereço de email(um "noreply") para o sistema e o servidor foi bloqueado por spam...
Link para este comentário | ResponderEsse tipo de problema não é só de opensource, é também de código fechado. Qualquer coisa onde mais de uma pessoa bote a mão dá problema por causa dessas coisas.
Lomyne
05/06/2008 18:02
Pequena nota mental: foi por não entender essas lógicas que larguei um segundo grau técnico... O mais perto que cheguei de programação foi quando trabalhava como webdesigner e os programadores ficavam a uns 4 metros...
Link para este comentário | Responder"Toupeira Profissional"
05/06/2008 20:43
Não se pode agradar a todos, correto? ;)
Link para este comentário | Responder