Kata - Calculadora em C#
Bem-vindo ao nosso primeiro kata prático! Neste exercício, vamos construir uma calculadora simples usando C#. O objetivo é aplicar os conceitos fundamentais que aprendemos, como variáveis, tipos de dados, operadores, condicionais e funções, em um projeto real e funcional.
Este tutorial é voltado para iniciantes e explicará cada parte do código detalhadamente.
O Código Completo
Aqui está o código completo do nosso arquivo Program.cs. Vamos analisá-lo passo a passo.
Análise do Código
Estrutura Básica
using System;: Esta linha importa o namespaceSystem, que contém classes fundamentais e tipos de dados que usamos em quase todos os programas C#, comoConsole,String,Double, etc.namespace Calculator: Umnamespaceé usado para organizar o código e evitar conflitos de nomes. Aqui, estamos criando um namespace chamadoCalculatorpara o nosso projeto.class Program: Em C#, todo o código executável deve estar dentro de uma classe. A classeProgramé o contêiner principal para o nosso código.static void Main(string[] args): Este é o ponto de entrada do nosso programa. Quando o aplicativo é executado, o métodoMainé o primeiro a ser chamado.static: Significa que o método pertence à classePrograme não a uma instância específica dela.void: Indica que o método não retorna nenhum valor.string[] args: É um array de strings que pode ser usado para passar argumentos de linha de comando para o programa (não estamos usando neste kata).
O Menu Principal (Menu function)
O coração da nossa aplicação é a função Menu. Ela é responsável por interagir com o usuário.
Console.Clear(): Limpa a tela do console, proporcionando uma interface mais limpa a cada vez que o menu é exibido.Console.WriteLine(...): Exibe as opções disponíveis para o usuário.Console.ReadLine(): Lê a entrada do usuário a partir do console. O valor lido é sempre umastring.short.Parse(...): ComoReadLineretorna umastring, precisamos convertê-la para um tipo numérico para podermos usá-la em nossa lógica.short.Parseconverte a string de entrada em umshort(um tipo de número inteiro).switch(res): A estruturaswitché uma forma de controle de fluxo que permite executar diferentes blocos de código com base no valor de uma variável. É uma alternativa mais limpa a múltiplosif-else if.case X:: Cadacasecorresponde a um valor possível da variávelres. Seresfor1, o código dentro decase 1:será executado.break;: A palavra-chavebreaké usada para sair doswitchapós a execução de umcase.default:: Se o valor deresnão corresponder a nenhum doscase, o blocodefaultserá executado. Em nosso caso, ele simplesmente chama oMenu()novamente.System.Environment.Exit(0);: Nocase 5, usamos este comando para encerrar a aplicação. O0indica que o programa terminou com sucesso.
Funções de Operação (Sum, Subtraction, etc.)
Todas as funções de operação seguem um padrão semelhante. Vamos analisar a função Sum():
Console.Clear(): Limpa a tela para a nova "página" da operação.double.Parse(Console.ReadLine()): Novamente, lemos a entrada do usuário e a convertemos. Desta vez, usamosdouble.Parseporque queremos trabalhar com números que podem ter casas decimais.double result = v1 + v2;: Aqui está a lógica principal da função. Realizamos a soma dos dois números e armazenamos o resultado na variávelresult.Console.WriteLine($" {v1} + {v2} = {result}");: Esta é uma string interpolada. O$no início da string nos permite incorporar variáveis diretamente no texto usando chaves{}. É uma forma moderna e legível de formatar strings.Console.ReadKey(): Pausa a execução do programa e espera que o usuário pressione qualquer tecla. Isso é útil para que o usuário possa ver o resultado antes que o programa limpe a tela e volte ao menu.Menu(): Após a operação ser concluída e o usuário pressionar uma tecla, chamamos a funçãoMenu()novamente, criando um loop que permite ao usuário realizar outra operação ou sair.
Conceitos-Chave Aplicados
Funções: Organizamos nosso código em funções reutilizáveis (
Menu,Sum,Subtraction, etc.), tornando o código mais limpo e fácil de manter.Tipos de Dados: Usamos
shortpara a opção do menu edoublepara os valores dos cálculos, escolhendo os tipos apropriados para cada tarefa.Conversão de Tipos (Parsing): Convertemos a entrada do usuário de
stringpara tipos numéricos usandoshort.Parseanddouble.Parse.Controle de Fluxo: Usamos a estrutura
switchpara tomar decisões com base na entrada do usuário.Entrada e Saída: Utilizamos a classe
Consolepara interagir com o usuário, exibindo informações (WriteLine) e lendo dados (ReadLine).Recursão (Leve): A função
Menuchama a si mesma nodefaultdoswitch, e as funções de operação chamamMenuno final. Isso cria um ciclo de vida para a aplicação.
Desafios para Expansão
Agora que você entende o código, aqui estão alguns desafios para você tentar:
Adicionar Potenciação: Crie uma nova opção no menu e uma função
Power()que calculav1elevado av2. (Dica: você pode usarMath.Pow(v1, v2)).Tratamento de Erros: O que acontece se o usuário digitar "abc" em vez de um número? O programa irá quebrar. Pesquise sobre
try-catchem C# para lidar com essas exceções e exibir uma mensagem de erro amigável.Raiz Quadrada: Adicione uma opção para calcular a raiz quadrada de um número. (Dica:
Math.Sqrt(v1)).Histórico de Operações: Como você poderia armazenar e exibir as últimas 5 operações que o usuário realizou?
Parabéns por concluir este kata! Você deu um passo importante na sua jornada de aprendizado de C#.