Esercizio - Eseguire l'aggiunta con la conversione implicita dei dati
È spesso necessario eseguire operazioni matematiche su dati numerici. In questa unità si inizia con l'addizione, per poi passare ad altre operazioni nell'unità successiva, perché è fondamentale comprendere alcuni concetti importanti relativi al modo in cui il compilatore C# analizza e interpreta il codice.
Sommare due valori numerici
Per sommare due numeri, verrà usato l'operatore di addizione, ovvero il simbolo più +
. Lo stesso simbolo più +
usato per la concatenazione di stringhe viene usato anche per l'addizione. Il riutilizzo di un simbolo per più scopi viene talvolta denominato "overload dell'operatore" e si verifica spesso in C#.
In questo caso, il compilatore C# comprende l'operazione che si sta provando a eseguire. Il compilatore analizza il codice e rileva che l'operatore +
è racchiuso tra due valori numerici (gli operandi). Considerati i tipi di dati delle variabili (entrambi int
), deduce che l'intenzione è quella di sommare i due valori.
Immettere il codice seguente nell'editor .NET:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
Eseguire il codice e quindi nella console di output verrà visualizzato il risultato seguente:
19
Combinare tipi di dati diversi per forzare la conversione implicita del tipo
Cosa accade se si tenta di usare il simbolo +
con i valori string
e int
?
Modificare il codice scritto in modo che sia uguale al seguente:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
Eseguire il codice e quindi nella console di output verrà visualizzato il risultato seguente:
Bob sold 7 widgets.
In questo caso, il compilatore C# riconosce che si vuole usare il simbolo +
per concatenare i due operandi. Deduce questo perché il simbolo +
è racchiuso tra gli operandi dei tipi di dati string
e int
. Tenta quindi di convertire in modo implicito la variabile int
widgetsSold
nel tipo string
temporaneamente, in modo da poterla concatenare con il resto della stringa. Il compilatore C# tenta di aiutare quando possibile, ma idealmente, è consigliabile esprimere in modo esplicito le proprie intenzioni.
Sperimentare un caso più avanzato di somma di numeri e di concatenazione di stringhe
Modificare il codice scritto in modo che sia uguale al seguente:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
Eseguire il codice e quindi nella console di output verrà visualizzato il risultato seguente:
Bob sold 77 widgets.
Invece di aggiungere la variabile int
widgetsSold
al valore letterale int
7
, il compilatore considera tutti gli elementi come una stringa e li concatena tutti insieme.
Aggiungere parentesi per chiarire l'intenzione del compilatore
Modificare il codice scritto in modo che sia uguale al seguente:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
Eseguire il codice e quindi nella console di output verrà visualizzato il risultato seguente:
Bob sold 14 widgets.
Il simbolo di parentesi ()
diventa un altro operatore di overload. In questo caso, le parentesi aperta e chiusa formano l'operatore di ordine delle operazioni, proprio come in una formula matematica. Si indica l'intenzione di risolvere prima le parentesi più interne, sommando quindi i valori int
widgetsSold
e il valore 7
. Dopo la risoluzione, il risultato verrà convertito in modo implicito in una stringa in modo che possa essere concatenato con il resto del messaggio.
Nota
Probabilmente è consigliabile evitare di eseguire sia un calcolo che una concatenazione in una singola riga di codice. L'obiettivo in questo caso è comprendere come vedere gli operatori e gli operandi dal punto di vista del compilatore.
Riepilogo
Ecco quanto appreso finora sulle operazioni matematiche in C#:
- È possibile eseguire operazioni matematiche come l'addizione sui numeri.
- Sia la concatenazione di stringhe che l'addizione usano il simbolo
+
. Questa situazione è nota come overload di un operatore e il compilatore deduce l'uso corretto in base ai tipi di dati su cui opera. - Quando possibile, il compilatore C# convertirà in modo implicito un valore
int
instring
, se è ovvio che lo sviluppatore sta provando a concatenare la rappresentazione stringa di un numero a scopo di presentazione. - Usare le parentesi per definire l'ordine delle operazioni e indicare in modo esplicito al compilatore che si vogliono eseguire determinate operazioni prima di altre.