venerdì 3 febbraio 2017

Python

Mi sono avvicinato al Python qualche tempo fa quando mia figlia, iscritta ad un corso di Laurea in Matematica, doveva preparare un lavoro per l'esame di programmazione.

Nota: questo è un post introduttivo all'argomento Python, dove voglio solo condividere il mio (iniziale) giudizio su questo linguaggio, seguiranno altri post relativi a problemi risolti con lo stesso.

Subito mi sono detto: "bello 'sto linguaggio": facile installazione, stile molto simile al linguaggio C, disponibile su diverse piattaforme (Windows, Linux, mac), open-source, programmazione orientata a oggetti e per ultimo.... i Monty Python, a suo tempo, piacevano molto anche a me!

Dopo averlo conosciuto un po' meglio però mi sono ritrovato a dire "che M<bip>A di linguaggio!!!"....cioè volevo dire "che CIOFECA di linguaggio!!!".

Questi alcuni dei motivi:

Scrittura posizionale:


La scrittura del sorgente è posizionale, nel senso che per chiudere i costrutti tipo "if", "for", "while", etc. si deve identare il sorgente:


tutto quello che è allineato sotto viene eseguito, quello che sta fuori è anche fuori dal blocco di esecuzione.

Quando ho realizzato questa cosa mi è sembrato di tornare all'età della pietra! e lo dice uno che è "maniaco" della scrittura pulita e identata in modo che il codice risulti leggibile, ma davvero mi sembra anacronistico.

Per esempio capita di dover riutilizzare una parte di codice, che magari sta scritto all'interno di una if-else molto articolata, per copiarla in un'altro punto di programma ma, con python, devo controllare per bene che non cambi la logica per una spaziatura differente!

Compatibilità versioni:


Altra cosa "mostruosa" è la non compatibilità all'indietro: hai un sorgente scritto per la versione 2? quasi sicuro non ti funzionerà per la versione 3. Infatti hanno cambiato parecchie cose:

Il comando print!!!

il comando print è diventata una funzione:

Python 2: print "hello world"
Python 3: print ("hello world")

.... ma io mi dico: tenere il comando print e introdurne uno nuovo diverso per la funzione (suggerisco magari printf !) non era molto meglio???? 

Librerie 

Hanno cambiato nomi ad alcune librerie

Python 2: import thread
Python 3: import _thread

Confronto 

L'operatore di confronto!!!

Python 2: if x <> y:
Python 3: if x != y:

La divisione tra numeri!!!

Python 2: 4/3 # result is 1
Python 3: 4/3 # result is 1.33333

Le funzioni di input:

Python 2: raw_input()
Python 3: input()

etc. etc.

Tra l'altro si trova on-line molto materiale, ma raramente è specificato per che versione è scritto, pertanto risulta complicato prendere parti di codice e metterle insieme poichè il rischio è di fare dei gran "minestroni": se qualcosa non funziona ci si chiederà: dipende dalla versione? o forse ho identato male quando ho copiato il codice? oppure ho semplicemente sbagliato a fare copia-incolla??? mah

Nota: Python 3 include uno script di utilità chiamato 2to3, che prende in ingresso il vostro codice sorgente in Python 2 e lo converte automaticamente verso Python 3 tanto quanto gli è possibile.

Il DEBUG:


C'è una libreria specifica per il debug (pdb), ma la procedura è piuttosto farragginosa, è complicato vedere il valore che assumono le variabili, non parliamo poi per modificarle e non so nemmeno se c'è la possibilità di pilotare la sequenza di comandi da eseguire (cambiare il flusso).

Nulla a che vedere con il debug in ABAP che offre uno strumento, a mio parere, eccezionale come funzionalità, facilità e versatilità.

Linguaggio interpretato


Python, per sua natura, è un linguaggio interpretato che non prevede la compilazione in un eseguibile.

Se si vuole generare un eseguibile si deve passare attraverso strumenti del tipo py2exe, che personalmente non ho mai provato, ma si introduce un livello in più che può generare incertezze: se qualcosa non funziona è un problema del codice oppure un problema del compilatore?

Insomma, tanti aspetti negativi, ma dai ci sono anche molte cose positive che, ultimamente, mi stanno facendo rivalutare questo ambiente di sviluppo.


Nessun commento:

Posta un commento