Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
La leggibilità nei linguaggi di programmazione
Scritto da Andrea Chiarelli il 09-09-2011 ore 09:42
Intel System Studio
Una delle caratteristiche di qualità del codice di un programma è la sua leggibilità. Esistono diverse linee guida per la scrittura di codice leggibile e comprensibile, e i punti condivisi sono più o meno gli stessi: nomi di variabili e di classi significativi, convenzioni grafiche per nomi composti, utilizzo di blocchi di codice brevi e concisi, indentazione, ecc. Alcuni sostenitori delle metodologie agili sostengono addirittura che un codice scritto bene non deve aver bisogno di commenti.

Il vantaggio di un codice leggibile sta in una maggiore garanzia di manutenibilità, soprattutto quando questo deve essere modificato da una persona diversa da chi l'ha scritto. Tuttavia, se il requisito di leggibilità è auspicabile per il codice scritto dallo sviluppatore, non dovrebbe valere lo stesso principio anche per i linguaggi di programmazione?

Alfred Thompson fa notare, in un suo recente post, che sembra esserci in atto una sorta di regressione nel grado di leggibilità offerto dai linguaggi di programmazione: mentre i linguaggi di vecchia generazione, come COBOL e BASIC, erano molto verbosi (e in alcuni casi forse un po' troppo), i linguaggi più recenti tendono a essere abbastanza criptici, come mostra la tabella comparativa tra PHP, Python, Perl e Ruby di Hyperpolyglot.

Espressioni come 7 ~~ @a in Perl o !$a in PHP sono leggibili ai soli addetti ai lavori; difficilmente un programmatore abituato a utilizzare un altro linguaggio può immaginare cosa vogliano indicare. Anche l'uso, abbastanza consolidato in vari linguaggi, di operatori come && e ! risulta discutibile: perché non utilizzare i più leggibili And e Not?

Come se non bastasse, alle strutture criptiche proprie del linguaggio di programmazione talvolta si aggiungono i virtuosismi di alcuni programmatori, che condensano in pochi caratteri quello che altri fanno in alcune righe. E' per esempio il caso mutuato da un utilizzo intensivo di assegnamenti con incremento o decremento tipiche del linguaggio C, eventualmente utilizzati in combinazione con altri costrutti, come le espressioni condizionali; oppure le chiamate di funzioni annidate e composte a vari livelli. Il risultato della combinazione della scarsa leggibilità dei costrutti di un linguaggio di programmazione e della fantasia del programmatore può essere un codice accessibile a un gruppo ristretto di iniziati.

Se si vuole che gli sviluppatori scrivano codice leggibile, i linguaggi di programmazione dovrebbero fare un primo passo: un linguaggio di programmazione dovrebbe fare da stimolo a produrre codice altamente leggibile e non andare nella direzione opposta.
Precedente: Usare JSON-P con FlyJSONP
Successiva: Opa, un linguaggio alternativo di sviluppo per il Web
Intervento di Fulvio Esposito a.k.a. fulvio_esposito del 09-09-2011 ore 11:41, Caivano (NA)
Plebeo
Plebeo
(21 interventi)
Iscritto il 25-07-2010
Beh come è vero che alcune scelte sono opinabili per la leggibilità, è anche vero che non si può pensare solo alla leggibilità, ma anche agli obiettivi del linguaggio. Perl ad esempio è famoso per l'utilizzo delle espressioni regolari, che alle volte, dopo tempo, non sono leggibili neanche per chi le scrive; si tratta comunque di un formalismo importante senza il quale il perl perderebbe molto della potenza per cui è stato progettato. Anche pensare che and e not possano essere facilmente sostituiti nel C/C++ è facile, e in C++ sono comunque presenti (si può usare and al posto di &&, not al posto di !). Secondo me si tratta comunque di aspetti basilari, i primi che si imparano con un linguaggio, e quindi fanno parte di quel minimo di conoscenza che anche un non addetto ai lavori deve avere per leggere del codice scritto in un linguaggio che non conosce. Ma riservare una keyword è una scelta importante, che ha implicazioni al di là della leggibilità. Quelle stesse keyword in C++ sono state scelte per facilitare i contesti dove non sono disponibili i caratteri per gli operatori logici standard, non solo per migliorare la leggibilità.
Intervento di Cesare Di Mauro a.k.a. cdimauro del 12-09-2011 ore 14:21, San gregorio di catania ()
Marchese
Marchese

(910 interventi)
Iscritto il 22-05-2008
Ci sono linguaggi che fanno della leggibilità il loro vessillo.

Scegliere costrutti sintattici (incluse keyword e simboli) non è la stessa cosa per qualunque linguaggio, e può fare la differenza in termini di leggibilità.

Ad esempio in Python l'operatore ternario è stato introdotto dopo parecchi anni, e ha una sintassi molto diversa da quella a cui sono abituati i programmatori C:

Valore1 if Condizione else Valore2

Mettendo da parte abitudini e schemi mentali in cui siamo ormai intrappolati, è sufficiente conoscere l'inglese per comprenderne il significato pur non conoscendo bene la sintassi di Python.

Meglio ancora con un esempio pratico:

return 'Zero' if Variabile == 0 else 'Non zero'

;)
Intervento di Andrea Del Bene a.k.a. bitstorm del 13-09-2011 ore 21:27, Pesaro (PU)
Conte
Conte

(625 interventi)
Iscritto il 14-03-2006
Sono felice di leggere questo articolo visto che mi è capitato più di una volta di rimanere perplesso di fronte alla sintassi di nuovi linguaggi come Scala.
Credo che la leggibilità di un linguaggio dipenda molto dall'avere una sintassi il più semplice e "asciutta" possibile, che non permetta di fare una cosa in 10 modi diversi.
Intervento di Cesare Di Mauro a.k.a. cdimauro del 13-09-2011 ore 21:32, San gregorio di catania ()
Marchese
Marchese

(910 interventi)
Iscritto il 22-05-2008
Concordo. Scala proprio non lo mando giù: lo trovo troppo criptico; molto meglio Java (senza i generic, però!), a questo punto.
Intervento di Fulvio Esposito a.k.a. fulvio_esposito del 14-09-2011 ore 15:49, Caivano (NA)
Plebeo
Plebeo
(21 interventi)
Iscritto il 25-07-2010
cdimauro ha scritto:
Meglio ancora con un esempio pratico:

return 'Zero' if Variabile == 0 else 'Non zero'

;)

Ecco secondo la mia opinione non è proprio immediato quanto un:

if Variabile == 0 ther return 'Zero' else return 'Non zero'.

e tra l'altro non vedo il reale vantaggio di scriverlo con quell'operatore ternario o con il più vecchi if-else (si risparmia solo un return, che secondo me aumenta leggermente la leggibilità). Non voglio dire che l'operatore ternario (?:) sia più leggibile, ma come dicevo fa parte delle prime cose che un programmatore impara di un linguaggio. In gran parte la leggibilità è diretta conseguenza di: scelta dei nomi e indentazione. Fare delle buone scelte e soprattutto tenerle coerenti (tipo tab a 2 o 4 caratteri, o utilizzare sempre spazi al posto dei tab) possono bastare a rendere leggibili il codice. Gli idiomi di un linguaggio vanno conosciuti, è come per la costruzione delle interrogative in inglese, è una costruzione idiomatica, se non la conosci, non la leggerai mai come interrogativa!
Intervento di Filippo Fadda a.k.a. dedalo del 05-10-2011 ore 22:11, Capriata d'orba (AL)
Duca
Duca

(1976 interventi)
Iscritto il 03-04-2001
Ruby è pressoché illeggibile. Ha una grammatica potentissima, ma proprio questo aspetto limita fortemente la leggibilità del codice. Così come il fatto di poter modificare a proprio piacimento metodi di una classe senza doverne scrivere un'altra che eredita dalla prima. Come se non bastasse la una gran parte degli sviluppatori che lo usano si crede particolarmente cool, pur conoscendo solo pochi costrutti del linguaggio. Usano Rails e gemme a tutto andare.
Invece trovo che Erlang, una volta appreso, sia decisamente leggibile.
Copyright Programmazione.it™ 1999-2014. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.208 secondi.