sabato 23 dicembre 2023

CORSO STRUTTURA DI UN LINGUAGGIO DI PROGRAMMAZIONE: Lezione 3 Organizzazione del codice

3: Organizzazione del codice

3.1 Scoping

Lo scoping si riferisce alla visibilità e alla durata di vita di variabili e funzioni all'interno di un programma. Definisce il contesto in cui le variabili e le funzioni possono essere accedute o modificate all'interno di un codice.


Tipi di Scoping

Scoping Globale: Le variabili definite al di fuori di tutte le funzioni sono considerate variabili globali e sono accessibili da qualsiasi parte del programma. Queste variabili sono visibili in tutto il programma, ma è importante usarle con cautela poiché possono essere modificate da qualsiasi parte del codice e possono causare effetti collaterali indesiderati.


python

Copy code

variabile_globale = 10


def funzione():

    print(variabile_globale)  # Accesso alla variabile globale


funzione()  # Output: 10


Scoping Locale: Le variabili definite all'interno di una funzione sono considerate variabili locali e hanno una visibilità limitata al corpo della funzione in cui sono state definite. Queste variabili esistono solo all'interno della funzione e non possono essere accedute dall'esterno.


python

Copy code

def funzione():

    variabile_locale = 5  # Variabile locale

    print(variabile_locale)


funzione()  # Output: 5

print(variabile_locale)  # Errore: variabile_locale non definita globalmente


Scoping non-locale (Enclosing): In alcuni linguaggi di programmazione come Python, è possibile avere funzioni annidate. Le variabili all'interno di una funzione annidata possono essere considerate non-locali se non sono né globali né locali. In Python, si può utilizzare la parola chiave nonlocal per accedere e modificare le variabili non locali.

python

Copy code

def esterna():

    variabile_non_locale = 15


    def interna():

        nonlocal variabile_non_locale

        variabile_non_locale += 5

        print(variabile_non_locale)


    interna()  # Output: 20


esterna()


Visibilità delle Funzioni

Le funzioni seguono regole simili per quanto riguarda la visibilità. Possono essere definite globalmente o all'interno di altre funzioni e la loro visibilità segue le stesse regole di scoping delle variabili.


python

Copy code

def esterna():

    print("Funzione esterna")


    def interna():

        print("Funzione interna")


    interna()  # Output: Funzione interna


esterna()  # Output: Funzione esterna

interna()  # Errore: la funzione interna non è definita globalmente


Una comprensione chiara dello scoping è fondamentale per evitare errori, garantire l'uso corretto delle variabili e delle funzioni, e scrivere codice che sia chiaro e manutenibile. È importante considerare attentamente l'ambito di variabili e funzioni quando si sviluppa un programma per evitare problemi di conflitto di nomi e comportamenti inaspettati delle variabili.

3.2 Convenzioni di formattazione

Importanza dell'indentazione, allineamento, spazi bianchi e commenti.


Convenzioni di formattazione:

Le convenzioni di formattazione, come l'indentazione, l'allineamento, l'uso di parentesi graffe, spazi bianchi, ecc., influenzano la leggibilità del codice ma non sono strettamente parte della sintassi del linguaggio.

Le convenzioni di formattazione sono regole e pratiche che determinano la struttura visiva del codice sorgente. Queste convenzioni non sono strettamente parte della sintassi del linguaggio, ma hanno un impatto significativo sulla leggibilità e sulla comprensione del codice da parte degli sviluppatori.


Ecco alcune convenzioni di formattazione comuni:

Indentazione:

Spazi bianchi e Tabulazioni:

L'indentazione viene utilizzata per mostrare la struttura e l'annidamento del codice.

La scelta tra l'uso di spazi o di tabulazioni per l'indentazione può variare da una comunità di sviluppo all'altra.

Allineamento:

Allineamento degli elementi:

L'allineamento viene utilizzato per migliorare la leggibilità allineando gli elementi del codice in colonne verticali, come ad esempio l'allineamento dei segni di uguale o dei punti e virgola.

Uso delle parentesi graffe:

Stile di formattazione delle parentesi graffe:

Le parentesi graffe vengono utilizzate per delimitare blocchi di codice, e lo stile preferito per la posizione delle parentesi può variare tra le comunità di sviluppatori.

Stili comuni includono stili K&R, Allman, GNU, ecc.

Spazi bianchi e vuoti:

Spazi tra le parole chiave, operatori e parentesi:

L'uso di spazi bianchi può migliorare la leggibilità aggiungendo spazi tra le parole chiave, operatori e parentesi.

Ad esempio, if (condizione) è più leggibile di if(condizione).

Lunghezza delle righe:

Limitazione della lunghezza delle righe:

Limitare la lunghezza delle righe del codice per migliorare la leggibilità, specialmente quando il codice deve essere visualizzato su schermi di dimensioni limitate.

Commenti e documentazione:

Stile dei commenti:

Un uso coerente e significativo dei commenti per spiegare parti complesse del codice, annotazioni o documentazione.


Esempio di convenzioni di formattazione in Python:

python

Copy code

def funzione_esempio(arg1, arg2):

    if arg1 == 0:

        print("Arg1 è zero")

    else:

        risultato = arg1 + arg2

        return risultato

# Questo è un commento esplicativo sopra la funzione


Importanza delle convenzioni di formattazione:

Le convenzioni di formattazione possono sembrare solo aspetti visivi, ma hanno un impatto significativo sulla leggibilità e sulla manutenibilità del codice. Utilizzare convenzioni di formattazione coerenti e chiare consente agli sviluppatori di comprendere più facilmente il codice, facilita la collaborazione all'interno del team e promuove uno standard di codifica uniforme all'interno di un progetto o di una comunità di sviluppo.

Una sintassi ben definita rende più agevole la comprensione e la scrittura del codice, oltre a garantire la correttezza sintattica del programma. L'assenza di conformità alla sintassi del linguaggio può causare errori durante la compilazione o l'esecuzione del codice. Pertanto, è essenziale comprendere la sintassi di un linguaggio per scrivere codice corretto e funzionale.


Nessun commento:

Posta un commento