Template

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Disambiguazione – Se stai cercando il meccanismo dei template in Wikipedia, vedi Aiuto:Template.
Esempio di gabbia di un template web
Esempio di gabbia di un template web

In informatica, un template ([ˈtɛmplɪt], dall'inglese 'sagoma' o 'calco'[1]) è un documento o programma nel quale, come in un foglio semicompilato cartaceo su una struttura generica o standard, esistono spazi temporaneamente "bianchi" da riempire successivamente. In questo ambito, la parola in italiano è traducibile come "modello", "semicompilato", "schema", "struttura base", "ossatura generale", "scheletro" o più correntemente "modulo", anche se di solito non così elaborato e sofisticato.

Documenti elettronici[modifica | modifica wikitesto]

Con il termine template si intende anche un modello di documento (es. software di produttività personale) nel quale sono importati dati. L'impaginazione (layout) della pagina rimane invariata ogni volta, facilitando la ricerca e l'archiviazione dei documenti, il confronto fra versioni ovvero un'immagine di presentazione dell'azienda coerente. Lavorando con dei fogli di calcolo, il template serve non solamente come foglio di stile per l'aspetto grafico, ma contiene delle formule che rendono i documenti confrontabili nel tempo.[2]

Il termine può anche riferirsi ai modelli preimpostati scaricabili da internet di impaginazione grafica ad esempio locandine, biglietti da visita e brochure in formato vettoriale o per il desktop publishing.

Web[modifica | modifica wikitesto]

Nel campo delle pagine web vengono denominati template quei documenti d'esempio che vengono messi a disposizione per lo sviluppo di altre pagine web con grafica e formattazione identiche ma contenuti diversi[3]. Sono uno strumento per chi vuole[4][5]:

  • creare un sito con uno stile uniforme pur non avendo molte competenze,
  • usare un codice che spesso risulta corretto se convalidato,
  • ottenere una impaginazione (layout) di facile uso e graficamente ricercata.

Solitamente vengono utilizzati i linguaggi principali del web, HTML per i contenuti e CSS per la formattazione, ma non mancano esempi in Flash (obsoleto dal 31 dicembre 2020)[6][7].

Pro dei template web[modifica | modifica wikitesto]

  • Velocità di produzione e pubblicazione del sito web non dovendo programmarlo da zero,
  • Meno costoso rispetto a farlo creare da zero da un programmatore e/o da un web designer,
  • Poche o nessuna conoscenza tecnica richiesta di programmazione HTML, PHP, ASP, database.[8][9][10]

Contro dei template web[modifica | modifica wikitesto]

  • In alcuni casi opzioni limitate di personalizzazione e design e supporto tecnico limitato,
  • Mancanza di unicità del sito web. Molti altri possono scaricare lo stesso template e avere un sito web molto simile o identico,
  • Alcuni template possono non essere programmati in modo professionale a discapito della SEO.[11][12]

Programmazione[modifica | modifica wikitesto]

Nel gergo della programmazione informatica viene usato per definire la funzionalità del linguaggio C++ che permette di scrivere codice funzionante a prescindere dal tipo di dato che verrà effettivamente usato in esecuzione. I template sono il mezzo con cui il C++ supporta la programmazione generica. Tale meccanismo è presente in altri linguaggi come Java[13][14].

Mediante i template è possibile creare del codice che ha un elevato grado di riutilizzabilità, facendo risparmiare al programmatore lavoro ridondante. Ad esempio, è possibile implementare una lista senza pensare minimamente al tipo di codice che essa userà effettivamente. Un altro esempio può essere una funzione che ordina degli array: in questi casi è sufficiente specificare solo le operazioni di scambio e la funzione di ordinamento desiderata (ordine crescente o decrescente)[15].

La Standard Template Library (STL) del C++ mette a disposizione del programmatore molte funzionalità all'interno di una elegante struttura di template.

Ci sono due tipi di template in C++: le funzioni template e le classi template.

Funzioni[modifica | modifica wikitesto]

Una funzione template[16] si comporta come una funzione che può accettare argomenti di tipo generico e fornire valori[17]. La Standard Template Library mette a disposizione la funzione template max(x, y) che ritorna x o y a seconda di quale sia il più grande, che può essere definita in questo modo:

template <typename T> T max(T x, T y)
{
    if (x < y)
        return y;
    else
        return x;
}

La chiamata alla funzione max non differisce da quella ad una normale funzione:

cout << max(3, 7);   // scrive 7 sull'output

Il compilatore non può tentare minimamente di intuire il tipo che in fase di esecuzione verrà effettivamente utilizzato. Anche se nel main è presente una singola chiamata max(int, int) non può prendere iniziative, anche perché possono essere presenti una serie di condizioni che, a seconda dei casi, possono stravolgere le chiamate. Proprio per questo motivo, le classi o le funzioni che utilizzano i template non possono essere implementati nei file con estensione .cpp, perché il compilatore non può decidere cosa accadrà in fase di esecuzione. Le implementazioni perciò devono rimanere nel file di definizione, ossia i file con estensione .h o .hpp.

In fase di esecuzione il sistema esamina gli argomenti, determina che si tratta di una chiamata a max(int, int) e instanzia una versione della funzione dove il tipo int viene utilizzato al posto di T.

Questo processo funziona se gli argomenti x e y sono interi, stringhe o qualunque altro tipo per il quale ha senso dire "x < y". Nel caso si usi un proprio tipo di dati, è necessario definire il significato di < per quel tipo (mediante ridefinizione dell'operatore <) per poter usare max(x, y).

Come controesempio il tipo standard complex che non definisce l'operatore < in quanto i numeri complessi non possono essere ordinati. Dunque se del codice tentasse di chiamare la funzione template max(x, y), dove x e y siano di tipo complex, si ottiene un errore di compilazione.

Classi[modifica | modifica wikitesto]

Una classe template estende il medesimo concetto alle classi[17].

Un esempio di classe che utilizza i template può essere il seguente:

template <typename T> class Vector;
template <typename T> class Node;

template <typename T> class Vector
{
private:
    int __size;
    Node<T>* head;
    Node<T>* tail;

public:
    Vector();
    void add(T);
    int size();
    T first();
    T last();
    bool isEmpty();
};

Le implementazioni devono essere contenute nel file header. Nel main (o in qualche altro file) sarà possibile utilizzare il seguente vettore generico specificando il tipo desiderato, nella forma seguente:

Vector<string> v1;
v1.add("esempio");
v1.add("di");
v1.add("template");

Vector<int> v2;
v2.add(1);
v2.add(2);
v2.add(3);

Con una sola implementazione si è attuato un modo unico di creare liste di qualsiasi tipo specificando il tipo all'interno delle parentesi angolari.

Note[modifica | modifica wikitesto]

  1. ^ La parola ha origine come diminutivo del francese temple, dal latino templum, nel senso di "piccolo legnetto" per usi architettonici ("Template" in Collins Concise English Dictionary, 1978, ISBN 0004330463).
  2. ^ open office templates, su OpenOffice.org. URL consultato l'8 febbraio 2022.
  3. ^ Cos'è un template di un sito | italiaonline, su Blog Italiaonline. URL consultato l'8 febbraio 2022.
  4. ^ What are Web Templates? About HTML / CSS Website Designs, su allwebcodesign.com. URL consultato l'8 febbraio 2022.
  5. ^ (EN) What is a Website Template? - Definition from Techopedia, su Techopedia.com. URL consultato l'8 febbraio 2022.
  6. ^ Flash Templates - DreamTemplate, su dreamtemplate.com. URL consultato l'8 febbraio 2022.
  7. ^ Flash & The Future of Interactive Content | Adobe Blog, su web.archive.org, 2 dicembre 2017. URL consultato l'8 febbraio 2022 (archiviato dall'url originale il 2 dicembre 2017).
  8. ^ (EN) Eduardo Esparza, 5 Pros And Cons Of Website Templates, su market8.net. URL consultato l'8 febbraio 2022.
  9. ^ Pros & Cons of Website Templates | EntheosWeb Blog, su blog.entheosweb.com. URL consultato l'8 febbraio 2022.
  10. ^ (EN) What are the Pros and Cons to Website Templates?, su Trillion Creative, 21 maggio 2018. URL consultato l'8 febbraio 2022.
  11. ^ Template vs. Custom Website Design: Pros and Cons for Both : efelle creative, Seattle, WA, su seattlewebdesign.com. URL consultato l'8 febbraio 2022.
  12. ^ (EN) Dieter Petereit, Pros and Cons: Design With Templates, su noupe, 24 agosto 2017. URL consultato l'8 febbraio 2022.
  13. ^ (EN) What is template? - Definition from WhatIs.com, su WhatIs.com. URL consultato l'8 febbraio 2022.
  14. ^ Templates - C++ Tutorials, su cplusplus.com. URL consultato l'8 febbraio 2022.
  15. ^ (EN) Code Reuse - Make Use of Code Templates, su Skaffolder, 8 agosto 2019. URL consultato l'8 febbraio 2022.
  16. ^ gs.ing.univaq.it (PDF).
  17. ^ a b (EN) The C++ Standard Template Library (STL), su GeeksforGeeks, 7 dicembre 2015. URL consultato l'8 febbraio 2022.
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica