HTML è un linguaggio di programmazione?

HTML è un linguaggio di programmazione?

Di Filippo Camagni


tag markup HTML linguaggio di marcatura html5

HTML (HyperText Markup Language) è uno dei linguaggi più popolari nell’ambito dello sviluppo web, uno strumento pressoché essenziale per impostare il layout di una pagina web. Semplice e intuitivo, col supporto di CSS e JavaScriptHTML fornisce agli sviluppatori gli strumenti necessari per creare un’applicazione web esteticamente gradevole e funzionale. Se nessuno osa mettere in dubbio l’utilità di HTML, c’è una domanda che invece genera perplessità tra gli sviluppatori: è possibile definire HTML un “linguaggio di programmazione 

HTML è un linguaggio di programmazione?

C’è chi sostiene che HTML può essere considerato una sorta di linguaggio di programmazione di tipo dichiarativo (che si concentra su “cosa” il programma deve fare e non sul “come” farlo) di alto livello, cioè dotato di una sintassi molto simile al linguaggio umano. C’è chi vede le cose in una prospettiva più ampia, affermando che qualsiasi codice che istruisca il computer sull’azione da eseguire può essere considerato un linguaggio di programmazione. Molti pensano che non sia corretto considerare HTML un linguaggio di programmazione, in quanto non è “turing-completo”: è privo di una semantica che permetta di implementare una qualsiasi macchina di Turing, una macchina che possa essere usata, in altre parole, per risolvere qualsiasi problema che ammetta una soluzione. Altri, invece, sono convinti che la “turing-completezza” non rappresenta un criterio adatto per stabilire se HTML possa o no essere definito un linguaggio di programmazione.

Per capire se HTML possa essere considerato o meno un linguaggio di programmazione, proviamo ad adottare un’altra strategia e a rispondere, innanzitutto, a un’altra domanda: che cos’è un linguaggio di programmazione?

Che cos'è un linguaggio di programmazione?

Secondo l’Enciclopedia della Scienza e della Tecnica, un linguaggio di programmazione rappresenta un “insieme di parole e di regole, definite in modo formale, per consentire la programmazione di un elaboratore affinché esegua compiti predeterminati”. Un linguaggio artificiale, quindi, dotato di regole molto rigide e utilizzato per comunicare alla macchina istruzioni precise. Un linguaggio in cui è possibile, come leggiamo nell’Enciclopedia:

  1. dichiarare variabili;
  2. manipolare tipi di dati differenti (come stringhe, numeri, booleani o array);
  3. effettuare operazioni matematiche e logiche;
  4. implementare algoritmi;
  5. dare istruzioni relative alla logica di controllo del flusso (cioè all’ordine in cui vengono eseguite le istruzioni di un programma) in base a condizioni specificate dal programmatore. Un esempio? L’onnipresente “if/else”.

Se HTML possedesse queste caratteristiche logiche e strutturali, condivise da gran parte dei linguaggi di programmazione, a rigor di logica, potrebbe essere considerato anch’esso un linguaggio di programmazione. Proviamo ad analizzare caso per caso:

  1. In HTML non è possibile dichiarare variabili. Non lasciamoci trarre in inganno dal tag <var>: similmente a <code> e <samp>, esso serve solamente a formattare in corsivo il testo d’esempio di un codice di programmazione, o di un’espressione matematica, per enfatizzarlo;
  2. HTML non consente di dichiarare o manipolare dati in base al loro tipo. Anche se in certi tag come <input>, <button> o <link> è possibile specificare il “type”, quest’ultimo rimane comunque un semplice attributo. Con esso non specifichiamo il tipo di dato che intendiamo utilizzare, bensì forniamo informazioni aggiuntive su un elemento HTML che il browser provvederà a “renderizzare”;
  3. Non potendo operare con tipi di dati come numeri interi (integer) o numeri in virgola mobile (float), in HTML non possiamo effettuare operazioni matematiche o logiche;
  4. Né va da sé implementare algoritmi;
  5. Non essendo dotato di una logica di controllo del flusso HTML non permette di gestire strutture condizionali.

C’è chi sostiene, tuttavia, che alcuni elementi HTML sono dotati di una logica di controllo interna in grado di manipolare il DOM senza servirsi di JavaScript. Elementi che, interagendo con l’input fornito dall’utente, sarebbero in grado di eseguire delle semplici istruzioni condizionali. Un esempio comune è la coppia di tag <details> e <summary>.

Innestando il tag <summary> nel “parent” <details> è possibile creare una sorta di rudimentale “accordion” (un pannello “collassabile”):

Il tag <summary>, fungendo da interruttore (“toggle”), implementa un rudimentale processo “if/else”: se l’utente ci clicca sopra, viene aggiunto l’attributo open al tag <details>. Cliccandoci nuovamente sopra, l’attributo “open” viene rimosso:

Troviamo una logica simile nel tag <dialog>, che consente di creare una finestra modale che si apre automaticamente al caricamento della pagina, ancora una volta grazie all’attributo “open”, e che può essere chiusa con l’aiuto di un pulsante innestato in un tag <form>:

Una volta chiusa, tuttavia, sarà impossibile riaprire questa finestra modale senza l’aiuto di JavaScript.

A prescindere da questi elementi interattivi, introdotti solo di recente in HTML5 (l’ultima versione del linguaggio) e non ancora supportati da tutti i maggiori browser, HTML rimane privo delle funzionalità comuni alla maggior parte dei linguaggi di programmazione: non permette di dichiarare variabili, manipolare tipi di dati differenti, effettuare operazioni matematiche e logiche, implementare algoritmi o strutture di controllo del flusso. Questo perché HTML ha una funzione differente. Quale?

Funzioni di HTML

Basta dare un’occhiata all’acronimo “HTML”: “HyperText Markup Language”. Si tratta infatti di un linguaggio di marcatura (“markup”), cioè di un linguaggio che, per mezzo di speciali marcatori (o etichette, “tag”), permette di gestire l’impaginazione e la formattazione di un documento. È compito del codice HTML fornire al browser tutte le informazioni relative al layout di una pagina web. Il browser interpreta i marcatori presenti nel codice sorgente (HTML) e ne “renderizza” graficamente la struttura: al tag <h1> corrisponderà un titolo, a <p> un paragrafo di testo, ad <a> un collegamento ipertestuale e così via.

Con l’avvento di HTML5, inoltre, si è deciso di dare maggior risalto alla funzione semantica di questo linguaggio di marcatura. Lo dimostra l’introduzione dei cosiddetti “tag semantici”, come <header>, <footer>, <section>, <nav> o <article>. Si tratta di elementi che, sebbene non differiscano tecnicamente da semplici <div>, servono ad associare a ciascuna sezione di una pagina web un’etichetta “parlante”, garantendo un’indicizzazione più efficiente del contenuto delle pagine web da parte dei motori di ricerca e una maggiore leggibilità del codice sorgente.

HTML, in conclusione, non dispone delle caratteristiche tecniche necessarie per essere considerato a tutti gli effetti un linguaggio di programmazione. Questo perché HTML nasce come linguaggio di marcatura, con una funzione semplice, ma essenziale: descrivere al browser il layout, cioè la struttura, di una pagina web e fornire valore semantico al suo contenuto. Ciò non significa che HTML non sia un’arma importante nell’arsenale dello sviluppatore web, né un linguaggio “di seconda categoria”. HTML rappresenta la spina dorsale di Internet. È un linguaggio semplice ma affascinante, dotato di una ricca documentazione e di una vastissima community. Una conoscenza approfondita di HTML consente allo sviluppatore di realizzare pagine web più funzionali e meglio organizzati, di padroneggiare con consapevolezza framework come Bootstrap o Tailwind, nonché di migliorare i parametri SEO della propria applicazione web.  

Impara a programmare in 3 mesi con il Corso di Coding Hackademy su Laravel PHP

Diventa Sviluppatore web in 3 mesi

Scopri il coding bootcamp Hackademy

Programma Completo