Sottoprogrammi

Un programma può diventare molto lungo…

Per migliorare la leggibilità si può
  • ricorrere a delle linee vuote o di commento
  • dare dei nomi a a parti di codice riconoscibili
  • separare questi blocchi dal flusso principale
  • scrivere una sola volta parti di codice che si ripetono

sub0Se a questi blocchi di codice si da un nome e si separano dal programma principale, scrivendoli prima, diventano dei sottoprogrammi

Per passare il controllo al sottoprogramma è necessario chiamarlo.

Il controllo ritorna al chiamante quando si giunge all’etichetta di fine del sottoprogramma End.

Il blocco principale non ha l’esclusiva di fare le chiamate, anzi ogni sottoprogramma può chiamare tutti gli altri sottoprogrammi.

sub1Parametri per valore

All’atto della chiamata di un sottoprogramma è possibile specificare dei parametri

Prima dell’esecuzione del codice del sottoprogramma P1 avviene un passaggio, assegnazione, del valore di a in x e del valore di b in y.

Il sottoprogramma P1 svolgerà l’operazione per la quale è stato progettato in modo parametrico, cioè in funzione dei valori assunti dai parametri formali (x, y, …) specificati dal chiamante tramite i parametri attuali (a, b, …)

Note

  1. l’elenco dei parametri attuali deve corrispondere in numero e tipo all’elenco dei parametri formali
  2. ogni parametro formale viene dichiarato e si comporta come una variabile locale inizializzata al valore specificato con il parametro attuale all’atto della chiamata
  3. i parametri attuali devono essere valori, quindi possono essere costanti (-1, +5.0), variabili (a, b), espressioni (-a, b+5.0), …
  4. al termine dell’esecuzione del sottoprogramma le eventuali modifiche dei valori dei parametri formali scompariranno per sempre…

sub2Parametri per variabile

Piuttosto che passare dei valori si può scegliere di passare delle variabili (indirizzi, reference, …).

Il sottoprogramma P2 svolgerà l’operazione per la quale è stato progettato utilizzando a, il parametro attuale, ogni volta che nel suo codice compare x, il parametro formale.
Analogamente per l’uso di b piuttosto che di y.

Si dice che x e y sono solo reference, riferimenti, per a e b

Note

  1. gli effetti dell’esecuzione del sottoprogramma P2 si manifestano nei valori contenuti nelle variabili utilizzate come parametri attuali all’atto della chiamata
  2. i parametri attuali devono essere variabili

sub3Parametri misti

Le due modalità di passaggio dei parametri (per valore, per riferimento) possono essere utilizzate contemporaneamente

Alla fine dell’esecuzione del sottoprogramma P3 il valore di a, nel chiamante dipenderà dalle operazioni che sono state eseguite su x in P3.

sub5Funzioni

Quando il sottoprogramma F termina restituisce un risultato che occuperà logicamente lo spazio di codice della chiamata

Il chiamante riceverà da F (la funzione) un dato, risultato dell’elaborazione, e potrà utilizzarlo come argomento di altre elaborazioni

  • visualizzazione
  • assegnazione a una variabile
  • elaborazione all’interno di un’espressione
  • come parametro all’interno di un’altra chiamata

Note

  1. Si assegna letteralmente il risultato alla funzione.
  2. L’assegnazione potrebbe avvenire più volte, quindi l’ultima assegnazione determinerà il risultato effettivo.

Ricorsione

Se il linguaggio di programmazione prevede la ricorsione… un sottoprogramma PR può chiamare il sottoprogramma PR, se stesso, per svolgere lo stesso compito ma con un’stanza diversa

Il sottoprogramma PR chiama il sottoprogramma PR … finché non succede qualcosa (l’istanza diventa un caso particolare che non necessita di un’ulteriore chiamata ricorsiva) e si ritorna all’indietro fino alla prima chiamata…

Può essere una funzione FR

La ricorsione può essere anche indiretta: il sottoprogramma PR1 chiama il sottoprogramma PR2 che a sua volta … che a sua volta chiama PR1.

Conclusioni

Si può immaginare un sottoprogramma come uno strumento del quale non si conosce l’implementazione (scatola nera) ma si conoscono

  • il nome
  • la funzionalità che offre
  • l’elenco dei parametri formali (con la loro modalità di passaggio e il loro ruolo)
  • l’eventuale tipo del valore di ritorno
Notice: This work is licensed under a BY-NC-SA. Permalink: Sottoprogrammi

Comments are closed.