05 marzo 2014

LA SINTASSI DI PYTHON: L'indentazione

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 rubista 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 rubista 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 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.

Tondo è bello...

Tondo è bello...