Módulo 15 - Projeto final: o Gerenciador de Tarefas
Buscar, filtrar e concluir com validação
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026
O que você vai aprender
- Marcar uma tarefa como concluída com validação de que ela existe.
- Filtrar as tarefas por estado (mostrar só as pendentes).
- Buscar uma tarefa pela descrição.
- Aplicar cláusulas de guarda para tratar entradas inválidas.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Buscar, filtrar e concluir com validação.
Os objetivos desta aula. Marcar uma tarefa como concluída com validação de que ela existe. Filtrar as tarefas por estado (mostrar só as pendentes). Buscar uma tarefa pela descrição. Aplicar cláusulas de guarda para tratar entradas inválidas.
Veja o essencial, parte por parte.
Concluir uma tarefa com segurança. Concluir uma tarefa é achá-la pelo número e mudar seu estado, validando que ela existe.
Filtrar as pendentes e buscar por descrição. Duas operações que dão inteligência ao gerenciador são filtrar e buscar, e as duas reaproveitam padrões que você domina.
O curso inteiro convergindo numa função. Pare um instante para apreciar o que aconteceu nesta aula.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Concluir uma tarefa com segurança
Marcar uma tarefa como concluída parece trivial, mas é onde a robustez entra em cena. O usuário informa o número da tarefa que quer concluir, e esse número é um dado de fora, então não se confia nele. E se ele digitar um número que não existe na lista, como 9 numa lista de 3 tarefas? E se digitar letras, ou zero, ou um negativo? Sem cuidado, o programa tentaria acessar uma posição inexistente e quebraria, o erro de execução do módulo de robustez. A solução é a cláusula de guarda: antes de mexer na lista, valide o número. Se ele não for um número válido, ou estiver fora da faixa das tarefas, avise o usuário com uma mensagem clara e não faça nada. Só quando o número passa na validação é que você acessa a tarefa na lista e muda seu estado para concluída, com a garantia de que a operação faz sentido.
função concluirTarefa(tarefas, numeroDigitado)
se numeroDigitado não é um número então
escreva("Informe o número da tarefa")
retorne
fim
indice <- numeroDigitado - 1 // usuário vê 1, lista guarda 0
se indice < 0 ou indice >= tamanho(tarefas) então
escreva("Não existe tarefa com esse número")
retorne
fim
// aqui a tarefa existe com certeza:
tarefas[indice]["estado"] <- "concluída"
escreva("Tarefa concluída!")
fimDuas guardas validam o número antes de mexer na lista. Só depois a tarefa é acessada e concluída, sem risco de quebra.
Filtrar as pendentes e buscar por descrição
Duas operações que dão inteligência ao gerenciador são filtrar e buscar, e as duas reaproveitam padrões que você domina. Filtrar para mostrar só as tarefas pendentes é percorrer a lista com um laço e, para cada tarefa, uma decisão: se o estado é pendente, mostre; senão, pule. É o padrão de contar sob condição, agora aplicado a mostrar sob condição. Buscar uma tarefa por um pedaço da descrição é a busca linear do módulo 10 aplicada a texto: percorra as tarefas e, para cada uma, verifique se a descrição contém o termo procurado, lembrando de padronizar a caixa para que a busca por pao encontre Pão, exatamente o cuidado do módulo de strings. As duas operações mostram o curso inteiro convergindo: laços, decisões, busca e manipulação de texto trabalhando juntos numa função útil.
função listarPendentes(tarefas)
para cada tarefa em tarefas faça
se tarefa["estado"] = "pendente" então
escreva("- ", tarefa["descricao"])
fim
fim
fim
função buscarTarefa(tarefas, termo)
termoMin <- minusculas(termo)
achou <- falso
para cada tarefa em tarefas faça
se minusculas(tarefa["descricao"]) contém termoMin então
escreva("Encontrada: ", tarefa["descricao"])
achou <- verdadeiro
fim
fim
se não achou então escreva("Nenhuma tarefa com esse termo") fim
fimFiltrar é percorrer com decisão; buscar é a busca linear em texto, padronizando a caixa para não errar por maiúscula.
🎮 Jogo da aula
A validação que faltou
Esta função conclui uma tarefa pelo número, mas quebra se o usuário digitar um número que não existe. Toque na linha onde faltou uma cláusula de guarda antes.
O curso inteiro convergindo numa função
Pare um instante para apreciar o que aconteceu nesta aula. A função de concluir usou dicionário (a tarefa), lista (a coleção), acesso por índice, cláusula de guarda, validação de entrada e tratamento de caso de borda, tudo numa dúzia de linhas. A de filtrar juntou laço e decisão. A de buscar somou busca linear, manipulação de texto e padronização de caixa. Nenhum desses conceitos foi inventado agora; todos vieram dos módulos anteriores, e aqui eles se combinam com naturalidade para resolver um problema real. É esse o significado profundo de um projeto final: ele revela que você não colecionou tópicos soltos, e sim construiu um repertório que se articula. Um programador experiente não pensa vou usar o conceito X agora; ele simplesmente resolve o problema, e as ferramentas certas vêm à mão porque estão integradas no seu jeito de pensar. Você está começando a chegar lá. Na última aula, montamos o programa completo e olhamos para o próximo passo da sua jornada.
Teste rápido
Na função que busca uma tarefa pela descrição, por que padronizar a caixa (deixar tudo em minúsculas) antes de comparar?
Perguntas frequentes
- Por que validar o número da tarefa antes de concluí-la?
- Porque o número vem do usuário, um dado de fora que não se confia. Se ele digitar um número inexistente, letras ou um negativo, acessar a lista sem checar quebraria o programa. As cláusulas de guarda validam o número primeiro e tratam o caso inválido com uma mensagem, evitando o erro de execução.
- Por que o índice é o número digitado menos um?
- Porque o usuário vê as tarefas numeradas a partir de 1 (mais natural para pessoas), mas a lista guarda a partir do índice 0. Então a tarefa que o usuário chama de 1 está no índice 0, a 2 no índice 1, e assim por diante. Subtrair um faz a ponte entre a numeração humana e a da lista.
- Como o gerenciador filtra só as tarefas pendentes?
- Percorrendo a lista com um laço e, para cada tarefa, uma decisão: se o estado é pendente, mostra; senão, pula. É o padrão de agir sob condição dentro de um laço. O mesmo esqueleto serviria para filtrar as concluídas, bastando trocar a condição.
- Buscar no gerenciador usa busca binária?
- Não: usa busca linear, porque as tarefas não estão ordenadas por descrição e a lista costuma ser pequena. A busca percorre as tarefas verificando se a descrição contém o termo. A busca binária exigiria ordenar por descrição e valeria a pena só com muitíssimas tarefas, o que não é o caso de uma lista pessoal de afazeres.
- Por que a busca ignora maiúsculas e minúsculas?
- Para achar o que o usuário quer sem exigir que ele acerte a caixa. Como P e p são diferentes para o computador, uma busca por pao não acharia Pão sem cuidado. Padronizar tanto o termo quanto a descrição para minúsculas antes de comparar resolve, deixando a busca amigável, como o usuário espera.
- Quantos conceitos do curso essas funções usam?
- Muitos, juntos. Concluir usa dicionário, lista, índice, guarda, validação e caso de borda. Filtrar usa laço e decisão. Buscar usa busca linear, texto e padronização de caixa. Nenhum é novo; o valor do projeto é ver os conceitos se combinarem com naturalidade para resolver um problema real.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.