Parâmetros e Conversão de Dados em C# com VS Code
Objetivo da Aula:
Capacitar os alunos a criar programas C# que interagem com o ambiente, recebendo e processando parâmetros da linha de comando, e a dominar as diversas formas de conversão de dados, incluindo implícita, explícita, System.Convert, e os conceitos de Boxing e Unboxing.
Público-Alvo:
Estudantes de programação com conhecimento básico em C# e uso do VS Code.
Duração Estimada:
1h30min - 2h (dependendo do ritmo dos alunos e da profundidade das discussões/exercícios).
Materiais Necessários:
Computadores com Visual Studio Code (VS Code) e SDK do .NET instalados e configurados.
Quadro ou lousa para anotações.
Parte 1: Recebimento e Tratamento de Parâmetros (45-60 minutos)
1. Introdução (5 minutos)
Professor: "Olá a todos! Hoje vamos aprender como nossos programas C# podem ser mais inteligentes e flexíveis, aceitando informações de fora (parâmetros da linha de comando) e como manipular esses dados (conversões). Isso é super útil para criar ferramentas dinâmicas!"
Professor: Perguntar aos alunos: "Alguém já viu programas que vocês executam e podem colocar informações extras depois do nome do programa?" (Ex:
git commit -m "minha mensagem"). Explicar que é isso que vamos aprender a fazer.
2. Configurando o Projeto no VS Code (10 minutos - Mão na Massa)
Professor: Instruir os alunos a abrir o VS Code.
Professor: Abrir o Terminal Integrado (
Ctrl+').Professor: Comandos no terminal:
Bash
dotnet new console -o ParametroApp cd ParametroApp code .Professor: "Lembrem-se, o
code .vai reabrir o VS Code na pasta do nosso novo projeto. Isso é muito prático!"
3. Entendendo o Main e os Parâmetros (string[] args) (10 minutos)
Professor: Abrir
Program.cs.Professor: Explicar a assinatura do método
Main:static void Main(string[] args).Focar no
string[] args. "Esteargsé um array de strings, e é para cá que o C# joga todas as palavras que digitarmos depois do nome do nosso programa."Explicar que cada item no array é um parâmetro.
Professor: Exemplo Prático (Exibir Parâmetros Simples):
Professor: Execução e Explicação do
--:dotnet run(sem parâmetros)dotnet run -- meu parametro de teste(com parâmetros)Crucial: Explicar o
--. "Este--é um separador. Ele diz ao comandodotnet run: 'O que vem depois de mim não é para você,dotnet run, é para o meu programa C#!' Sem ele, odotnettentaria interpretar 'meu' como uma opção dele mesmo."
4. Tratando Parâmetros: Um Exemplo Prático de Saudações (15-20 minutos)
Professor: "Agora que sabemos como receber, vamos aprender a tratar esses parâmetros. Vamos fazer um programa de saudação personalizada!"
Professor: Explicar a ideia de "flags" ou "opções" (como
-npara nome,-spara saudação).Professor: Código no
Program.cs:Professor: Testes com alunos:
dotnet rundotnet run -- -n Alicedotnet run -- -s BoaNoite -n Bobdotnet run -- -n Carla -s Oládotnet run -- -n David parametro_extra
Professor: Reforçar:
args.Length,forloop para iterar, tratamento de erro (if (i + 1 < args.Length)).
Parte 2: Conversão de Dados (45-60 minutos)
1. Introdução à Conversão (5 minutos)
Professor: "Perfeito! Agora que nossos programas podem receber dados, precisamos saber como transformá-los. E se o usuário digitar '10' como texto e precisarmos somar com outro número? Aí entram as conversões de dados."
Professor: "Vamos criar um novo projeto para focar só nisso."
2. Configurando o Novo Projeto de Conversão (5 minutos - Mão na Massa)
Professor: No terminal, criar um novo projeto:
Bash
3. Conversão Implícita (10 minutos)
Professor: "A conversão implícita é a mais 'tranquila'. Ela acontece automaticamente quando o C# tem certeza que não haverá perda de dados. Pensem em colocar um copo de água num balde: a água cabe, e o balde é maior."
Professor: Código no
Program.cs:Professor: Executar:
dotnet runProfessor: "Notem que o código funciona sem reclamar. O compilador do C# é inteligente e sabe que
longpode guardar qualquerint, por exemplo."
4. Conversão Explícita (Casting) (15 minutos)
Professor: "Agora, e se for o contrário? Tentar colocar um balde de água num copo? Aí temos um problema! O compilador não vai fazer isso sozinho, porque pode haver perda de dados. Precisamos dizer a ele explicitamente que estamos cientes do risco, usando o casting."
Professor: Código no
Program.cs:Professor: Executar:
dotnet runProfessor: "Observem a sintaxe
(TipoDesejado)variavel. É como se estivéssemos falando: 'Compilador, eu sei o que estou fazendo, pode converter, mesmo que perca dados!' Nodoubleparaint, a parte decimal é simplesmente cortada. Nolongparaint, se o número for muito grande, ele 'estoura' e vira outro número, que não é o que esperávamos!"
5. Usando System.Convert (15 minutos)
Professor: "Quando a gente lida muito com strings (textos) que na verdade representam números, ou precisa de um controle maior sobre as conversões, o
System.Converté nosso melhor amigo. Ele tem métodos específicos para cada tipo e é mais robusto, podendo nos avisar se algo deu errado com exceções."Professor: Código no
Program.cs:C#
Professor: Executar:
dotnet runProfessor: "Vejam como ele consegue converter de string para número e de número para string. E o mais importante: se a string não for um número válido, ele nos avisa com uma exceção(
FormatException), que podemos 'pegar' com umtry-catchpara que nosso programa não trave."
6. Boxing e Unboxing (15 minutos)
Professor: "Esses são conceitos mais avançados, mas muito importantes para entender como C# lida com diferentes tipos de memória. O C# tem tipos de valor (como
int,double,bool) que guardam o valor diretamente, e tipos de referência (comostring,object, classes) que guardam um endereço para onde o valor está na memória."Professor: Explicar Boxing: "Quando pegamos um tipo de valor e o tratamos como um
object(que é um tipo de referência), o C# precisa 'empacotá-lo'. Isso é o Boxing. Ele cria um novo espaço na memória (no 'heap', para referências) e copia o valor para lá."Professor: Código para Boxing:
C#
Professor: Executar:
dotnet runProfessor: Explicar Unboxing: "Agora, se queremos pegar aquele valor que foi 'empacotado' no
objecte trazê-lo de volta para o seu tipo de valor original, fazemos o Unboxing. Mas cuidado! Para o Unboxing funcionar, você tem que 'desempacotar' para o mesmo tipo que foi empacotado. Se tentar para um tipo diferente, o C# vai reclamar feio!"Professor: Código para Unboxing:
C#
Professor: Executar:
dotnet runProfessor: "Prestem atenção ao
InvalidCastException. Ele acontece porque, emborashorteintsejam números, o Unboxing exige que você volte exatamente para o tipo original que foi boxeado."
Parte 3: Exercício Prático e Discussão (15-20 minutos)
1. Proposta de Exercício (10 minutos)
Professor: "Agora é a vez de vocês colocarem a mão na massa e aplicarem tudo o que aprendemos!"
Professor: Apresentar o exercício:
Crie um novo programa de console que:
Declare uma variável
decimalcom um valor monetário (ex:150.75m).Converta esse valor para
intusando conversão explícita e mostre o resultado. Peça para eles comentarem a perda de precisão.Declare uma variável
stringcontendo um número de telefone (ex:"123456789").Converta essa string para um
longusandoSystem.Converte mostre o resultado.Tente converter a string
"não é um número"para umintusandoSystem.Convertdentro de um blocotry-catchpara lidar com a exceção, e exiba uma mensagem de erro amigável se a conversão falhar.Declare uma variável
boolcom o valortrue.Faça o boxing dessa variável
boolpara umobject.Faça o unboxing do
objectde volta para umbool.Tente fazer o unboxing do
object(que era umbool) para umintdentro de umtry-catche explique a exceção.
2. Discussão e Dúvidas (5-10 minutos)
Professor: Abrir para perguntas enquanto os alunos trabalham ou após tentarem resolver o exercício.
Professor: Reforçar os cenários de uso para cada tipo de conversão.
Implícita: Sempre que for seguro, o C# faz sozinho.
Explícita (Casting): Quando o risco de perda de dados é aceitável e você quer forçar a conversão (ex: ignorar decimais).
System.Convert: Melhor para conversões de/para strings e para tipos base, com bom controle de erros.Boxing/Unboxing: Para interagir com o tipo
objectou coleções que esperamobjects (embora genéricos sejam mais recomendados hoje), mas sabendo do impacto no desempenho e da rigidez do unboxing.
Atualizado