Esercizio - Eseguire l'aggiunta con la conversione implicita dei dati

Completato

È 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.

  1. Immettere il codice seguente nell'editor .NET:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. 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?

  1. Modificare il codice scritto in modo che sia uguale al seguente:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. 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 intwidgetsSold 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

  1. Modificare il codice scritto in modo che sia uguale al seguente:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. Eseguire il codice e quindi nella console di output verrà visualizzato il risultato seguente:

    Bob sold 77 widgets.
    

Invece di aggiungere la variabile intwidgetsSold al valore letterale int7, il compilatore considera tutti gli elementi come una stringa e li concatena tutti insieme.

Aggiungere parentesi per chiarire l'intenzione del compilatore

  1. Modificare il codice scritto in modo che sia uguale al seguente:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. 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 intwidgetsSold 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 in string, 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.