Che si tratti di pro­gram­ma­re un'app, un software IoT o un gioco per computer, prima di scrivere le righe di codice gli svi­lup­pa­to­ri devono prendere una decisione di base: quale lin­guag­gio di pro­gram­ma­zio­ne uti­liz­za­re? Se ne possono scegliere diversi. In generale, tuttavia, tutti i linguaggi possono essere assegnati a due fon­da­men­ta­li paradigmi di pro­gram­ma­zio­ne: la pro­gram­ma­zio­ne di­chia­ra­ti­va e la pro­gram­ma­zio­ne im­pe­ra­ti­va.

Che cos'è la pro­gram­ma­zio­ne di­chia­ra­ti­va?

Il paradigma non ha de­scri­zio­ni as­so­lu­ta­men­te precise, ma tutte le de­fi­ni­zio­ni con­cor­da­no su una cosa: la ca­rat­te­ri­sti­ca dei linguaggi di pro­gram­ma­zio­ne di­chia­ra­ti­vi è che de­scri­vo­no sempre il risultato finale de­si­de­ra­to invece di mostrare tutte le fasi di lavoro. Per rag­giun­ge­re l'o­biet­ti­vo, nella pro­gram­ma­zio­ne di­chia­ra­ti­va la strada per arrivare alla soluzione viene de­ter­mi­na­ta au­to­ma­ti­ca­men­te. Un approccio che funziona bene fintanto che le spe­ci­fi­che dello stato finale sono chia­ra­men­te definite ed esiste un processo di ese­cu­zio­ne ap­pro­pria­to. Se si ve­ri­fi­ca­no entrambe queste con­di­zio­ni, la pro­gram­ma­zio­ne di­chia­ra­ti­va è molto efficace.

Poiché la pro­gram­ma­zio­ne di­chia­ra­ti­va non definisce il "come" ma funziona a un livello molto elevato di astra­zio­ne, il paradigma di pro­gram­ma­zio­ne lascia spazio anche al­l'ot­ti­miz­za­zio­ne. Se viene svi­lup­pa­to un metodo di ese­cu­zio­ne migliore, questo può essere trovato e uti­liz­za­to tramite l'al­go­rit­mo integrato. In questo modo, il paradigma si rivela de­ci­sa­men­te a prova di futuro: quando si scrive il codice, non è ne­ces­sa­rio che la procedura per ottenere il risultato sia stabilita con certezza.

I linguaggi di pro­gram­ma­zio­ne di­chia­ra­ti­vi più co­no­sciu­ti:

  • Prolog
  • Lisp
  • Haskell
  • Miranda
  • Erlang
  • SQL (nel senso più esteso)

I vari linguaggi di pro­gram­ma­zio­ne di­chia­ra­ti­va possono a loro volta essere divisi in due paradigmi: i linguaggi di pro­gram­ma­zio­ne fun­zio­na­le e quelli di pro­gram­ma­zio­ne logica.

Nella pratica, tuttavia, i confini spesso si con­fon­do­no e, per risolvere i problemi, vengono uti­liz­za­ti tanto gli elementi della pro­gram­ma­zio­ne im­pe­ra­ti­va con i suoi sottotipi di pro­gram­ma­zio­ne pro­ce­du­ra­le, modulare e strut­tu­ra­ta, quanto la pro­gram­ma­zio­ne di­chia­ra­ti­va.

Pro­gram­ma­zio­ne di­chia­ra­ti­va vs im­pe­ra­ti­va

Il paradigma di pro­gram­ma­zio­ne im­pe­ra­ti­va (paradigma orientato al comando) è il più vecchio dei due paradigmi di base. Con­tra­ria­men­te alla pro­gram­ma­zio­ne di­chia­ra­ti­va, qui lo svi­lup­pa­to­re specifica esat­ta­men­te nel codice sorgente cosa deve fare il computer passo dopo passo per ottenere il risultato. In primo piano c'è "come" arrivare alla soluzione. Questo approccio può essere trovato, ad esempio, in Java, Pascal o in C. Al contrario, la pro­gram­ma­zio­ne di­chia­ra­ti­va descrive di­ret­ta­men­te il "cosa" della soluzione.

Come esempio, facciamo un parallelo con il montaggio di un mobile: mentre la pro­gram­ma­zio­ne im­pe­ra­ti­va fornisce istru­zio­ni su come montarlo, la pro­gram­ma­zio­ne di­chia­ra­ti­va fornisce un'im­ma­gi­ne del mobile finito come modello.

Invece di lasciare aperto il Come del­l'e­se­cu­zio­ne con funzioni, nella pro­gram­ma­zio­ne im­pe­ra­ti­va ci sono variabili che vengono mo­di­fi­ca­te in fase di ese­cu­zio­ne. Ciò rende il codice più lungo, ma anche più facile da com­pren­de­re rispetto alla forma ab­bre­via­ta e molto astratta dello stile di­chia­ra­ti­vo.

Pro­gram­ma­zio­ne di­chia­ra­ti­va: un esempio

Un punto di forza della pro­gram­ma­zio­ne di­chia­ra­ti­va è la sua capacità di de­scri­ve­re i problemi in modo più breve e più conciso rispetto ai linguaggi im­pe­ra­ti­vi.

Se deve essere creato un elenco di nomi, lo si può de­scri­ve­re in PHP con la pro­gram­ma­zio­ne di­chia­ra­ti­va, come mostra l'esempio, con una sola riga di codice, mentre la procedura im­pe­ra­ti­va richiede cinque righe.

Pro­gram­ma­zio­ne im­pe­ra­ti­va

$listaPartecipanti = [1 => 'Pietro', 2 => 'Anna', 3 => 'Sara'];
$nomi = [];
foreach ($listaPartecipanti as $id => $name) {
    $nomi[] = $name;
}

Pro­gram­ma­zio­ne di­chia­ra­ti­va

$nomi = array_values($listaPartecipanti);

Vantaggi e svantaggi del lin­guag­gio di pro­gram­ma­zio­ne di­chia­ra­ti­va

Lo stile di pro­gram­ma­zio­ne di­chia­ra­ti­vo è oggi uti­liz­za­to in svariati casi, sebbene non nella sua forma più pura. Tuttavia, questo approccio non è adatto a tutte le ap­pli­ca­zio­ni.

Il codice di­chia­ra­ti­vo è ca­rat­te­riz­za­to da un alto livello di astra­zio­ne. Ciò consente agli svi­lup­pa­to­ri di vi­sua­liz­za­re programmi complessi in forma compressa. Ma più grande è l'ap­pli­ca­zio­ne, maggiore è il rischio che il codice venga ni­di­fi­ca­to in modo tale da poter essere letto solo dallo svi­lup­pa­to­re che lo ha ori­gi­na­ria­men­te scritto. Questa si­tua­zio­ne è pe­ri­co­lo­sa per le aziende che vogliono ef­fet­tua­re la ma­nu­ten­zio­ne e svi­lup­pa­re ap­pli­ca­zio­ni in­di­pen­den­te­men­te da singole persone. In questo caso, gli svi­lup­pa­to­ri esterni si ritrovano a dover fa­ti­co­sa­men­te decifrare il codice di­chia­ra­ti­vo prima di poterne com­pren­de­re la struttura e risolvere i problemi.

Tuttavia, il livello di astra­zio­ne della pro­gram­ma­zio­ne di­chia­ra­ti­va offre anche dei vantaggi. Poiché l'e­se­cu­zio­ne è chia­ra­men­te separata dal sistema tramite un algoritmo, la ma­nu­ten­zio­ne può essere eseguita in­di­pen­den­te­men­te dallo sviluppo del­l'ap­pli­ca­zio­ne. Le in­ter­ru­zio­ni nelle ope­ra­zio­ni quo­ti­dia­ne sono ridotte al minimo. Al contempo, l'ot­ti­miz­za­zio­ne è più semplice perché l'al­go­rit­mo uti­liz­za­to è ab­ba­stan­za aperto per accedere a nuovi metodi. Lo svan­tag­gio del­l'u­ti­liz­zo di un algoritmo: tale soluzione basata su formule spesso può trattare solo in modo in­suf­fi­cien­te le ca­rat­te­ri­sti­che spe­ci­fi­che delle singole ap­pli­ca­zio­ni.

Sebbene non sia uno svan­tag­gio, il modello con­cet­tua­le della pro­gram­ma­zio­ne di­chia­ra­ti­va pone una sfida. Pensare in termini di stati ri­so­lu­ti­vi va contro i mec­ca­ni­smi naturali di pensiero. Nei processi, si ragiona in vista di un obiettivo e non si fa invece il ra­gio­na­men­to inverso partendo da tale obiettivo. Ciò richiede agli svi­lup­pa­to­ri di cambiare pro­spet­ti­va e fare pratica, cosa che ini­zial­men­te può ral­len­ta­re la ri­so­lu­zio­ne dei problemi. Tuttavia, una volta che la nuova mentalità è stata allenata, l'ap­proc­cio di­chia­ra­ti­vo può mostrare i suoi punti di forza.

Lo sviluppo basato sulla de­scri­zio­ne del problema ha anche il vantaggio che i team possono abbozzare modelli di soluzioni con una certa rapidità. Dopodiché, la pro­gram­ma­zio­ne effettiva del­l'e­se­cu­zio­ne può essere eseguita in un passaggio suc­ces­si­vo. Ciò rende lo stile di­chia­ra­ti­vo molto indicato per la pro­to­ti­pa­zio­ne nello sviluppo agile di software.

Vantaggi Svantaggi
Codice corto ed efficace In parte difficile da com­pren­de­re per gli esterni
Ese­gui­bi­le con metodi non ancora noti al momento della pro­gram­ma­zio­ne Basato su un modello di pensiero insolito per l'uomo (stato di soluzione)
Ot­ti­miz­za­zio­ne semplice, poiché l'e­se­cu­zio­ne è con­trol­la­ta dal­l'al­go­rit­mo Le ca­rat­te­ri­sti­che delle singole ap­pli­ca­zio­ni possono essere difficili da prendere in con­si­de­ra­zio­ne nella pro­gram­ma­zio­ne
Ma­nu­ten­zio­ne possibile in­di­pen­den­te­men­te dallo sviluppo del­l'ap­pli­ca­zio­ne

Nella pratica, oggi si uti­liz­za­no prin­ci­pal­men­te forme miste di paradigmi e i linguaggi di pro­gram­ma­zio­ne di­chia­ra­ti­va sono integrati da metodi im­pe­ra­ti­vi. Tuttavia, ciò aumenta la su­scet­ti­bi­li­tà agli errori e può influire sulla leg­gi­bi­li­tà del codice.

Vai al menu prin­ci­pa­le