Variabili in C#

Iniziamo a studiare i concetti fondamentali di C# partendo dalle variabili. Le variabili sono uno degli elementi fondamentali di qualsiasi linguaggio di programmazione e sono utilizzate per memorizzare dati in una locazione di memoria temporanea.

In questa lezione analizzeremo alcuni concetti fondamentali e introduttivi sulle variabili in C#. A partire dalla prossima lezione studieremo i tipi base di C# e come utilizzarli per memorizzare dati di diverso tipo.

Concetti Chiave
  • Una variabile è un'etichetta che si assegna ad una locazione di memoria RAM per memorizzare un dato.
  • Una variabile è composta da tre elementi: nome, tipo e valore.
  • Il tipo di una variabile rappresenta il formato del dato che essa può contenere e le operazioni che si possono effettuare su di essa.
  • Per lavorare con una variabile è necessario dichiararla, assegnarle un valore e accedere al valore contenuto.

Concetto di Variabile

Uno degli aspetti fondamentali della programmazione consiste nel processare dati. Nello sviluppo software, particolare cura va posta nella gestione dei dati, in quanto la corretta manipolazione di essi è alla base di un'applicazione funzionante.

Per poter lavorare sui dati, un programma deve essere in grado di memorizzarli in una memoria temporanea per poi accedervi in un secondo momento. Questa memoria temporanea prende il nome di RAM, dall'inglese Random Access Memory ossia Memoria ad accesso casuale, ed è uno dei componenti fondamentali di qualunque dispositivo di calcolo, sia esso un PC, uno smartphone o un server.

Questa memoria è volatile, nel senso che i dati in essa contenuti vengono persi quando il dispositivo viene spento. Per poter memorizzare i dati in maniera persistente, ossia in maniera tale che sopravvivano allo spegnimento del dispositivo, è necessario utilizzare un supporto di memorizzazione non volatile, come ad esempio un disco rigido o una memoria flash. Studieremo questo aspetto nelle future lezioni. Per il momento ci concentreremo sulla memoria RAM.

Una memoria RAM ha, tipicamente, una dimensione molto vasta ed è suddivisa in locazioni. Una locazione può essere vista come una casella di un armadio, in cui è possibile inserire un oggetto. Ogni locazione ha un indirizzo, che la identifica univocamente all'interno della memoria.

Un programmatore deve, in teoria, conoscere gli indirizzi di memoria in cui memorizzare i dati. Tuttavia, questo approccio è poco pratico e complesso. Per questo motivo, nello sviluppo software si utilizzano le variabili.

Una variabile, infatti, può essere vista come un'etichetta che si assegna a una locazione di memoria. In questo modo, il programmatore non deve preoccuparsi di conoscere l'indirizzo di memoria di interesse, ma può semplicemente utilizzare il nome della variabile. Il compilatore si preoccupa di assegnare ad ogni variabile un indirizzo di memoria univoco, in modo che il programmatore possa utilizzarla senza preoccuparsi di dettagli tecnici.

Una variabile è, in pratica, composta da tre elementi:

  • Nome: è l'etichetta che si assegna alla locazione di memoria.
  • Tipo: è il tipo di dato che la variabile può contenere. Questo è un concetto fondamentale e ci torneremo sopra più avanti.
  • Valore: è il dato effettivo che la variabile contiene.

Di questi tre elementi, il tipo di una variabile rappresenta un concetto fondamentale. Possiamo vedere, in prima approssimazione, il tipo come il formato del dato che la variabile può contenere e l'insieme di operazioni che possiamo effettuare su di esso.

Il concetto di tipo sarà chiaro più avanti, ma per ora, per comprenderlo pensiamo ad una variabile di tipo numerico. Questa variabile può contenere un numero, e possiamo effettuare operazioni aritmetiche su di esso. Al contrario, una variabile di tipo testuale può contenere una sequenza di lettere o caratteri. Tuttavia, su di una variabile di questo tipo non ha senso effettuare operazioni matematiche.

Lavorare con una variabile

Per poter lavorare concretamente con una variabile è necessario effettuare una serie di operazioni, alcune delle quali devono necessariamente precedere le altre. Vediamo quali sono:

  • Dichiarazione: è il primo passo. In sostanza si tratta di creare una variabile. Infatti, quando il compilatore trova una dichiarazione di variabile, si preoccupa di riservare una locazione di memoria per essa. Questo passo è fondamentale: non si può utilizzare una variabile se essa non è stata prima dichiarata.

  • Assegnamento: una volta dichiarata, è possibile assegnare un valore alla variabile. In particolare, quando si assegna un valore per la prima volta ad una variabile, si dice che la variabile viene inizializzata. Quando, invece, si assegna un valore ad una variabile già inizializzata, si dice che la variabile viene modificata.

  • Accesso: una volta dichiarata e inizializzata, è possibile leggere il valore contenuto nella variabile.

L'operazione di dichiarazione di una variabile può avvenire un'unica volta nel nostro programma. Non è possibile, infatti, dichiarare più volte una stessa variabile. Viceversa, dopo che è stata dichiarata, possiamo assegnare e leggere il valore contenuto nella variabile quante volte vogliamo.

Adesso entriamo nel vivo del linguaggio C# e vediamo come dichiarare e utilizzare una variabile.

Dichiarare ed Utilizzare una Variabile

Per comprendere come dichiarare ed utilizzare una variabile in C#, consideriamo il seguente esempio:

1
2
3
string nome;
nome = Console.ReadLine();
Console.WriteLine("Ciao, " + nome + "!");

Questo esempio condensa i passaggi fondamentali visti sopra per poter lavorare con una variabile.

Alla riga 1 abbiamo dichiarato una variabile. In particolare la sintassi usata è:

tipo_variabile nome_variabile;

Nella dichiarazione abbiamo, prima, specificato il tipo della variabile, in questo caso string, che rappresenta una sequenza di caratteri. Poi abbiamo specificato il nome della variabile, in questo caso nome.

A questo punto la variabile può essere usata ma non è stata ancora inizializzata. Per questo motivo, nella riga 2, abbiamo assegnato alla variabile nome il valore restituito dal metodo Console.ReadLine(). Questo metodo legge una riga di testo da tastiera e restituisce il valore letto. Vedremo, in dettaglio, cosa sono i metodi più avanti.

La tipica sintassi per assegnare un valore ad una variabile è la seguente:

nome_variabile = valore;

In altre parole, si pone il nome della variabile a sinistra del simbolo = e il valore da assegnare a destra. Questa sintassi può ingannare, a prima vista, perché in matematica, tipicamente, si usa il simbolo = per indicare l'uguaglianza tra due entità. In programmazione, invece, il simbolo = è un operatore di assegnamento, che assegna il valore a destra alla variabile a sinistra.

Un'importante osservazione riguarda l'elemento valore. In realtà esso può essere un'espressione qualunque che restituisca un risultato. In C#, come in tutti i linguaggi di programmazione, il termine espressione indica una particolare istruzione che fornisce un risultato. Vedremo nel dettaglio le espressioni nelle prossime lezioni.

Infine, nella riga 3, abbiamo acceduto al valore contenuto nella variabile nome e lo abbiamo utilizzato per scrivere un messaggio a video. Per accedere o ottenere il valore contenuto in una variabile, basta usarne semplicemente il nome.

Ricapitolando:

Definizione

Dichiarazione di una Variabile in C#

La sintassi per dichiarare una variabile in C# è la seguente:

tipo_variabile nome_variabile;

Dove tipo_variabile è il tipo della variabile e nome_variabile è il nome della variabile.

Definizione

Assegnamento di un Valore ad una Variabile in C#

La sintassi per assegnare un valore ad una variabile in C# è la seguente:

nome_variabile = espressione;

Dove nome_variabile è il nome della variabile e espressione è un'espressione che restituisce un valore.

Definizione

Accesso al Valore di una Variabile in C#

Per accedere al valore contenuto in una variabile, basta usare il nome della variabile.

Osservazioni

Vediamo alcune osservazioni importanti sull'utilizzo delle variabili.

Nota

Dichiarazione e Utilizzo di Variabili

Una variabile può essere dichiarata in qualsiasi punto di un programma C#, ma deve essere dichiarata prima di essere utilizzata.

Ad esempio, il seguente codice è perfettamente valido:

/* CODICE VALIDO */
string nome;
nome = "Mario";
Console.WriteLine("Ciao, " + nome + "!");

Mentre il seguente codice genererà un errore di compilazione:

/* ERRORE */
Console.WriteLine("Ciao, " + nome + "!");
string nome;
nome = "Mario";
Nota

Prima di Accedere ad una Variabile, bisogna assicurarsi che sia inizializzata

Una variabile deve essere inizializzata prima di essere utilizzata. Se si tenta di accedere ad una variabile non inizializzata, il compilatore genererà un errore.

Ad esempio, il seguente codice genererà un errore di compilazione:

/* ERRORE */
string nome;
Console.WriteLine("Ciao, " + nome + "!");

In tal caso il compilatore C# genererà il seguente errore:

error CS0165: Use of unassigned local variable 'nome'

Per evitare questi problemi si può combinare la dichiarazione e l'assegnamento in un'unica istruzione.

Definizione

Dichiarazione e Inizializzazione di una Variabile in C#

Una variabile può essere dichiarata e inizializzata in un'unica istruzione. La sintassi è la seguente:

tipo_variabile nome_variabile = espressione;

Dove tipo_variabile è il tipo della variabile, nome_variabile è il nome della variabile e espressione è un'espressione che restituisce un valore.

Ad esempio, il seguente codice è perfettamente valido:

string nome = "Mario";
Console.WriteLine("Ciao, " + nome + "!");
Definizione

La lettura di una Variabile non ne modifica il Contenuto

Quando si legge il contenuto di una variabile, il suo valore non viene modificato. In altre parole, leggere il contenuto di una variabile non ha effetti collaterali.

Ad esempio:

string nome = "Mario";
Console.WriteLine("Ciao, " + nome + "!");
Console.WriteLine("Ciao, " + nome + " una seconda volta!");

In questo caso, il valore della variabile nome non viene modificato tra la prima e la seconda chiamata a Console.WriteLine(). L'output del programma sarà:

Ciao, Mario!
Ciao, Mario una seconda volta!
Consiglio

Posizione delle dichiarazioni di variabili

Abbiamo detto che le dichiarazioni di variabili possono essere fatte in qualsiasi punto di un programma C#. Prendiamo, ad esempio, il codice che segue:

string nome;

Console.WriteLine("Come ti chiami?");
nome = Console.ReadLine();

string citta;

Console.WriteLine("In che citta vivi?");
citta = Console.ReadLine();

Console.WriteLine("Ciao, " + nome + " da " + citta + "!");

In questo caso abbiamo dichiarato due variabili nome e citta in due punti diversi del programma. Questo è perfettamente valido e corretto.

Tuttavia, per una questione di chiarezza e leggibilità del codice, si tende a raggruppare le dichiarazioni di variabili all'inizio di un blocco di codice. Questo rende più facile capire quali variabili sono utilizzate in un certo punto del programma. Per cui, il nostro consiglio, è quello di riscrivere il codice di sopra in questo modo:

string nome;
string citta;

Console.WriteLine("Come ti chiami?");
nome = Console.ReadLine();

Console.WriteLine("In che citta vivi?");
citta = Console.ReadLine();

Console.WriteLine("Ciao, " + nome + " da " + citta + "!");

Nomi delle Variabili

Tipicamente, il nome di una variabile è lasciato alla libertà e alla discrezione del programmatore. Siamo liberi di chiamare una variabile nel modo che preferiamo.

Il linguaggio C#, tuttavia, impone delle regole da rispettare per la scelta dei nomi delle variabili. Queste regole sono le seguenti:

  1. Il nome di una variabile deve iniziare con una lettera o con il carattere _ (underscore):

    I seguenti nomi di variabili sono corretti:

    _numero
    nome
    Punteggio
    Saldo_Iniziale
    Numero2
    

    Da notare che i nomi di variabili possono contenere numeri ma non possono iniziare con un numero.

  2. Il nome di una variabile può contenere lettere, numeri e il carattere _, ma non possono contenere altri tipi di caratteri:

    I seguenti nomi di variabili non sono corretti:

    Nome Variabile
    Punteggio!
    Saldo-Iniziale
    2Numero
    
  3. I nomi delle variabili sono case-sensitive:

    Questo significa che il nome di una variabile nome è diverso dal nome Nome o NOME.

  4. I nomi delle variabili non possono essere uguali a parole riservate del linguaggio C#:

    Il linguaggio C# ha delle parole riservate, ossia delle parole che hanno un significato speciale per il compilatore. Queste parole non possono essere utilizzate come nomi di variabili. Alcuni esempi di parole riservate in C# sono:

    int
    string
    class
    public
    private
    

    Se si tenta di utilizzare una parola riservata come nome di variabile, il compilatore genererà un errore.

  5. I nomi delle variabili in C# possono contenere caratteri Unicode:

    Questo significa che è possibile utilizzare caratteri non ASCII nei nomi delle variabili. Ad esempio, è possibile utilizzare caratteri accentati o caratteri di altre lingue.

    Le seguenti righe di codice sono perfettamente valide:

    string città = "Roma";
    int ângulo = 90;
    

    Il nostro consiglio, tuttavia, è quello di evitare nomi scritti in questo modo, dal momento che caratteri non ascii presenti su alcune tastiere potrebbero essere non presenti su altre tastiere. Inoltre, potrebbero creare problemi di leggibilità del codice.

Suggerimenti sui nomi delle variabili

La scelta del nome di una variabile è un aspetto importante della programmazione. Un buon nome di variabile deve essere descrittivo e significativo. Deve permettere di capire, a colpo d'occhio, il contenuto della variabile e il suo scopo.

Per questo motivo, abbiamo riportato di seguito una serie di consigli per la scelta dei nomi delle variabili:

  • Scegliere nomi significativi: il nome di una variabile deve riflettere il suo contenuto e il suo scopo. Ad esempio, se una variabile contiene il nome di una persona, possiamo chiamarla nomePersona o nomeUtente. Se una variabile contiene il prezzo di un prodotto, possiamo chiamarla prezzoProdotto.

  • Evitare abbreviazioni oscure: è meglio evitare di utilizzare abbreviazioni oscure o poco chiare nei nomi delle variabili. Ad esempio, è preferibile utilizzare numeroElementi anziché numEl. Del resto, non vi sono limitazioni sulla lunghezza dei nomi delle variabili. Per cui, è meglio spendere qualche battitura in più per rendere il codice più chiaro e leggibile.

  • Evitare nomi generici: è preferibile evitare nomi generici o poco significativi per le variabili. Ad esempio, è meglio evitare nomi come temp, dato, elemento. Questi nomi non forniscono alcuna informazione sul contenuto della variabile e possono rendere il codice difficile da comprendere.

  • Rendere chiaro il confine tra le parole. Se il nome di una variabile è un nome composto, è consigliabile utilizzare una convenzione per separare le parole. Ad esempio, supponiamo di voler creare una variabile che contiene il numero di studenti di una classe che hanno ricevuto il voto più alto. Possiamo chiamare questa variabile usando varie notazioni:

    • numeroStudentiVotoMigliore, utilizzando la notazione CamelCase, ossia scrivendo la prima lettera di ogni parola in maiuscolo tranne la prima.

    • numero_studenti_voto_migliore, utilizzando la notazione SnakeCase, ossia separando le parole con il carattere _.

    L'importante è scegliere una convenzione ed essere consistenti nell'utilizzarla.

In Sintesi

In questa lezione introduttiva sulle variabili in linguaggio C# abbiamo studiato dei concetti fondamentali:

  • Una variabile è un'etichetta che si assegna ad una locazione di memoria RAM per memorizzare un dato.
  • Una variabile è composta da tre elementi: nome, tipo e valore.
  • Il tipo di una variabile rappresenta il formato del dato che essa può contenere e le operazioni che si possono effettuare su di essa.
  • Per lavorare con una variabile è necessario dichiararla, assegnarle un valore e accedere al valore contenuto.

Abbiamo visto come dichiarare, assegnare e accedere al valore di una variabile in C#. Abbiamo anche discusso delle regole per la scelta dei nomi delle variabili e fornito alcuni suggerimenti per la scelta di nomi significativi e descrittivi.

Adesso che conosciamo la sintassi di base per lavorare con le variabili a partire dalla prossima lezione studieremo i principali tipi base di C# e come utilizzarli per memorizzare dati di diverso tipo.

Nella prossima lezione partiremo dai Tipi Numerici Interi utilizzati per memorizzare numeri interi.