Generalità
Code templates (Modelli di Codice, ndt) è una funzionalità dell’IDE di Lazarus che permette l’inserimento veloce di brani di codice all’interno del sorgente che state scrivendo, permettendovi di risparmiare una notevole quantità di tempo (e di tasti da premere sulla tastiera).
I modelli di codice possono essere di qualsiasi lunghezza, possiamo aggiungerne di nostri e possiamo modificarli in qualsiasi momento per adattare alle nostre esigenze sia il contenuto che semplicemente la formattazione. Attualmente sono presenti circa 30 modelli e, già tra questi, ne troviamo alcuni utilissimi.
Un determinato code template ha un determinato nome, ad esempio “tryf” (per “try-finally-end”) o “ifeb” (per “if then begin end else begin”) e l’inserimento del codice corrispondente avviene tramite la pressione della combinazione di tasti Ctrl+J.
Preciso fin da ora che questo articolo non coprirà interamente l’argomento ma si limiterà agli aspetti utili ad un utilizzo immediato.
Esempi di template
Come anticipato sopra, i template che abbiamo a disposizione sono circa 30, ne vedremo alcuni. Per chi non li avesse mai usati, iniziamo con il più semplice ma che già ci fa capire cosa possiamo ottenere. Creiamo un nuovo progetto con Lazarus, mettiamo un bottone sul Form del progetto e, con il doppio click, andiamo a editare il codice del metodo
Dovremmo trovarci in questa situazione:
procedure TForm1.Button1Click(Sender: TObject); begin | end;
Code template: w – “writeln”
A questo punto digitiamo una “w” e poi, Ctrl+J; otterremo il seguente risultato:
procedure TForm1.Button1Click(Sender: TObject); begin writeln('TForm1.Button1Click '); end;
Come abbiamo visto, è comparsa una completa invocazione a Writeln, ma non solo: nella stringa che dovrà essere stampata, c’è il nome del metodo!
Questo perché nei code templates sono state implementate anche le macro che possono essere sfruttate nel brano di codice da inserire.
Già quì si aprono diverse possibilità: chi non usa dei logger nei quali si scrive il nome della procedura che è attualmente in esecuzione?
Code template: ifeb – “if then else”
A volte, scrivendo codice velocemente, ci dimentichiamo che spesso finiremo per nidificare le if/then e quindi non mettiamo i blocchi begin/end.
Puntualmente finiremo per nidificare le if e puntualmente dovremo rivedere tutti i begin/end.
Quindi proviamo la combinazione: ifeb e poi Ctrl+J.
procedure TForm1.Button1Click(Sender: TObject); begin if Conditional then begin end else begin end; end;
Il cursore è già posizionato su “conditional”, dove andremo a mettere la nostra condizione.
Non riporterò qui il risultato poiché è facilmente immaginabile, ma vi invito a posizionarvi tra la prima coppia di begin/end e digitare nuovamente iefb seguito da Ctrl+J.
Code template: trycf – “try finally (with create/free)
Ultimo template che vedremo il trycf, utile perché lo utilizzeremo insieme ad un’altra caratteristica dell’IDE di Lazarus: il refactoring.
Digitate quindi trycf seguito da Ctrl+J; dovreste trovarvi in questa condizione:
procedure TForm1.Button1Click(Sender: TObject); begin VarName := TMyClassName.Create; try finally VarName.Free; end; end;
Sarete posizionati su “VarName”, ora mettere un nome di variabile tipo “a” e poi con TAB spostatevi su “TmyClassName” e mettete TStringList.
Dovreste trovarvi in questa situazione:
procedure TForm1.Button1Click(Sender: TObject); begin a := TStringList.Create; try finally a.Free; end; end;
A questo punto fate un’ultima operazione:
- Click col tasto destro del mouse sulla variabile “a”
- dal menù contestuale: Refactoring → Dichiara Variabile
- scegliete ora: Local Variable of Tform1.Button1Click
ed avrete:
procedure TForm1.Button1Click(Sender: TObject); var a: TStringList; begin a := TStringList.Create; try finally a.Free; end; end;
Mica male no?
Creare un code template
Proviamo ora a creare un template personalizzato.
A volte capita di dover scrivere dei cicli for dove l’iterazione sia incapsulata in un blocco try/except; questo per evitare che un errore in un ciclo del loop interrompa il tutto.
Creiamo quindi il nostro template.
Da menù: Strumenti → Template di codice → Aggiungi
Inseriamo:
- Token: forx
- Commento: for … try except
Nel memo dedicato al contenuto del template inseriamo:
for $Param(CounterVar) := $Param(0) to Pred($Param(Count)) do begin try | except on e: exception do begin writeln('$ProcedureName() '|)$AddSemicolon() end$AddSemicolon() end$AddSemicolon() end$AddSemicolon()
Spuntate ora i campi campi:
- Abilita le macro
- non aggiungere caratteri
Confermate il dialog.
Dovreste vedere a video qualcosa del genere:
Ora non vi resta che provare: forx seguito da Ctrl+J.
Conclusioni
Come già accennato l’argomento non si esaurisce qui, ma ci sono altri aspetti che rendono ancora più interessante questa funzionalità.
Il consiglio è di dedicare un po’ di tempo a vedere tutti i template a disposizione, a vedere cosa si può fare con essi e ad imparare ad usarli.
Nel caso ci fosse interesse a conoscere più approfonditamente l’argomento, potete aprire un thread nel forum https://www.lazaruspascal.it/.
Buon lavoro.