Práticas de programação

From Applied Science
Revision as of 03:00, 23 January 2025 by Wikiadmin (talk | contribs) (Created page with "Algumas recomendações e pequenas técnicas de programação são empregadas na introdução. São detalhes pequenos e que não determinam uma reprovação ou aprovação, mas são importantes para o aprendizado. <Center>'''Comentários'''</center> * Todos os professores recomendam o uso de comentários, tanto porque isso conta na avaliação dos exercícios programa, quanto porque isso torna o código fonte acessível para outras pessoas ou mesmo você mesmo depois d...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Algumas recomendações e pequenas técnicas de programação são empregadas na introdução. São detalhes pequenos e que não determinam uma reprovação ou aprovação, mas são importantes para o aprendizado.


Comentários
  • Todos os professores recomendam o uso de comentários, tanto porque isso conta na avaliação dos exercícios programa, quanto porque isso torna o código fonte acessível para outras pessoas ou mesmo você mesmo depois de muito tempo sem ler o seu próprio código. A colocação dos comentários antes, após, ou ao lado, de um determinado bloco ou comando fica a seu critério. O formato padrão dos comentários é /* ...... */ (barra seguida por asterisco). Se você quiser pode usar o formato // (barra dupla). Por determinação de um ou outro professor, o formato /* ... */ é obrigatório. A diferença entre um e outro tem a ver com as sucessivas revisões da especificação da linguagem C.
/* Recebe um inteiro n e imprime todos os divisores de n possíveis entre 1 e 10 */
void divisor (int n) {

     for (i = 1; i <= 10; i++)
         if (n % i == 0) printf("%d eh divisivel por %d", n, i);

}

Não precisa explicar o laço for, dizer que o contador começa com 1, explicar a condicional, a contagem e a operação do resto da divisão. Simplesmente escreva nos comentários o que entra e o que sai da função, o que ela faz. Pior ainda é explicar o que a função não faz ou deixa de fazer dependendo da situação. Os algoritmos estudados numa introdução são determinísticos, ou faz ou não alguma coisa. O computador não hesita, não pondera, não questiona. Escrever "imprimirá" ou "deverá imprimir" não faz sentido para um algoritmo que ou imprimi ou não.

PS: isso é válido para programação imperativa, mas o conceito de paradigma de programação não é estudado na introdução. No máximo o professor pode dizer o que é e mostrar algum exemplo de como as coisas são em outros paradigmas.


Indentação
  • Indentação nada mais é do que colocar espaços em branco no seu código fonte. Na prática indentar é o mesmo que separar um texto em parágrafos. Há diferentes estilos de indentação e a menos que o professor seja extremamente rígido não há uma regra geral para usar um ou outro modo. Com ou sem indentação o programa executa da mesma forma. Isso não altera em nada o código fonte.
int a = 2; int b = 3; int c; c = a + b;

Não é recomendável colocar vários comandos numa linha só, porque fica mais difícil de ler.

if (variavel == 10) {
   /* faça alguma coisa */
   if (numero != 0)
       printf("etc");
  
   else 
       printf("...");
}

A colocação das chaves pode ser como você desejar, se quiser ponha a abertura na linha de baixo da expressão entre parênteses. O espaço em branco à esquerda pode ser um TAB ou espaços em branco simples, serve para indicar que aquele comando esta dentro de um bloco.

/* esta função faz alguma coisa */
int func (int var, float var, ...) {
    int  local, local2, local3,
         local4, local5, local6;
 
    for (c = 0; c < x; c++) {
         if (d == var)
             var2++;

         else if (b == var2) 
             break;

         else {
             counter--;
             a = 0;
         }
    }
}
  • Comentários escritos acima da função são mais fáceis de ler do que comentários no meio da função poluindo o código. A declaração de muitas variáveis de um tipo só fica melhor se quebrada em linhas mais curtas. Pular linhas entre um if e um else também facilita a leitura. Obedecer a um alinhamento vertical também é bom.
if      (d == var)  var2++;
else if (b == var2) break;
else                counter--;

Assim é outra opção, desde que o mesmo padrão seja utilizado sempre, sem misturar com outros padrões como colocar o comando abaixo de uma condicional e no outro à direita. Procure manter as expressões de comparação sempre seguindo a convenção de precedência dos operadores, para evitar qualquer confusão.


Nomes das variáveis
  • Use nomes mnemônicos. Isto é, que façam sentido e sejam fáceis de memorizar. Evite siglas e códigos como "XYZ123" ou "VI" (Variável Inteira). Prefira substantivos simples, verbos, adjetivos, etc. Se for o caso, utilize prefixação ou sufixação. Omita preposições. Por exemplo: codigo_entrada, ponto_maximo, etc. Por questões de acessibilidade e simplificação você pode preferir "cod_uni" no lugar de "cod_universidade", ou ainda "c_uni". Outra ideia é utilizar siglas, mas colocar uma lista de todos os nomes por extenso no início do programa para evitar confusões.


Clareza
  • Faça o programa ser legível. Seja com uso de comentários adequados. Seja com indentação. Como regra geral, evite operações excessivamente complicadas. Muitas vezes a solução não precisa ser complicada e nem deve, pois o desempenho é pior. Operações excessivamente complicadas são um bom indício de que o programa tem algum erro e que você não está conseguindo identificá-lo. Ou ainda, algum comando ou conceito não foi bem entendido e você está utilizando algum método incorreto na resolução do problema.


Consistência dos dados

Restrinja a entrada dos dados. Para evitar que o usuário, intencionalmente ou não, digite entradas inválidas, coloque alguns comandos a mais, como blocos if ou laços de repetição. O usuário entra com um valor. Se um teste acusar que o valor é inválido, avise o usuário ou simplesmente termine o programa. Isso serve para evitar que cálculos sejam feitos com valores errados ou com valores inválidos como letras no lugar de números. É uma técnica de programação, faz mais sentido evitar que uma entrada errada seja feita do que colocar a detecção da entrada errada no meio de uma operação.