Sottoprogrammi

In informatica un sottoprogramma è un blocco di istruzioni definito con un nome. Ogni volta che questa funzione deve essere eseguita basta indicare il nome ad esso associato. Gli elementi che caratterizzano una funzione sono:

  • la Chiamata
  • la Definizione

Chiamata

Il meccanismo della chiamata mette in comunicazione il main e la funzione.

int S;
int num1 = 1;
int num2 = 4;

void setup(){
}

void loop(){
   S = somma (num1, num2);
}

Definizione

Definire una funzione vuol dire esplicitare le istruzioni che la compongono, le sue caratteristiche e le variabili che usa:

tipo nome_sottoprogramma (arg1, arg2...){
   istruzioni

   return variabile;
}

Esistono 2 tipi di sottoprogrammi:
  • Funzioni
  • Procedure

Funzioni

Le funzioni sono sottoprogrammi aventi un tipo (int, float, string...) diverso da void. Esse ritornano, tramite l'istruzione return, un solo valore che verrà immagazzinato nella variabile associata alla chiamata della funzione.

int S;
int numero = 5;

void setup(){
}

void loop(){
   S = somma (2, numero);
}

int somma(int num1, int num2){
   int s;
   s = num1 + num2;

   return s;
}

Procedure

Le procedure, a differenza delle funzioni, sono sottoprogrammi non aventi un tipo e come tali la chiamata non sarà contenuta in nessuna variabile.

int numero = 4;

void setup(){
}

void loop(){
   diff (2, numero);
}

void diff(int num1, int num2){
   int d;
   d = num2 - num1;

   return;
}

Dato che il return nelle procedure non viene affiancato da nessuna variabile si può omettere. La domanda sorge spontanea: Come si fa a passare il contenuto di una variabile dalla procedura al programma chiamante? Le procedure permettono il "collegamento" tra uno o più argomenti e la loro rispettiva variabile presente nella programma chiamante, tramite due tipi di passaggio di parametri che vedremo subito dopo aver dato un'accurata spiegazione ai parametri.

Parametri

Nel caso in cui volessimo riutilizzare più volte una funzione, passandoli ogni volta valori diversi, è opportuno indicare gli argomenti, cioè farla dipendere da parametri. Essi si distinguono in:

  • Parametri attuali (indicati tra le parentesi nella chiamata del sottoprogramma)
  • Parametri formali (indicati tra le parentesi nella definzione del sottoprogramma)

int numero = 4;

void setup(){
}

void loop(){
   diff (2, numero);
}

void diff(int num1, int num2){
   int d;
   d = num2 - num1;

   return;
}

Numero, tipo e posizione devono coincidere tra parametri formali e attuali!

Passaggio di Parametri

Quando prendiamo in considerazione una variabile, bisogna stare attenti a distinguere l'indirizzo di memoria ad essa associata (il nome della variabile) e il suo contenuto. Arduino C, come moltissimi altri linguaggi di programmazione, ci viene in aiuto proponendoci due tipi di "passaggi":

  • Per valore
  • Per indirizzo

Passaggio per valore

Nel passaggio per valore il parametro si riferisce al contenuto della variabile e quindi qualsiasi modifica che verrà effettuata a essa, non avrà effetto sul parametro associato. Vediamo un esempio per capire meglio:

int numero = 4;

void setup(){
}

void loop(){
   prod (2, numero);
}

void prod(int num1, int num2){
   num2 = num1 * num2;  /*A seguito del prodotto, num2 e numero avranno valori diversi*/
}

Passaggio per indirizzo

Nel passaggio per indirizzio il parametro si riferisce al nome della variabile, al suo indirizzo. Quindi, al momento della chiamata verranno associati due nomi allo stesso spazio di memoria. Di conseguenza ogni modifica apportata al parametro formale verrà riportata anche al parametro attuale.

int numero = 4;

void setup(){
}

void loop(){
   prod (2, numero);
}

void prod(int num1, int &num2){
   num2 = num1 * num2;  /*A seguito del prodotto, num2 e numero avranno valori uguali*/
}

Ogni parametro formale è passato per indirizzo se il nome è proceduto dal simbolo & (Es: tipo &nome_var)



Quiz di Riepilogo

Most Read

Cos'è Arduino?

Arduino IDE

Setup() & Loop()

Funzioni, Variabili e Strutture

Related Posts

Gestire 4 Led

Catagories