コード例 #1
0
        static void Main(string[] args)
        {
            //porque o nome "endApp" ?
            //lizardo: endApp porque traduzindo significado terminar app, ou seja, é a variável que controla se é pra parar ou não a execução do app,
            //faz sentido as variáveis terem nomes que transmitam o que elas fazem
            bool endApp = false;

            Console.WriteLine("Calculadora");

            while (!endApp)
            {
                // Declara variáveis e atribui vazio porque ?
                //lizardo: o padrao é iniciar as suas variáveis com algum valor, isso é uma boa pratica de desenvolvimento.
                //o vazio porque é uma string e o ZERO porque é um double

                string numInput1 = string.Empty; //string numInput1 = string.Empty é uma opção de iniciar com mais classe uma string com valor vazio
                string numInput2 = "";
                double result    = 0;

                //Pergunta o primeiro número
                Console.Write("Digite um número e aperte Enter: ");
                numInput1 = Console.ReadLine();

                //porque isso ?
                //lizardo: foi declarada essa variavel para validar se o que o usuario digitou é um double ou nao,
                //aquele TryParse vai  tentar converter, se ele nao conseguir converter quer dizer que não é um double válido

                //esse OUT, é um tipo de preenchimento de valor por refe
                double cleanNum1 = 0;
                //https://pt.stackoverflow.com/questions/82630/o-que-s%C3%A3o-os-par%C3%A2metros-out-e-ref#:~:text=O%20out%20indica%20que%20o,dar%20sa%C3%ADda%20para%20um%20valor.
                while (!double.TryParse(numInput1, out cleanNum1))
                {
                    Console.Write("Essa não é uma entrada válida, digite um valor inteiro: ");
                    numInput1 = Console.ReadLine();
                }

                //Pergunta o segundo número
                Console.Write("Digite outro número e aperte Enter: ");
                numInput2 = Console.ReadLine();

                //porque isso de novo ?
                //lizardo: mesma coisa que expliquei ali em cima
                double cleanNum2 = 0;
                while (!double.TryParse(numInput2, out cleanNum2))
                {
                    Console.Write("Essa não é uma entrada válida, digite um valor inteiro: ");
                    numInput2 = Console.ReadLine();
                }

                // Pergunta para selecionar uma operação
                Console.WriteLine("Selecione uma operação: ");
                Console.WriteLine("\ta - Adição");
                Console.WriteLine("\ts - Subtração");
                Console.WriteLine("\tm - Multiplicação");
                Console.WriteLine("\td - Divisão");


                string op = Console.ReadLine();

                try
                {
                    result = Calculator.FazerConta(cleanNum1, cleanNum2, op);
                    if (double.IsNaN(result))
                    {
                        Console.WriteLine("Essa operação vai resultar em um erro matemático.\n");
                    }
                    else
                    {
                        Console.WriteLine("Seu resultado: {0:0.##}\n", result);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Oh não uma excessão ocorreu tentado fazer isso.\n - Detalhes: " + e.Message);
                }

                Console.WriteLine("------------------------\n");

                // Pergunta se quer continuar ou fechar
                Console.Write("Aperte 'n' e Enter para sair, ou qualquer outra tecla e Enter para continuar.");
                if (Console.ReadLine() == "n")
                {
                    endApp = true;
                }
            }
            return;
        }