Funzioni e sequenze consentono di separare compiti e gestire insiemi ordinati di dati.
Un programma più leggibile nasce dalla scomposizione: si individua un compito riconoscibile, se ne definiscono ingresso e risultato atteso, poi lo si affida a una funzione. Per esempio, una funzione che calcola la media riceve una sequenza numerica, somma gli elementi e divide per il numero degli elementi. Separare questo calcolo dalla visualizzazione dei risultati permette di riutilizzarlo e di provarlo indipendentemente. Una buona interfaccia chiarisce che cosa la funzione si aspetta e che cosa restituisce.
Una lista (o array, secondo il linguaggio) raccoglie più valori in un ordine. In Python gli indici iniziano da zero: in [12, 15, 18], l’elemento all’indice 1 vale 15. L’accesso oltre i limiti della sequenza provoca un errore; quindi una procedura che visita tutti gli elementi deve fermarsi prima della lunghezza. Le liste Python sono modificabili: append aggiunge alla fine, mentre pop rimuove e restituisce un elemento. Non ogni linguaggio ha le stesse regole o lo stesso tipo di contenitore.
La modularità consiste nel dividere il programma in componenti con responsabilità circoscritte e collegamenti espliciti. Un modulo che calcola non dovrebbe anche occuparsi dell’interfaccia utente, se non è necessario: componenti indipendenti sono più facili da comprendere e testare. Come esempio didattico originale, la funzione media(voti) può restituire la somma divisa per len(voti), ma deve definire che cosa fare con lista vuota, valori non numerici e arrotondamento. Qui scegliamo di rifiutare la lista vuota, invece di inventare una media pari a zero.
Il ragionamento di test segue il contratto: per [6, 8] la media attesa è 7; per un singolo valore [9] è 9. Casi ai confini come sequenza vuota o dati inattesi aiutano a verificare assunzioni. Il risultato di una funzione non è corretto solo perché il programma compila: va confrontato con l’esito previsto. I test degli esempi verificano questo comportamento per quei casi soltanto, non dimostrano che ogni possibile input sia gestito correttamente.
- Una funzione separa un compito e rende espliciti parametri e risultato.
- Una lista conserva un ordine e gli indici Python partono da zero.
- La modularità facilita riuso e test, se i confini dei componenti sono chiari.
Metti alla prova quello che hai letto
Con a=[12,15,18] in Python, quale valore ha a[1]?
- 12
- 15
- 18
- Errore: gli indici partono da uno
Soluzione e spiegazione
18. Gli indici partono da zero: a[0] è 12 e a[1] è 15.
Fonti
- 4.2 Building C Programs — OpenStax
- 5. Data Structures — More on Lists — Python Software Foundation
Nota editoriale
Confronto assistito documentato; revisione docente necessaria