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 |