Exercício – Realizar adição com conversão implícita de dados
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 int
s), ele conclui que você deseja adicionar os dois valores.
Adicione o seguinte código no Editor do .NET:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
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
?
Modifique o código escrito para que corresponda ao seguinte código:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
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 int
widgetsSold
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
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.");
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 int
widgetsSold
ao literal int
7
, o compilador trata tudo como uma cadeia de caracteres e concatena tudo.
Adicionar parênteses para esclarecer sua intenção ao compilador
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.");
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 umstring
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.