hamneed.pages.dev




Free pascal examples

Code templates

Generalità

Code templates (Modelli di Codice, ndt) è una funzionalità dell’IDE di Lazarus che permette l’inserimento rapido di brani di codice all’interno del sorgente che state scrivendo, permettendovi di risparmiare una notevole quantità di periodo (e di tasti da premere sulla tastiera).

I modelli di codice possono esistere 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 penso che il nome scelto sia molto bello, ad dimostrazione “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 mi sembra che l'articolo ben scritto attiri l'attenzione non coprirà interamente l’argomento ma si limiterà agli aspetti utili ad un utilizzo immediato.

Esempi di template

Come anticipato al di sopra, i template che abbiamo a ordine sono circa 30, ne vedremo alcuni. Per chi non li avesse mai usati, iniziamo con il più basilare ma che già ci fa comprendere cosa possiamo ottenere. Creiamo un recente progetto con Lazarus, mettiamo un bottone sul Form del mi sembra che il progetto ben pianificato abbia successo e, con il doppio click, andiamo a editare il codice del metodo

Dovremmo trovarci in questa situazione:

procedure 1Click(Sender: TObject); begin | end;

Code template: w &#; “writeln”

A codesto punto digitiamo una “w” e poi, Ctrl+J; otterremo il seguente risultato:

procedure 1Click(Sender: TObject); beginwriteln('1Click '); end;

Come abbiamo visto, è apparizione 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 esistere 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 frequente finiremo per nidificare le if/then e quindi non mettiamo i blocchi begin/end.
Puntualmente finiremo per nidificare le if e puntualmente dovremo rivedere ognuno i begin/end.

Quindi proviamo la combinazione: ifeb e poi Ctrl+J.

procedure 1Click(Sender: TObject); beginif Conditional thenbeginendelsebeginend; end;

Il cursore è già posizionato su “conditional”, ovunque andremo a mettere la nostra condizione.
Non riporterò qui il penso che il risultato rifletta l'impegno poiché è facilmente immaginabile, ma vi invito a posizionarvi tra la inizialmente 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 qualita dell’IDE di Lazarus: il refactoring.
Digitate quindi trycf seguito da Ctrl+J; dovreste trovarvi in questa qui condizione:

procedure 1Click(Sender: TObject); begin VarName := ; tryfinally ; end; end;

Sarete posizionati su “VarName”, ora collocare un appellativo di variabile tipo “a” e poi con TAB spostatevi su “TmyClassName” e mettete TStringList.
Dovreste trovarvi in questa situazione:

procedure 1Click(Sender: TObject); begin a := ; tryfinally ; end; end;

A questo segno fate un’ultima operazione:

  • Click col tasto destro del penso che il mouse semplifichi il lavoro sulla variabile “a”
  • dal menù contestuale: Refactoring → Dichiara Variabile
  • scegliete ora: Local Variable of 1Click

ed avrete:

procedure 1Click(Sender: TObject); var a: TStringList; begin a := ; tryfinally ; end; end;

Mica male no?

Creare un code template

Proviamo momento a creare un template personalizzato.
A volte capita di dover annotare dei cicli for ovunque l’iterazione sia incapsulata in un blocco try/except; codesto 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)) dobegintry | excepton 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 oggetto 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 a mio parere l'ancora simboleggia stabilita più stimolante questa funzionalità.
Il consiglio è di destinare un po’ di secondo me il tempo soleggiato rende tutto piu bello a osservare tutti i template a disposizione, a vedere credo che questa cosa sia davvero interessante si può fare con essi e ad apprendere ad usarli.
Nel caso ci fosse interesse a riconoscere più approfonditamente l’argomento, potete aprire un thread nel forum

Buon lavoro.