Sobes.tech
Middle

Quais critérios de avaliação do código em estilo procedural podem ser considerados bons e quais maus?

sobes.tech IA

Resposta da IA

Critérios bons:

  • Legibilidade: Quão fácil é entender o que o código faz ao lê-lo de cima para baixo.
  • Clareza de variáveis e funções: Uso de nomes descritivos que refletem seu propósito e lógica.
  • Descomposição: Dividir tarefas complexas em funções menores e gerenciáveis. Cada função deve realizar uma tarefa específica.
  • Ausência de variáveis globais: Minimizar o uso de variáveis globais para reduzir dependências e efeitos colaterais.
  • Tratamento de erros: Tratamento explícito de erros e exceções possíveis.
  • Comentários: Presentes onde o código não é óbvio ou para explicar a lógica.
  • Consistência no estilo: Estilo uniforme de formatação e nomenclatura em todo o projeto.
  • Minimização da duplicação de código: Evitar repetir blocos de código iguais.
# Bom exemplo de decomposição e nomes claros
def calculate_average(numbers):
    """Calcula a média de uma lista de números."""
    if not numbers:
        return 0
    total = sum(numbers)
    return total / len(numbers)

def process_data(data):
    # Supondo que 'data' seja uma lista de listas de números
    averages = []
    for row in data:
        avg = calculate_average(row)
        averages.append(avg)
    return averages

Critérios ruins:

  • Falta de clareza: O código é difícil de entender devido a lógica confusa, nomes pouco descritivos ou falta de estrutura.
  • "Código espaguete": Muitas transições e dependências que tornam difícil seguir a sequência de execução.
  • Código "lazo": Funções longas e monolíticas que realizam muitas tarefas não relacionadas.
  • Uso de "números mágicos": Constantes numéricas sem explicação no código.
  • Falta de tratamento de erros: O programa "quebra" diante de situações imprevistas.
  • Duplicação de código: Blocos iguais ou muito semelhantes repetidos em diferentes lugares.
  • Estilo inconsistente: Diferentes formatos e nomes que dificultam a leitura.
# Exemplo pobre de "lazo" e números mágicos
def process(d):
    t = 0
    for r in d:
        s = 0
        c = 0
        for n in r:
            s += n
            c += 1
        if c > 0:
            t += s / c
    return t / len(d) if len(d) > 0 else 0

Comparação:

Bons critérios Critérios ruins
Legibilidade Falta de clareza ("espaguete", "lazo")
Variáveis e funções compreensíveis Nomes ilegíveis
Descomposição Funções monolíticas
Ausência de variáveis globais Uso excessivo de variáveis globais
Tratamento explícito de erros Falta de tratamento de erros
Comentários onde são necessários Ausência de comentários
Estilo consistente Estilo inconsistente
Minimização da duplicação de código Duplicação de código