C# Sobre os Projetos

Nas aulas, cada página ensina um assunto. Nos projetos, você junta vários assuntos para construir um programa inteiro, do arquivo vazio até a versão final. É aqui que as peças se encaixam: o Console.ReadLine conversa com o TryParse, que alimenta um switch, que chama um método que você mesmo escreveu.

Você vai aprender
  • Como os projetos do guia são construídos, em versões pequenas.
  • Que aulas cada projeto pratica e em que ordem fazê-los.
  • Como rodar cada versão: no editor do guia e no terminal (dotnet run arquivo.cs ou um projeto com dotnet new console).
  • Como mandar a entrada de um arquivo para o programa, sem digitar tudo de novo.
  • O que fazer quando o seu código não bate com o da página.

A ideia: montar um móvel seguindo o manual

Quem monta um armário não aparafusa todas as peças de uma vez para só no fim descobrir que a porta ficou torta. O manual divide em passos: primeiro a base, depois as laterais, confere se está firme, depois as prateleiras. Ao fim de cada passo, o que já foi montado fica de pé.

Os projetos do guia são iguais. Cada um é dividido em versões (versão 1, 2, 3…), e cada versão acrescenta uma coisa nova à anterior. No fim de toda versão, o programa compila e roda. Você nunca fica com um monte de código "que ainda não funciona".

Toda página de projeto segue o mesmo roteiro:

  1. O que vamos construir. Uma sessão real do programa pronto, para você ver aonde vai chegar.
  2. Antes de começar. As aulas que você precisa ter visto e a pasta onde o projeto vai morar.
  3. As versões. Cada uma mostra o código, explica o que mudou, mostra a saída real (rodada com o .NET 10 na máquina da Ana) e termina com uma caixa Experimente em que você faz a parte nova.
  4. Quando dá errado. Os erros que aparecem de verdade naquele projeto, com a mensagem completa e o conserto.
  5. O programa completo e os desafios. A versão final, inteira, e ideias para você continuar sozinho.

Os projetos

Estão em ordem de dificuldade. Os primeiros usam o Nível 1 e um pouco de métodos; os últimos pedem classes, coleções, arquivos e LINQ.

ProjetoO que éAulas que ele praticaFaça depois de
CalculadoraLê dois números e uma operação e mostra o resultado; repete até você digitar sair.ReadLine, Parse e TryParse, switch, while, break e continue, MétodosNível 1 + Métodos
Jogo de AdivinhaçãoO computador sorteia um número de 1 a 100 e você tenta adivinhar, com dicas "maior" e "menor", limite de tentativas e "jogar de novo".Random, while, do while, if e else, constNível 1
Boletim de NotasLê os alunos e as notas de uma turma e mostra a média, a maior e a menor nota, os aprovados e uma tabela alinhada.Arrays, foreach, Records, Expressões switch, Formatar NúmerosNível 1 + Records
Agenda de Contatos (JSON)Cadastra, lista, busca e remove contatos, e guarda tudo num arquivo .json para a próxima vez.List<T>, Records, Métodos de String, JSON, try e catch, dotnet new consoleNível 2 + List<T> e JSON
Conta Bancária (classes)Contas com depósito, saque, extrato e poupança, em vários arquivos, com as regras protegidas dentro das classes.Classes, Encapsulamento, Construtores, throw, Herança, decimalNível 2
Estoque da Lojinha (LINQ)Os produtos da lojinha da Ana, consultados com LINQ: o que está acabando, quanto vale o estoque, o mais vendido.LINQ, Where e Select, OrderBy, GroupByLINQ
Lista de TarefasUm programa de linha de comando para anotar, concluir e listar tarefas.args, Arquivos, List<T> e o que você aprendeu no Nível 3Nível 3
Não precisa ter terminado o nível inteiro

A coluna "Faça depois de" é o mínimo. Se alguma versão usar algo que você ainda não viu, o texto tem o link para a aula: abra numa aba nova, leia e volte.


Onde rodar: duas formas

1. No editor do guia (o mais fácil)

Toda versão tem uma caixa Experimente com o código da versão anterior. Você edita, clica em Rodar e vê a saída. O editor usa o compilador C# de verdade, o mesmo do dotnet, e roda o programa dentro do navegador (veja O Editor do Guia).

Quase todo projeto lê o teclado com Console.ReadLine(). Nas missões, a entrada já vem pronta, no campo Entrada abaixo do editor (o texto da missão diz qual é), e o programa a lê como se você tivesse digitado. Repare que, como ninguém digitou de verdade, as respostas não aparecem na saída: as perguntas ficam grudadas umas nas outras (Primeiro número: Segundo número: …). Nas caixas sem entrada pronta, você mesmo digita: quando o programa pergunta, aparece um campo no terminal da caixa, logo depois da pergunta. Digite e tecle Enter (Ctrl+D encerra a entrada, e o ReadLine() devolve null). Aí, sim, o que você digitou aparece ao lado da pergunta, como no terminal.

Experimente agora. Este é o "esqueleto" de todo projeto: uma linha com o título do programa.

Missão: troque o título para === Meu Primeiro Projeto === e clique em Rodar.

Console.WriteLine("=== Título ===");
Console.WriteLine("=== Meu Primeiro Projeto ===");

2. No terminal do seu computador

Para guardar o seu trabalho, cada projeto ganha uma pasta. Os três primeiros (calculadora, adivinhação e boletim) são um arquivo só, e a Ana roda com dotnet run arquivo.cs, como aprendeu em Rodar com dotnet run. Esta é a primeira versão da calculadora:

$ mkdir -p cs/calculadora              « cria a pasta do projeto (e a cs, se não existir)
$ cd cs/calculadora
$ ls
calculadora.cs                         « o arquivo que a Ana escreveu no editor
$ dotnet run calculadora.cs
=== Calculadora da Ana ===
Primeiro número: 10                    « 10 e 5 foram digitados pela Ana
Segundo número: 5
10 + 5 = 15

Os projetos maiores (agenda, banco, estoque e tarefas) têm vários arquivos ou usam recursos que pedem um projeto de verdade, com o arquivo .csproj. A Ana cria cada um com dotnet new console (veja Projetos) e roda com dotnet run, sem nome de arquivo:

$ mkdir -p projetos
$ cd projetos
$ dotnet new console -o Agenda
O modelo "Aplicativo do Console" foi criado com êxito.

Processando ações pós-criação...
Restaurando /home/ana/projetos/Agenda/Agenda.csproj:
  Determinando os projetos a serem restaurados...
  /home/ana/projetos/Agenda/Agenda.csproj restaurado (em 104 ms).
A restauração foi bem-sucedida.

$ cd Agenda
$ ls
Agenda.csproj  obj  Program.cs
$ dotnet run                           « compila todos os .cs da pasta e roda
FormaComandoQuando usar
Editor do guiabotão RodarPara fazer as versões rapidamente, em qualquer computador ou no celular.
Arquivo soltodotnet run calculadora.csProjetos de um arquivo: calculadora, adivinhação e boletim.
Projetodotnet new console -o Nome, depois dotnet runVários arquivos, JSON e pacotes: agenda, banco, estoque e tarefas.

Entrada de um arquivo: sem digitar tudo de novo

Testar a calculadora dez vezes é digitar dez vezes os mesmos números. Em vez disso, a Ana guardou a entrada num arquivo de texto e mandou o arquivo para o programa com < (é o mesmo que a caixa Experimente faz com a entrada da missão). Como ninguém digitou, os números não aparecem depois das perguntas:

$ cat entrada.txt
10
5
$ dotnet run calculadora.cs < entrada.txt
=== Calculadora da Ana ===
Primeiro número: Segundo número: 10 + 5 = 15

Como estudar um projeto

  1. Leia a versão inteira antes de digitar. Entenda o que muda e por quê.
  2. Digite o código, não copie e cole. Parece mais lento, mas é digitando que você erra, lê a mensagem do compilador e aprende a consertar.
  3. Rode depois de cada versão e compare com a saída da página. Se for diferente, ache a diferença antes de seguir.
  4. Mude alguma coisa. Troque uma mensagem, um número, uma condição, e tente prever o que vai acontecer antes de rodar.
  5. Só então vá para a próxima versão.
"O meu não funciona e o da página funciona"

Quase sempre é um ; esquecido, uma letra maiúscula trocada ou uma chave } a mais ou a menos. A Ana digitou isto:

Console.Write("Seu nome: ");
string nome = Console.ReadLine() ?? "";
console.WriteLine($"Olá, {nome}! Vamos programar.")
$ dotnet run ola.cs
/home/ana/cs/ola/ola.cs(3,52): error CS1002: ; esperado

Ocorreu uma falha no build. Corrija os erros de build e execute novamente.

A mensagem diz o arquivo, a linha 3 e a coluna 52 (o fim da linha): falta o ;. Ela pôs o ponto e vírgula e rodou de novo:

$ dotnet run ola.cs
/home/ana/cs/ola/ola.cs(3,1): error CS0103: O nome "console" não existe no contexto atual

Ocorreu uma falha no build. Corrija os erros de build e execute novamente.

Agora apareceu um segundo erro, que estava escondido atrás do primeiro: console com c minúsculo. Para o C#, console e Console são nomes diferentes. Trocando para Console, o programa roda.

A lição: conserte o primeiro erro da lista e rode de novo; às vezes um erro esconde outro. Como ler cada parte dessas mensagens está em Lendo Erros do Compilador, e os códigos mais comuns, em Erros do Compilador (CS…).

Para aquecer, um programa que lê do teclado, como quase todos os projetos fazem. A entrada Ana já vem pronta na missão.

Missão: complete o programa para que, depois de ler o nome, ele mostre Olá, Ana! Vamos programar.. Use a variável nome dentro de uma interpolação ($"… {nome} …"), sem escrever "Ana" no código. Se precisar, revise Ler do Teclado.

Console.Write("Seu nome: ");
string nome = Console.ReadLine() ?? "";
// escreva aqui a saudação
Console.Write("Seu nome: ");
string nome = Console.ReadLine() ?? "";
Console.WriteLine($"Olá, {nome}! Vamos programar.");
$ dotnet run ola.cs
Seu nome: Ana
Olá, Ana! Vamos programar.

Exercícios

1. Por que os projetos são feitos em versões?

2. A Agenda tem vários arquivos .cs. Como a Ana a cria e roda no terminal?

3. O compilador mostrou três erros. Qual consertar primeiro?

4. Complete o comando que manda o conteúdo de entrada.txt para a entrada do programa:

$ dotnet run calculadora.cs entrada.txt

Resumo

  • Cada projeto é construído em versões; ao fim de cada uma, o programa compila e roda.
  • Toda página de projeto tem: o resultado final, os pré-requisitos, as versões com missões, os erros reais e os desafios.
  • Calculadora, adivinhação e boletim são um arquivo só: dotnet run arquivo.cs. Agenda, banco, estoque e tarefas são projetos: dotnet new console -o Nome e dotnet run.
  • dotnet run arquivo.cs < entrada.txt manda a entrada de um arquivo, como as missões do editor.
  • Quando der erro, leia a primeira mensagem: arquivo, linha, coluna e código CS….

Comece pelo primeiro: Calculadora.