Capítulo 4 — Programação I
Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX010.
flowchart TD
N0["4.1 Lendo arquivos de dados"]
N1["4.2 Validação no código"]
N2["4.4 Código legível"]
N0 --> N1 --> N2
N2 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX010"]
Desenho lógico
flowchart LR
N0["4.1 Lendo arquivos de dados"]
N1["4.2 Validação no código"]
N2["4.4 Código legível"]
N0 --> N1 --> N2 --> Q["EX010"]
[4.1 Lendo arquivos de dados]
|
v
[4.2 Validação no código]
|
v
[4.4 Código legível]
|
v
[Exemplo resolvido] --> [Exercício EX010]
Objetivos de aprendizagem
Você vai (1) escrever scripts que leem e validam arquivos de dados; (2) tratar erros de forma explícita; (3) manter o código legível para revisores.
4.1 Lendo arquivos de dados
Kofi escreve seus primeiros scripts em Python usando o módulo csv da biblioteca padrão para ler leituras sintéticas de medidores. Cada linha tem um identificador de medidor, um carimbo de data e hora, uma leitura e uma unidade. Ele aprende a ler os arquivos linha a linha, converter textos em números com cuidado e guardar os valores originais para fins de rastreabilidade. A Profa. Varga exige dados sintéticos em todos os exercícios, porque scripts de estudantes costumam imprimir dados durante a depuração e nunca devem expor informações reais de clientes. Cada script também imprime, ao final, quantas linhas foram lidas, aceitas e rejeitadas.
4.2 Validação no código
Kofi acrescenta verificações: o identificador do medidor precisa seguir um padrão, o carimbo de data e hora precisa ser interpretável, a leitura precisa ser um número não negativo e a unidade precisa ser metros cúbicos. As linhas que falham vão para um arquivo de rejeitos, com o motivo, e não são descartadas em silêncio. Ele explica que o descarte silencioso esconde problemas de qualidade dos donos dos dados, enquanto um arquivo de rejeitos lhes dá evidências para corrigir a origem. Contar os rejeitos por motivo também mostra quais problemas são mais comuns. O motivo mais frequente na primeira execução é a falta de unidade.
4.3 Tratando erros
Quando falta uma coluna em um arquivo, o script de Kofi para com uma mensagem clara, em vez de adivinhar. Quando uma única linha está malformada, ele registra o problema e continua. Ele distingue os erros que tornam todo o resultado não confiável dos erros que afetam apenas um registro. A Profa. Varga chama isso de falhar alto na estrutura e falhar baixo no conteúdo, e observa que a governança depende de scripts que tornam os problemas visíveis, em vez de produzir resultados confiantes a partir de entradas quebradas. Os dois comportamentos são testados com arquivos propositalmente defeituosos.
4.4 Código legível
Kofi dá nomes claros às variáveis, escreve uma docstring explicando o que cada script lê e produz e mantém as funções curtas. Um colega revisa o código e encontra um erro de deslocamento de uma unidade (off-by-one) no tratamento dos carimbos de data e hora, que Kofi corrige e cobre com um teste. Ele aprende que a revisão de código é um controle de qualidade do próprio código que impõe a qualidade dos dados, e que código legível é mais fácil de revisar, manter e confiar quando outras pessoas dependem do resultado. O teste agora roda automaticamente sempre que alguém altera a função de carimbo de data e hora.
Exemplo resolvido
Kofi lê arquivos de medidores com csv, valida quatro campos, grava rejeitos com motivos, interrompe a execução em erros estruturais e corrige, com um teste, um defeito de carimbo de data e hora encontrado na revisão.
Caso sintético. Os arquivos são sintéticos.
Erros e limites
As regras de validação no código se afastam das regras escritas; revise as duas juntas.
Exercícios
- EX010 — Arquivo de rejeitos. Por que gravar um arquivo de rejeitos em vez de descartar linhas? Rubrica: 3 = dá aos donos evidências para corrigir a origem;; 2 = menciona evidências;; 1 = vago;; 0 = nenhuma.
- EX011 — Política de erros. O que significa falhar alto na estrutura e baixo no conteúdo? Rubrica: 3 = parar quando falta coluna, registrar linhas ruins e continuar;; 2 = ambos;; 1 = um;; 0 = nenhuma.
- EX012 — Achado da revisão. O que a revisão de código encontrou? Rubrica: 3 = um erro off-by-one nos carimbos de data e hora;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
Continue estudando — aula 04 (capítulo 04 de 50)
← Capítulo 03 · Índice das aulas · Capítulo 05 →
Continue para a próxima aula já escrita.