O que são números Hard-Coded?

Um exercício da FJ-11 diz para evitar números hard-coded. Mas o que são?

Desculpe, mas não entendi.

Basicamente, variáveis hard coded são aquelas cujos valores estão no código-fonte, mas que deveriam vir de fontes externas (um arquivo de configuração, por exemplo).

Exemplo de variável hard coded:

int tempoDeEspera = 100;

O tempo de espera poderia ser flexível, ou seja, passível de configuração. Algo mais interessante poderia ser:

int tempoDeEspera = Integer.parseInt(properties.getString("tempoDeEspera", "100"));

Ignorando o fato do código estar feio, ele permite que seja configurado um tempo de espera em vez de deixar fixo no código (o “100” depois indicaria que o valor padrão é 100). Isso vale para qualquer tipo de variável:

String diretorioTemporario = "/tmp"; //ouch! não faça isso

String diretorioTemporario = System.getProperty("java.io.tmpdir"); //bem melhor assim

No caso acima, além de não permitir modificar o local do diretório temporário, ainda perde-se a portabilidade (o caminho não seria válido no Windows, por exemplo). As strings hard coded geralmente são usadas para caminhos de arquivos e diretórios, fuja disso como se foge de mulher com pomo-de-adão.

Hard-code, é termo utilizada para representar técnicas de má prática de desenvolvimento de software, que consiste essencialmente em criar variáveis com dados chumbados no código fonte.[/quote]

Você esqueceu de copiar o resto da frase da wikipedia:

Podemos, sim, ter uma variável de valor fixo sem que seja considerado hard coded.

Como exemplo temos Math.PI.

Se você for olhar a definição dela, vai ver o seguinte:public static final double PI = 3.14159265358979323846;Mas acho que ninguém vai discordar de que não tem problema nenhum em colocar um valor fixo pra pi :slight_smile:

Acho que entendi. Hard-coded é sinônimo de “números mágicos”.

Prefiro carregar o PI de um banco de dados, assim o dia que alguém mudar seu valor meu sistema estará preparado
:smiley:

Hahahaha, essa foi boa :slight_smile: Melhor deixar na nuvem pra disponibilizar pra todos seus sistemas, né? :stuck_out_tongue:

Bom, parece que o autor entendeu o que é Hard-Coded hehehe

Acho que o autor do topico nao entendeu ainda nao…

Hard-coded, (pode ser tanto numero, como String ou qualquer valor, isso nao importa…) quer dizer que o valor está fixo dentro do codigo. Se algum dia alguem precisar alterar esse valor, vai ter que gerar uma outra versao do sistema por causa disso, ou seja, ele nao está parametrizado em um arquivo externo, ou em alguma tabela do banco de dados…

Acho que o autor do topico nao entendeu ainda nao…

Hard-coded, (pode ser tanto numero, como String ou qualquer valor, isso nao importa…) quer dizer que o valor está fixo dentro do codigo. Se algum dia alguem precisar alterar esse valor, vai ter que gerar uma outra versao do sistema por causa disso, ou seja, ele nao está parametrizado em um arquivo externo, ou em alguma tabela do banco de dados…[/quote]

Mais do que isso, é o valor que está fixo, mas não deveria estar. Existem valores que podem ser fixados no código e que não necessitam ser externalizados.