La possibilità di dichiarare variabili e costanti in qualsiasi parte del codice, introdotta nella versione 10.3 di Delphi ha diviso le comunità di sviluppatori. Da un lato c’è chi si dichiara entusiasta, dall’altro chi rifiuta categoricamente la novità. Passato l’entusiasmo dei primi tempi, ci chiediamo: quando vale la pena di usare le dichiarazioni inline in Delphi?
La versione 10.3 di Delphi introduce importanti novità nel linguaggio. Una di queste, la possibilità di dichiarare una variabile in qualsiasi parte del codice, è considerata una modifica sostanziale del Pascal, più che una sua naturale evoluzione, e come tale ha diviso la comunità dei programmatori. La dichiarazione inline, infatti, è molto usata in altri popolari linguaggi, da Java a C#, ma rappresenta una novità assoluta per il Pascal.
Nota: nel seguito, ci riferiremo alla dichiarazione delle variabili; in generale, il contenuto si applica anche alla dichiarazione delle costanti.
Com’è noto, la dichiarazione delle variabili è tradizionalmente eseguita nella sezione var di una unit o di un metodo:
procedure SayHello(AName: string);
var
username: string;
begin
username:= 'world';
if AName <> '' then
username:= AName;
ShowMessage ('Hello, ' + username);
end;
Da Delphi 10.3 è possibile compattare il codice richiesto; per esempio:
procedure SayHello(AName: string);
begin
var username:= 'world';
if AName <> '' then
username:= AName;
ShowMessage ('Hello, ' + username);
end;
dove abbiamo usato altre due importanti novità che accompagnano la dichiarazione inline: le possibilità di inferire il tipo di una variabile (è stata omessa la dichiarazione esplicita string) e di inizializzare una variabile all’atto della sua dichiarazione.
Le dichiarazioni in linea sono state accolte con molto entusiasmo nel mondo degli sviluppatori in Delphi, che non hanno mancato di sottolinearne alcuni vantaggi:
Alcuni sviluppatori, in particolare quelli che fanno riferimento a Free Pascal Compiler (FPC), hanno invece rifiutato di introdurre questa caratteristica nel proprio compilatore, per una serie di altrettanto buone ragioni:
La discussione, come potete intuire, è stata molto più complessa, ma i suoi punti principali sono quelli sopra riportati e seguendo i link precedenti potrete farvene un’idea più completa.
Da quando è uscito Delphi 10.3, non ho mai usato questa feature, per diversi motivi:
Nella maggior parte dei casi, a mio avviso, i motivi portati a loro favore non sono decisivi e risultati simili possono essere raggiunti seguendo buone pratiche di programmazione. Le dichiarazioni inline, però, potrebbero essere usate con profitto per produrre codice più compatto, leggibile e manutenibile in casi molto specifici. Un buon esempio sono le compilazioni condizionali che agiscano sulla definizione di tipi di variabile, a patto che la portabilità del codice verso precedenti versioni di Delphi e/o FPC non sia richiesta.
Al 31 dicembre 2019, nella pagina del sito di Embarcadero dedicata ai bachi risultano aperte almeno una dozzina segnalazioni relative alle dichiarazioni in linea, di gravità variabile dal mancato funzionamento della formattazione automatica del codice agli errori a runtime.
Un discorso a parte merita l’inizializzazione delle variabili. Riprendendo l’esempio precedente, in FPC avremmo questa sintassi:
procedure SayHello(AName: string);
var
username: string = 'world';
begin
if AName <> '' then
username:= AName;
ShowMessage ('Hello, ' + username);
end;
nella quale l’operatore di assegnazione è ‘=’. Compilare questo codice con Delphi genera l’errore E2195 Cannot initialize local variables, perché l’inizializzazione a questo livello non è possibile (lo è, invece, a livello di unit). Pare che non si tratti di una questione tecnica, ma del fatto che nessuno avrebbe implementato questa possibilità. Nemmeno in questo caso, quindi, è possibile usare questa caratteristica dei linguaggi per avere codice più compatto.
Siamo giunti al momento in cui bisogna rispondere alla domanda: quando usare le dichiarazioni inline in Delphi?
La dichiarazione in linea di variabili e costanti non era il miglioramento più urgente che mi sarei aspettato da Delphi. I problemi dell’IDE – legati soprattutto a Code Insight e Code Completion – sono lamentati da molti utenti e la loro soluzione, probabilmente, permetterebbe di fluidificare il lavoro più di qualche riga di dichiarazione risparmiata. Tuttavia, è stata implementata e vale la pena di valutarne a fondo pro e contro non solo in termini teorici, ma in rapporto ai propri target di sviluppo.
A livello teorico non c’è una chiara preferenza pro o contro il loro uso. A livello pratico, l’implementazione della versione 10.3.2 sembra ancora troppo immatura per essere seriamente presa in considerazione.
Anche quando i bachi saranno risolti, non mi sentirò in obbligo né di consigliare, né di usare le dichiarazioni inline di Delphi. Al momento, i vantaggi sono marginali rispetto alla perdita di compatibilità. Occorrerà saper individuare, però, quei pochi casi in cui dichiarare variabili in linea fornisce un valido aiuto alla scrittura di codice migliore e l’esperienza personale diventerà, come spesso accade, il fattore determinante della scelta caso per caso.
Articoli più recenti
Gli articoli sulla filatelia tematica, vista da una prospettiva semantica e semiotica, sono elencati sotto…
Il paragone tra Gliwice e Grigoriopol è spontaneo; ma quanto è giustificato? Analizziamo i fatti…
Alcune considerazioni sulla comunicazione russa che ha preceduto il conflitto in Ucraina spingono al pessimismo.
Definire un'unità narrativa nella filatelia tematica può rendere lo sviluppo tematico più completo e coinvolgente,…
TplFmxClock è il nuovo componente per Delphi rilasciato come open source da morandotti.it. Si tratta…
Concludiamo la serie di articoli sulla filatelia tematica affrontando una delle sfide più urgenti: quella…