• Nenhum resultado encontrado

Inicialize Variáveis ao Defini-las

Você deve sempre inicializar uma variável ao mesmo tempo que você a define. Vamos ver o que acontece se você define uma variável mas a deixa sem inicializar.

Você apenas define int nickels;

Sintaxe 2.2: Definição de Variável

type_name variable_name;

type_name variable_name = initial_value;

Exemplo: double total; int pennies = 8; Finalidade:

Definir uma nova variável de um tipo particular e opcionalmente fornecer um valor inicial.

e uma variável nickelspassa a existir e espaço de memória é reservado para ela. Entretanto, es- te contém alguns valores aleatórios, uma vez que você não inicializou a variável. Se você deseja inicializar uma variável com zero, deve fazer isto explicitamente:

int nickels = 0;

Por que uma variável não inicializada contém um valor aleatório? Poderia parecer menos pro- blemático colocar o valor 0 em uma variável do que deixar um valor aleatório. De qualquer modo, de onde vem este valor aleatório? O computador joga um dado eletrônico?

Quando você define uma variável, espaço suficiente é reservado na memória para conter valo- res do tipo que você especificou. Por exemplo, quando você declara int nickels, um bloco de memória suficientemente grande para armazenar inteiros é reservado. O compilador usa esta me- mória sempre que você solicitar o valor de nickelsou quando você alterá-lo.

nickels =

Quando você inicializa uma variável, int nickels = 0, então um zero é colocado na po- sição de memória recém adquirida.

nickels =

Se você não especifica a inicialização, o espaço de memória é reservado e deixado como está. Já existe algum valor na memória. Afinal, você não consegue transistores frescos – simplesmente uma área de memória que está disponível no momento, e que você devolve novamente quando a maintermina. Seus valores não inicializados são apenas resquícios de computações anteriores. Por- tanto, não requer esforço algum dar a você valores iniciais aleatórios, enquanto que um pouco de esforço é necessário para inicializar uma nova posição de memória com zero ou outro valor.

Se você não especifica uma inicialização, o compilador assume que você ainda não está pron- to para fornecer o valor que você quer armazenar numa variável. Talvez o valor necessite ser cal- culado a partir de outras variáveis, como o total em nosso exemplo, e você ainda não definiu todos os componentes. É bastante razoável não perder tempo inicializando uma variável se o valor inicial nunca é usado e será sobrescrito com o verdadeiro valor pretendido em algum momento.

Entretanto, suponha que você tem a seguinte seqüência de eventos: int nickels; /* Nao vou inicializa-lo no momento */ int dimes = 3;

double total = nickels * 0.05 + dimes * 0.10; /* Erro */ nickels = 2 * dimes;

/* Agora eu lembro – tenho duas vezes mais nickels do que dimes */

Isso é um problema. O valor de nickels foi usado antes de ter sido inicializado. O valor de to- tal é calculado como segue: pegue um número aleatório e o multiplique por 0.05, então adicione o valor dos dimes. Obviamente, o que você obtém é um valor imprevisível, que não pode ser usado.

Existe um perigo adicional aqui. Visto que o valor de nickelsé aleatório, ele pode ser dife- rente cada vez que você executa o programa.Naturalmente, você pode ter uma pista disso ao exe- cutar duas vezes o programa e conseguir duas respostas diferentes. Entretanto, suponha que você execute dez vezes o programa em casa ou no laboratório, e ele sempre resulta em um valor que pa- rece razoável. Então você leva seu programa para a avaliação e ele dá uma resposta diferente e não razoável quando o avaliador o executa. Como isso pode acontecer? Programas de computadores não são supostamente previsíveis e determinísticos? Eles são – desde que você inicialize todas as sua variáveis. No computador do avaliador, o valor não inicializado de nickels pode ter sido 15,054, enquanto que em sua máquina naquele dia particular, aconteceu de o valor ter sido 6.

Qual é o remédio? Reorganize as definições de modo que todas as variáveis sejam inicializa- das. Isto é bastante simples de fazer:

int dimes = 3;

int nickels = 2 * dimes;

/* Eu tenho duas vezes mais nickels do que dimes */ double total = nickels * 0.05 + dimes * 0.10; /* OK */

Dica de Qualidade

2.2

Use Nomes Descritivos para suas Variáveis

Poderíamos ter economizado bastante digitação se usássemos nomes mais curtos como em int main() { int p = 8; int d = 4; int q = 3; double t = p * 0.01 + d * 0.10 + q * 0.25; /* valor total das moedas */

cout << "Valor total= " << t << "\n";

return 0; }

Entretanto, compare esse programa com o anterior. Qual deles é mais fácil de ler? Não existe termo de comparação. Simplesmente ler pennies é bem menos problemático do que ler p e en- tão imaginar que isto deve significar “pennies”.

Em programação prática, isto é particularmente importante quando programas são escritos por mais de uma pessoa. Pode parecer óbvio para você, que pdeve ser associadoa pennies e não a per- centagem (ou talvez pressão), mas não é óbvio para a pessoa que precisa alterar o seu código anos depois, muito tempo após você ter sido promovido (ou demitido?). Ainda sobre esse assunto, você mesmo irá se lembrar do que psignifica quando olhar esse código daqui a seis meses?

Naturalmente, você pode usar comentários: int main() { int p = 8; /* pennies */ int d = 4; /* dimes */ int q = 3; /* quarters */ double t = p + d * 0.10 + q * 0.25; /* valor total das moedas */

cout << "Valor total= " << t << "\n";

return 0; }

Isso torna as definições muito claras, mas a computação p + d * 0.10 + q * 0.25

continua críptica.

Se você pode escolher entre comentários e código autocomentado, escolha este último. É me- lhor ter código claro sem comentários do que código críptico com comentários. Existe uma boa ra- zão para isso. Na prática, código não é escrito uma vez e submetido ao avaliador, para ser após es- quecido. Programas são modificados e melhorados todo o tempo. Se o código é auto explicativo, você tem apenas que atualizá-lo para o novo código que também seja auto explicativo. Se o códi- go requer explicação, você atualiza o código e a explicação. Se você esquecer de atualizar a expli- cação, ficará com um comentário pior do que um inútil, por que não reflete mais o que está acon- tecendo. A próxima pessoa que ler este código deve desperdiçar tempo tentando entender se o có- digo ou o comentário está errado.