# Número mágico (programação de sistemas)

Número mágico é um termo usado em informática para designar constantes especiais usadas para definir um certo propósito, usualmente escolhidas de forma arbitrária. Eles são chamados de mágicos pois a sua presença é inexplicável sem um conhecimento prévio do seu uso, seja informal com o criador da constante ou formal através de documentação.

## Aplicação em formato de arquivos

Números mágicos são usados em arquivos para que o formato de seu conteúdo possa ser reconhecido independente de formas externas. Cada sistema operacional tenta identificar o tipo dos arquivos de formas diferentes. O Windows utiliza extensões, enquanto os sistemas operacionais Mac OS usam meta-dados, que são gravados de forma independente.
Os sistemas baseados no UNIX, normalmente usam o próprio conteúdo do arquivo para determinar o tipo. Para isso foi convencionado que os dois primeiros bytes dos arquivos devem trazer um número mágico que identifica seu formato. Inicialmente o comando file era usado para determinar o tipo, porém em ambientes gráficos modernos estes números mágicos ainda são usados para determinar os tipos e consequentemente a forma mais adequada de representá-los graficamente.
Mesmo arquivos criados por programas em sistemas operacionais que usam outros métodos para determinar o tipo de arquivo possuem números especiais para que seja possível distinguir-los de outros tipos de arquivo apenas por seu conteúdo. Esses identificadores, apesar de não seguirem a convenção inicial dos sistemas UNIX, também podem ser considerados números mágicos. Alguns exemplos incluem:
* Arquivos de código compilado para bytecode Java tem no início o número 0xCAFEBABE (hexadecimal) nos sistemas do tipo big endian.
* Imagens do tipo GIF tem no seu início a string ASCII GIF89a ou GIF87a.
* Imagens PNG iniciam com uma assinatura de 8 bytes que permite a identificação de alguns problemas comuns de transmissão, como 0x89504e470d0a1a0a (hexadecimal).

## Números mágicos em programação

Em programação o termo número mágico é dado para números que aparecem no código, geralmente sem explicação. São chamados de mágicos por ironia; o seu uso não é considerado uma boa prática de programação.
A maior parte das linguagens de programação permite que criem nomes descritivos para representar estes números. Estes nomes são chamados constantes. Seu uso facilita a leitura e a manutenção do código. O uso de constantes é preferível ao de números mágicos.
Exemplo: Suponha que um programa de cálculo trigonométrico faça uso do número π em diversos lugares. A princípio o programador usou a aproximação 3.14 e a colocou numericamente em todos os lugares que ela era necessária. O número 3.14 a princípio é facilmente reconhecível como π por qualquer pessoa com algum conhecimento de matemática. Porém nos testes o programador descobriu que precisaria de uma aproximação melhor, como 3.1415926. Agora ele tem que procurar todas as ocorrências de 3.14 no programa e substituí-la pela nova aproximação. Este procedimento é trabalhoso e sujeito a erros. Se o programador tivesse usado uma constante com o nome PI, em vez do número mágico 3.14, bastaria mudar a aproximação na definição da constante.