Funzioni utente

Vedi la discussione.

Un programma può diventare molto lungo e complesso (si perde il controllo…)

istruzione_1 
istruzione_2 
istruzione_3 
... 
istruzione_100 
... 
istruzione_1000 
...

Per migliorare la leggibilità si aggiungono linee vuote e commenti

#-------------- Attività A (n1 istruzioni)
istruzione_a_1 
istruzione_a_2 
... 
istruzione_a_n1 

#-------------- Attività B (n2 istruzioni)
istruzione_b_1 
istruzione_b_2 
... 
istruzione_b_n2 

#-------------- Attività C (n3 istruzioni)
istruzione_c_1 
istruzione_c_2 
... 
istruzione_c_n3

Un blocco di codice diventa una funzione se

  1. è troppo lungo, più di 20/30 righe
    • non riesco più a immaginare come funziona
    • devo scorrere continuamente le schermate
  2. si ripete più volte nello stesso progetto
    • riscrivendo il codice potrei commettere errori
    • il codice finale sarà molto più corto se non ci sono ripetizioni
  3. voglio utilizzarlo in un altro progetto
    • faccio copia e incolla della funzione
  4. voglio condividerlo con altre persone
    • passo la funzione chiavi in mano, garantita funzionante

inoltre

  1. il codice è più leggibile, comprensibile, modificabile
  2. si può fare più facilmente testing and debugging (meglio controllare 10 righe che 1000)
  3. non dovrò più controllarlo in futuro (diventa un pezzo dei LEGO)
def attività_a(): 
    istruzione_a_1 
    istruzione_a_1 
    ... 
    istruzione_a_n1

def attività_b(): 
    istruzione_b_1 
    istruzione_b_2 
    ... 
    istruzione_b_n2
 
def attività_c():
    istruzione_c_1 
    istruzione_c_2 
    ... 
    istruzione_c_n3

Per passare il controllo a una funzione è necessario chiamarla.
Dopo l’esecuzione dell’ultima istruzione all’interno della funzione il controllo ritorna alla prima istruzione successiva alla chiamata.

#---------------------- FUNZIONI
def attività_a(): 
    istruzione_a_1 
    istruzione_a_2 
    ... 
    istruzione_a_n1

def attività_b(): 
    istruzione_b_1 
    istruzione_b_2 
    ... 
    istruzione_b_n2 

def attività_c():
    istruzione_c_1 
    istruzione_c_2 
    ... 
    istruzione_c_n3

#---------------------- MAIN
...
attività_a() 
...
attività_b() 
...
attività_c()
...

Il blocco principale non ha l’esclusiva di fare le chiamate, ogni funzione può chiamare qualsiasi funzione

#---------------------- FUNZIONI
def attività_a(): 
    ...

def attività_b(): 
    ... 
    attività_a()
    ...

def attività_c(): 
    ...

#---------------------- MAIN
...
attività_a()
...
attività_b()
...
attività_c()
...

Il main chiama la funzione b() che chiama a sua volta la funzione a()