Inizializzazione delle variabili in Fortran

L'inizializzazione delle variabili in Fortran è un passaggio fondamentale per garantire il corretto funzionamento dei programmi.

Le variabili non inizializzate possono contenere valori imprevedibili, causando comportamenti inaspettati o errori di runtime.

Per evitare questi problemi, esistono tre tecniche principali per assegnare valori iniziali alle variabili: l'uso di istruzioni di assegnazione, l'inizializzazione con READ e la definizione diretta del valore nella dichiarazione del tipo.

In questa lezione analizziamo ciascun metodo con esempi pratici e buone pratiche per scrivere codice più sicuro ed efficiente.

Inizializzazione delle Variabili

Consideriamo il seguente programma:

PROGRAM init
    INTEGER :: i
    WRITE (*,*) i
END PROGRAM init

Qual è il valore memorizzato nella variabile i? Cosa verrà stampato dall'istruzione WRITE?

La risposta è: Non possiamo saperlo.

La variabile i, infatti, è un esempio di variabile non inizializzata. È stata dichiarata con l'istruzione INTEGER :: i, ma non le è stato assegnato alcun valore.

Il valore di una variabile non inizializzata non è definito dallo standard Fortran. Alcuni compilatori impostano automaticamente le variabili non inizializzate a zero, altri assegnano valori arbitrari.

Nelle versioni più vecchie di Fortran, il compilatore poteva lasciare il valore già presente nella memoria in cui la variabile è stata allocata. Alcuni compilatori generano persino un errore di esecuzione se una variabile viene utilizzata senza essere inizializzata.

Le variabili non inizializzate possono causare problemi seri, perché il loro comportamento varia tra diverse macchine. Un programma che funziona correttamente su un computer può fallire su un altro, oppure potrebbe funzionare in modo imprevedibile a seconda dei dati rimasti in memoria da esecuzioni precedenti.

Questa situazione è inaccettabile, e per evitarla dobbiamo sempre inizializzare le variabili nei nostri programmi.

Consiglio

Inizializzare sempre le variabili di un programma

Una buona prassi di programmazione in Fortran è quella di inizializzare sempre le variabili del programma.

Vediamo, ora, quali sono i metodi che possiamo usare per inizializzare le variabili

Metodi di Inizializzazione delle Variabili

Esistono tre tecniche principali per inizializzare le variabili in un programma Fortran:

  1. Istruzioni di assegnazione
  2. Istruzioni READ
  3. Inizializzazione nella dichiarazione del tipo

Inizializzazione con un'istruzione di assegnazione

Un'istruzione di assegnazione attribuisce un valore a una variabile utilizzando il simbolo =.
Ad esempio, nel codice seguente la variabile i viene inizializzata a 1, quindi sappiamo con certezza che l'istruzione WRITE stamperà 1.

PROGRAM init_1
    INTEGER :: i
    i = 1
    WRITE (*,*) i
END PROGRAM init_1

Inizializzazione con READ

Un'istruzione READ può essere utilizzata per assegnare valori a una variabile in fase di esecuzione, permettendo all'utente di inserire il valore manualmente.

A differenza dell'assegnazione diretta, questa tecnica permette di modificare il valore della variabile ogni volta che il programma viene eseguito.

PROGRAM init_2
    INTEGER :: i
    READ (*,*) i
    WRITE (*,*) i
END PROGRAM init_2

Inizializzazione nella Dichiarazione del Tipo

Fortran permette di specificare il valore iniziale di una variabile direttamente nella sua dichiarazione.

Questa tecnica carica un valore nella variabile durante la compilazione, garantendo che la variabile abbia un valore definito prima dell'esecuzione del programma.

La sintassi è la seguente:

type :: var1 = valore, [var2 = valore, ...]

Si possono inizializzare più variabili in una singola istruzione separandole con virgole:

REAL :: time = 0.0, distance = 5128.
INTEGER :: loop = 10

In questo caso:

  • time viene inizializzato a 0.0
  • distance viene inizializzato a 5128.
  • loop viene inizializzato a 10

Nel seguente codice, la variabile i viene inizializzata direttamente nella dichiarazione, quindi all'avvio del programma avrà il valore 1, che verrà stampato dall'istruzione WRITE:

PROGRAM init_3
    INTEGER :: i = 1
    WRITE (*,*) i
END PROGRAM init_3

In Sintesi

In questa lezione abbiamo studiato che:

  • Le variabili non inizializzate possono contenere valori imprevedibili, portando a errori di runtime o comportamenti anomali.
  • Fortran non assegna automaticamente un valore alle variabili, e il comportamento delle variabili non inizializzate dipende dal compilatore.
  • Esistono tre modi per inizializzare una variabile:
  • Assegnazione diretta con il simbolo = per impostare un valore iniziale.
  • Istruzione READ (*,*) per permettere all'utente di inserire il valore in fase di esecuzione.
  • Inizializzazione nella dichiarazione del tipo per pre-caricare un valore già alla compilazione.
  • Dichiarare un valore iniziale direttamente nella dichiarazione della variabile garantisce che essa sia sempre definita prima dell'esecuzione del programma.
  • È buona pratica inizializzare sempre le variabili per evitare problemi legati all'allocazione di memoria e garantire il corretto funzionamento del codice.