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 chamadoCalculator
para 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 à classeProgram
e 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(...)
: ComoReadLine
retorna umastring
, precisamos convertê-la para um tipo numérico para podermos usá-la em nossa lógica.short.Parse
converte 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:
: Cadacase
corresponde a um valor possível da variávelres
. Seres
for1
, o código dentro decase 1:
será executado.break;
: A palavra-chavebreak
é usada para sair doswitch
após a execução de umcase
.default:
: Se o valor deres
não corresponder a nenhum doscase
, o blocodefault
será executado. Em nosso caso, ele simplesmente chama oMenu()
novamente.System.Environment.Exit(0);
: Nocase 5
, usamos este comando para encerrar a aplicação. O0
indica 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.Parse
porque 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
short
para a opção do menu edouble
para os valores dos cálculos, escolhendo os tipos apropriados para cada tarefa.Conversão de Tipos (Parsing): Convertemos a entrada do usuário de
string
para tipos numéricos usandoshort.Parse
anddouble.Parse
.Controle de Fluxo: Usamos a estrutura
switch
para tomar decisões com base na entrada do usuário.Entrada e Saída: Utilizamos a classe
Console
para interagir com o usuário, exibindo informações (WriteLine
) e lendo dados (ReadLine
).Recursão (Leve): A função
Menu
chama a si mesma nodefault
doswitch
, e as funções de operação chamamMenu
no 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 calculav1
elevado 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-catch
em 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#.