Un linguaggio di programmazione può funzionare anche senza dichiarazioni?

9

Come programmazione in JavaScript, ho notato che tutto ciò che può essere fatto con istruzioni e blocchi può essere fatto solo con le espressioni. Un linguaggio di programmazione può funzionare bene solo con le espressioni? E, se sì, perché le affermazioni sono usate?

    
posta MaiaVictor 16.12.2012 - 13:53
fonte

4 risposte

14

Certo. Il modo più semplice è assegnare un valore di risultato a ogni costrutto che è attualmente un'istruzione e quindi trasformarlo in un'espressione. Questo non è necessariamente utile o significativo però. L'unico potenziale guadagno è un po 'di semplicità concettuale. Tuttavia, se procedi quindi a rimuovere elementi come il punto e virgola e i loop (richiedendo invece il concatenamento tramite altri operatori e funzioni), i programmi che utilizzano pesantemente le istruzioni diventano brutti.

Un modo più radicale ma significativo per farlo è progettare il linguaggio in modo che quasi tutto abbia un valore significativo, e usarlo in un modo in cui quasi sempre usi un'espressione per quel valore significativo , non per altri effetti. I linguaggi di programmazione funzionale lo fanno (in una certa misura, ad esempio, Haskell ha dichiarazioni, che non sono espressioni).

Le istruzioni sono usate perché nel paradigma imperativo, ci sono molte operazioni comuni che non hanno un valore di risultato utile, e poiché la nozione di istruzioni sequenziali (piuttosto che calcoli) si adatta perfettamente a tale paradigma bene. Se una grande percentuale del tuo programma sta mutando, piuttosto che calcolare nuovi valori, non ha senso che richieda producendo un valore (qual è il risultato di un ciclo for?). Al contrario, quando il tuo intero paradigma (FP) è costruito attorno al calcolo dei valori, i valori anomali che non hanno un valore di risultato non giustificano un'eccezione: invece dai loro un risultato sentinella che non significa una cosa.

    
risposta data 16.12.2012 - 14:14
fonte
5

Dipende da come definite "statement" e "expression".

Una definizione molto rigida distinguerebbe tra affermazioni come "cose che hanno effetti collaterali e forse un valore di ritorno" ed espressioni come "cose che hanno valori di ritorno, ma non possono avere effetti collaterali". Con tale definizione, nessun programma significativo può essere scritto senza almeno un'istruzione (che dovrebbe valutare un'espressione e produrre il suo valore di ritorno) - le espressioni pure da sole non possono interagire con il mondo al di fuori del programma. Un linguaggio da solo può ancora essere completamente puro (cioè non avere alcuna dichiarazione), se la parte impura viene spostata fuori dalla lingua e nell'ecosistema di supporto (che è esattamente quello che Haskell fa, sebbene il linguaggio abbia definizioni e espressioni) .

Se, tuttavia, permetti effetti collaterali nelle espressioni, allora la distinzione tra istruzioni ed espressioni diventa arbitraria e molto meno interessante - ovviamente puoi inventare un linguaggio di programmazione che consiste solo di espressioni; la maggior parte dei dialetti Lisp funziona in questo modo. In una situazione del genere, valutare un'espressione per i suoi effetti collaterali è praticamente la stessa cosa dell'esecuzione di una dichiarazione, e si potrebbe sostenere che in un tale linguaggio, espressioni e affermazioni sono la stessa cosa. La differenza tra un'istruzione e un'espressione, quindi, è solo sintattica.

Molte lingue fanno ancora questa distinzione sintattica, perché è utile non per ragioni tecniche, ma per la leggibilità. Fare qualcosa di un'espressione segnala che sei interessato al suo valore di ritorno, meno i suoi effetti collaterali; rendendola una dichiarazione dice al lettore che intendi causare effetti collaterali, e il valore restituito può essere interessante o meno.

    
risposta data 16.12.2012 - 15:00
fonte
1

Sì.

Linguaggi funzionali (e singoli linguaggi di assegnazione) tutto è un'espressione. Gli esempi sono Haskal (e SISAL). Dove entrambe le istruzioni if e i cicli restituiscono valori.

Ci sono altre classi di linguaggi: quello facile che mi viene in mente sono i linguaggi dichiarativi (sono sicuro che ce ne sono molti altri che non dipendono da dichiarazioni). Questi linguaggi non hanno nemmeno bisogno di espressioni (nello stesso modo in cui normalmente si pensa). Dichiari ciò che è vero e puoi ottenere più risultati. Quello facile qui è prolog .

    
risposta data 16.12.2012 - 19:22
fonte
0

ATL e Xtend sono linguaggi di programmazione ben funzionanti senza istruzione. Molti linguaggi funzionali sono anche senza istruzioni. Quindi, sì, un linguaggio di programmazione può funzionare bene senza dichiarazioni. Penso che le dichiarazioni siano in molte lingue un relitto dalla programmazione imperativa. Sono ancora usati perché sono ampiamente conosciuti e in alcuni casi rendono il codice più leggibile.

    
risposta data 16.12.2012 - 17:50
fonte

Leggi altre domande sui tag