PyCon Nove

firenze

19-22 aprile 2018

La sintassi di Python: l'indentazione

La community di Python è sempre al lavoro e non dorme mai. Diamo il via ad una serie di talk tecnici di approfondimento, in vista dell'evento italiano che lascerà 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 è proprio quella di non ricordarsi esattamente quello che il linguaggio pretende di sapere da lui e, purtroppo per noi, senza grosse deroghe.

Però avete la fortuna di avere il vostro amico Python al vostro fianco e la sua sintassi leggera ed intuitiva vi farà 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, perché non si intuisce una delle meraviglie di Python: l'indentazione, che però potrebbe disorientare i neofiti.

Essendo parte del linguaggio, l'indentazione ci aiuterà 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 è bellissima...". Chi ha detto no? Scusate quel rubysta in fondo alla stanza può 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, perché se producete un codice come il sottostante, attirerete l'ira funesta su di voi e verrà 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 è flessibilità... NO E' MALE.

Quando scriverete applicazioni complesse di centinaia di migliaia di milioni di righe, ringrazierete di farlo con Python, perché vi obbligherà 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 potrà in futuro essere utilizzato anche da altri programmatori. Trovandosi di fronte all'uniformità 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 perché il martedì indentate ed il giovedì no.

Piccola digressione normativa. Se vi state chiedendo se il formato dell'indentazione sia a libera interpretazione, sappiate che la risposta è sì perché potete usare quello che vi è più 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 è un confronto né tantomeno un attacco a PHP, è solo un esempio e lo avrei potuto fare con altri mille linguaggi. Quello che deve restarvi è l'estrema pulizia con la quale Python permette di scrivere e "manutenzionare" il proprio codice.

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


— Mena, 04 febbraio 2015  python

0 Commenti

Archivio