Frequentando vari forum di discussione tecnici e community dedicate allo sviluppo e alla programmazione, ho notato che alcuni concetti come la differenza tra paradigma procedurale e object-oriented sembrerebbero essere stati ormai metabolizzati dagli utenti, altri invece risulterebbero ancora particolarmente ostici; un esempio in questo senso potrebbe essere la distinzione tra linguaggi dichiarativi e imperativi.
Sostanzialmente, i linguaggi dichiarativi (o logici) sono caratterizzati dal fatto che le istruzioni rappresentano delle clausole in grado di definire una relazione esistente tra i dati e, contestualmente, tra i dati e il risultato desiderato; in questo caso le esecuzioni non seguiranno un ordine specifico, perché tale compito è affidato all’interprete (parser) e non alla sintassi del linguaggio. Di fatto, in questo caso allo sviluppatore verrà richiesto di specificare quale dovrà essere l’evoluzione delle informazioni nel corso di un’elaborazione.
Diverso è il discorso riguardante i linguaggi imperativi, essi infatti prevedono l’utilizzo di comandi espliciti; questi ultimi potranno operare a livello di sistema (stato di un dispositivo) o su delle variabili (destinate a contenere dati da elaborare), inoltre, le istruzioni dovranno essere eseguite in un ordine definito a priori. Nel caso specifico lo sviluppatore dovrà operare in modo da stabilire quali dovranno essere le modalità necessarie per ottenere il risultato voluto.
Un semplice esempio di linguaggio dichiarativo potrebbe essere la seguente istruzione SQL:
SELECT cmp1, cmp2 FROM tbl WHERE cmp3 > 10
In pratica, quello dichiarativo è un paradigma attraverso il quale è possibile "dichiarare" la natura del risultato atteso, non la procedura che un elaboratore dovrà seguire per ottenerlo; l’utilizzo di linguaggi come COBOL o FORTRAN abitua la mente a ragionare per comandi espliciti (si richiede al comuputer di fare un determinata cosa e di conseguenza un altra, ma non prima di… etc.) e per strutture di controllo del flusso, un approccio valido per i contesti imperativi, ma non per quelli dichiarativi dove il risultato dipende dal vincolo esistente tra i dati.
Per approfondire