Sottoprogrammi: procedure e funzioni - 2


Una funzione è una subroutine che restituisce un risultato (numero, stringa di caratteri, ecc.)

Immagina di aver ordinato un prodotto da un negozio online. Dal punto di vista della programmazione, hai richiamato una determinata subroutine e, a differenza di una procedura, questa subroutine deve restituire un risultato: consegnare il prodotto che hai ordinato. Queste subroutine sono chiamate funzioni.
Una funzione è formattata più o meno allo stesso modo di una procedura:
funzione <nome funzione> (elenco di parametri come <nome variabile>:<il suo tipo> separati da punto e virgola): <tipo di valore restituito>;
inizio
    <corpo della funzione>
fine;

La differenza tra una funzione e una procedura è che una funzione deve restituire un valore. Per fare ciò, è necessario utilizzare il nome della funzione come variabile o la variabile speciale Risultato:
funzione Somma(a, b:intero): intero;
inizio
    Somma := a + b;
fine;
O
funzione Somma(a, b:intero): intero;
inizio
    Risultato := a + b;
fine;

Una funzione che restituisce la media aritmetica di due numeri interi sarebbe simile a questa:
funzione media(a, b: intero): reale;
inizio
  media := (a + b) / 2;
FINE;
Resta da capire come chiamare questa funzione nel programma principale:
Non dovresti chiamare una funzione nello stesso modo in cui chiami una procedura:
media(10, 5); 
Il valore restituito dalla funzione andrà perso. È come se la merce del negozio online non fosse data a nessuno, ma buttata via. È improbabile che piaccia al cliente.

È più corretto salvare il risultato in una variabile (o stamparlo sullo schermo):
a := media(10, 5);

o

writeln(average(10, 5));

Spesso i programmatori utilizzano funzioni booleane che restituiscono valori booleani: true o false (True o False)
Tali funzioni sono utili per   controlla alcune proprietà.
Considera due esempi di scrittura di una funzione logica che controlla l'uniformità di un numero
1)  Modo migliore:
risultato dell'espressione
n % 2 == 0
sarà vero (True) o falso (False)
Non c'è bisogno di scrivere un'istruzione condizionale!
2) Non farlo!
Puoi scriverlo così, ma risulterà essere un disco più lungo, quindi è meglio non farlo
bool isEven(int n)
{
    rendimento (n % 2 == 0);
}
bool isEven(int n)
{
    se (n % 2 == 0)
        restituisce vero;
    altro
        restituire Falso;
}

E l'ultima nota sull'utilizzo di funzioni e procedure: il numero di funzioni e procedure nel programma non è limitato. Inoltre, una subroutine può chiamare un'altra subroutine e persino se stessa.