Exercício – Realizar adição com conversão implícita de dados

Concluído

Muitas vezes, você deseja executar operações matemáticas sobre dados numéricos. Você começará com a adição nesta unidade, depois passará para outras operações na próxima unidade, pois há uma lição importante a ser aprendida sobre como o compilador do C# analisa e interpreta o seu código.

adicionar dois valores numéricos

Para somar dois números, você usará o operador de adição, que é o sinal de mais +. Sim, o mesmo símbolo de mais + que você usa para concatenação de cadeias de caracteres também é usado para adição. A reutilização de um símbolo com várias finalidades é, às vezes, chamada de "sobrecarregar o operador", e ocorre frequentemente em C#.

Neste caso, o compilador de C# entende o que você está tentando fazer. O compilador analisa o código e vê que o + (operador) está posicionado entre dois valores numéricos (operandos). Considerando os tipos de dados das variáveis (ambos são ints), ele conclui que você deseja adicionar os dois valores.

  1. Adicione o seguinte código no Editor do .NET:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. Execute o código e verá o seguinte resultado no console de saída:

    19
    

misturar tipos de dados para forçar as conversões de tipo implícitas

O que acontece se você tenta usar o símbolo + com os valores string e int?

  1. Modifique o código escrito para que corresponda ao seguinte código:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. Execute o código e verá o seguinte resultado no console de saída:

    Bob sold 7 widgets.
    

Neste caso, o compilador de C# entende que você deseja usar o símbolo + para concatenar os dois operandos. Ele deduz isso porque o símbolo + está rodeado por operandos dos tipos de dados string e int. Sendo assim, ele tenta converter implicitamente a variável intwidgetsSold em um string temporariamente, para que possa concatenar o restante da cadeia de caracteres. O compilador de C# tenta ajudá-lo quando pode, mas o ideal é que você seja explícito quanto às suas intenções.

tentar um caso mais avançado de adição de números e concatenação de cadeias de caracteres

  1. Modifique o código escrito para que corresponda ao seguinte código:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. Execute o código e verá o seguinte resultado no console de saída:

    Bob sold 77 widgets.
    

Em vez de adicionar a variável intwidgetsSold ao literal int7, o compilador trata tudo como uma cadeia de caracteres e concatena tudo.

Adicionar parênteses para esclarecer sua intenção ao compilador

  1. Modifique o código escrito para que corresponda ao seguinte código:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. Execute o código e verá o seguinte resultado no console de saída:

    Bob sold 14 widgets.
    

O símbolo de parênteses () se torna outro operador sobrecarregado. Neste caso, os parênteses de abertura e fechamento formam o operador de ordem de operações, exatamente como você usaria em uma fórmula matemática. Você indica que quer ver o parêntese interno ser resolvido primeiro, resultando na adição dos valores int, widgetsSold e o valor 7. Após isso ser resolvido, ele converterá implicitamente o resultado em uma cadeia de caracteres para que possa ser concatenado ao restante da mensagem.

Observação

Provavelmente, você deveria evitar executar um cálculo e uma concatenação em uma única linha de código. A ideia aqui é ajudar você a entender como ver operadores e operandos da maneira que o compilador faz.

Recapitulação

Veja o que você aprendeu até agora sobre operações matemáticas em C#:

  • Você pode executar operações matemáticas, como de adição, em números.
  • A concatenação de cadeias de caracteres e a adição usam o símbolo de adição +. Isso é chamado de sobrecarregar um operador e o compilador infere o uso adequado com base nos tipos de dados em que opera.
  • Quando puder, o compilador de C# converterá implicitamente um int em um string se for óbvio que o desenvolvedor está tentando concatenar a representação de cadeia de caracteres de um número para fins de apresentação.
  • É possível usar parênteses para definir a ordem das operações, a fim de informar explicitamente ao compilador que deseja executar determinadas operações antes de outras.