Operações aritméticas

Espaçamento

Se houver espaço, sempre deixe espaços para destacar as operações aritméticas sendo realizadas, quanto mais externa for a operação, mais destaque ela deve ter.

Ruim (difícil identificar as partes):

altura=mi*1000+ci*10;

Bom:

altura = mi*1000 + ci*10;

Parênteses

Não abuse dos parênteses, um código parecendo um cipozal atrapalha a leitura. Não queremos dizer que não pode haver parênteses desnecessários, afinal ninguém quer decorar todas as regras de precedência da linguagem, porém alguns casos são elementares (como saber que a multiplicação é feita antes da adição) e devem ser evitados.

Ruim (cipozal):

altura = ((mi*(1000)) + (ci*(10)));

Bom:

altura = mi*1000 + ci*10;

Não mande o computador fazer operações aritméticas identidade como por exemplo multiplicar por 1 ou somar zero. Evite mandar o computador calcular algo cujo resultado você já conhece (como multiplicar uma variável por zero).

Simplicidade

Não mande o computador fazer a mesma conta mais de uma vez. Guarde o valor numa variável para usar de novo.

Gaste um pouco de tempo tentando simplificar as operações aritméticas, pois com o tempo elas ficarão grandes. Se você não se acostumar que é preciso algum tempo para planejar isso, não vai conseguir fazer programas mais complicados no futuro. É fácil saber que um código pode ser simplificado quando a mesma coisa aparece escrita várias vezes.

Ruim (simplificação evidente):

v = ((mi*1000)+(ci*10)+mmi)+((((mi*1000)+(ci*10)+mmi)/100)*1);

Bom:

v = (mi*1000 + ci*10 + mmi) * 1.01f;

Observe no exemplo acima vários elementos que precisam ser melhorados: trechos repetidos indicando simplificação fácil, espaçamento ruim, parênteses excessivos, cálculo cujo resultado é previamente conhecido e divisão sem cuidado com os tipos.

Atenção à divisão

Os computadores possuem dois tipos de divisão:

Na linguagem C++ essas duas divisões têm o mesmo nome: /. A divisão inteira é usada se o numerador e o denominador são do tipo inteiro; o resultado é o quociente (para calcular o resto é preciso uma operação separada). Em caso contrário, a divisão real é usada. É um erro comum usar constantes inteiras numa divisão real, fazendo com a operação realizada seja a divisão inteira.

Ruim (divisão perigosa):

float a = ...; float b = a*101/100;

Bom:

float a = ...; float b = a * 1.01f;

No exemplo acima, o processamento funciona porque a é do tipo float e a multiplicação vai ser feita antes da divisão. Porém é fácil colocar um parênteses na divisão (aparentemente inócuo) ou mudar o tipo de a no futuro, tornando o cálculo errado. Mesmo funcionando, o código também mostra um exemplo de simplificação evidente: já sei quanto é 101/100 e portanto não preciso mandar o computador calcular esse valor. A versão melhorada do código não tem esses problemas.

Esta página é mantida por Bruno Schneider para a disciplina de IAlg