[Pycon] La sintassi di Python: l'indentazione

info a pycon.it info a pycon.it
Ven 24 Nov 2017 18:33:11 CET


La community di Python e sempre al lavoro e non dorme mai. Diamo il via ad una
serie di talk tecnici di approfondimento, in vista dell'evento italiano che
lascera tutti a bocca aperta.

Mi chiamo Daniele, vivo a Santarcangelo di Romagna, patria di poeti e
sognatori. Da anni sono diventato un sincero amico di Python ed alcuni dei sui
derivati come il framework web Django, ma non dimentico il mio passato e
quindi non potrei non citare C++ e PHP tra le mie tappe evolutive. Sono
attualmente mantainer del sito italiano del linguaggio, la risorsa Python.it,
moderatore del blog/forum ed il revisore della traduzione in italiano di
Django. Ho collaborato, inoltre, alla traduzione di un IDE esclusivamente
Python, non conosciutissimo in Italia, come Ninja-IDE.

Quando ci si avvicina per la prima volta ad un linguaggio di programmazione
ancor prima di pensare a flussi, condizioni, costrutti, moduli e/o concetti
avanzati, ci si ritrova davanti al primo scoglio da affrontare rappresentato
dalla sintassi del linguaggio. Una delle paure che attanaglia il programmatore
in erba e proprio quella di non ricordarsi esattamente quello che il
linguaggio pretende di sapere da lui e, purtroppo per noi, senza grosse
deroghe.

Pero avete la fortuna di avere il vostro amico Python al vostro fianco e la
sua sintassi leggera ed intuitiva vi fara entrare subito nel mondo della
programmazione con pochi sforzi mnemonici.

    
    
    
        PHP
        echo "Hello World";
    
        Python 2.x
        print "Hello World"
    
        Python 3.x
        print ("Hello world")
    
    

Tralasciando per un attimo il "veicolo" che permette la stampa di questo
semplice messaggio, come vedete sono poche le differenze tra il nostro amico e
il diffusissimo linguaggio di programmazione web (che presto abbandonerete,
sappiatelo). Abbiamo fatto un classico Hello World e non ci ha dato delle
grandi soddisfazioni, perche non si intuisce una delle meraviglie di Python:
l'indentazione, che pero potrebbe disorientare i neofiti.

Essendo parte del linguaggio, l'indentazione ci aiutera a scrivere codice
pulito e ordinato, ma non dovete credermi sulla fiducia, vi faccio dei facili
esempi per capire di cosa sto parlando:

`

    
    
     PHP
        [...]
        if ($variabile == "Qualcosa") {
        $altra_variabile = "Altra cosa";
        $stupida_variabile = "Stupida cosa";
        [...]
        } else {
        $altra_variabile = "Qualcosa di default";
        }
    
        Python 2.x e 3.x
        [...]
        if variabile == "Qualcosa":
            altra_variabile = "Altra cosa"
            stupida_variabile = "Stupida cosa
            [...]
        else:
            altra_variabile = "Qualcosa di default"

`

Grida di giubilo e manifestazioni collettive in piazza ed un solo urlo si alza
al cielo: "La sintassi di Python e bellissima...". Chi ha detto no? Scusate
quel rubysta in fondo alla stanza puo smettere di dar fastidio per cortesia?
Ma analizziamo i due piccoli script e vediamo se vi convinco...

Come notate, ci sono delle notevoli differenze principalmente dovute al
posizionamento delle varie righe. Se per inciso modificassimo lo script in PHP
in questo modo:

`

    
    
      [...]
        if ($variabile == "Qualcosa") {
                $altra_variabile = "Altra cosa";
                      $stupida_variabile = "Stupida cosa";
                    [...]} else {
            $altra_variabile = "Qualcosa di default";
                                                                       } 
    

`

...questo funzionerebbe ugualmente. Ma non su Python, perche se producete un
codice come il sottostante, attirerete l'ira funesta su di voi e verra
restituito un errore:

`

    
    
     [...]
        if variabile == "Qualcosa":
            altra_variabile = "Altra cosa"
           stupida_variabile = "Stupida cosa
          ^^^
          [...]
        else:
        altra_variabile = "Qualcosa di default"
        ^^^

`

Bene penserete, quella del PHP e flessibilita... NO E' MALE.

Quando scriverete applicazioni complesse di centinaia di migliaia di milioni
di righe, ringrazierete di farlo con Python, perche vi obblighera ad essere
scrupolosi ed attenti, ed un buon programmatore deve esserlo (pausa scenica
guardando il rubysta a fondo sala).

Non sottovalutate il fatto che il vostro codice potra in futuro essere
utilizzato anche da altri programmatori. Trovandosi di fronte all'uniformita
nel metodo di scrittura, questi saranno in grado di essere subito produttivi
senza dover perdere tempo ad insultare tutta la vostra famiglia fino alla
terza generazione solo perche il martedi indentate ed il giovedi no.

Piccola digressione normativa. Se vi state chiedendo se il formato
dell'indentazione sia a libera interpretazione, sappiate che la risposta e si
perche potete usare quello che vi e piu comodo (4 spazi, 1 tab, 8 spazi,
etc...), basta che nello stesso file siano uguali (Python 3 non accetta
nemmeno l'alternanza tra tab e spazi). Se poi volete vincere il premio del
programmatore del mese, sappiate che la PEP8
(https://www.python.org/dev/peps/pep-0008) suggerisce l'utilizzo di quattro
spazi.

Ma torniamo per un attimo ai due script dove notiamo che in Python siamo
liberi da ogni orpello sintattico. Niente "( )" e "{ }" per definire il ciclo,
niente " ; " a fine riga (pena la decapitazione se dimenticati), insomma nulla
se non l'indentazione ed il " : " dopo l'invocazione del ciclo.

Sia chiaro, non e un confronto ne tantomeno un attacco a PHP, e solo un
esempio e lo avrei potuto fare con altri mille linguaggi. Quello che deve
restarvi e l'estrema pulizia con la quale Python permette di scrivere e
"manutenzionare" il proprio codice.

Questo e il primo approccio di una lunga serie al nostro linguaggio,
prossimamente parleremo dei tipi di dati, dei cicli e delle funzioni vitali
Built-in.

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/pycon/attachments/20171124/5b0875ad/attachment.html>


Maggiori informazioni sulla lista Pycon