Se non ci sono problemi nel considerare una proposizione come espressione, perché in alcuni linguaggi di programmazione c'è stata una distinzione? [duplicare]

1

Perché abbiamo la distinzione tra affermazioni ed espressioni nella maggior parte dei linguaggi di programmazione?

Ad esempio, in Java, assumendo f e g return ints, questo non verrà compilato perché è un'istruzione e le istruzioni non restituiscono valori.

// won't compile
int i = if (pred) { 
    f(x); 
} else {
    g(x);
}

ma in Scala, è molto felice di trattare se come espressione.

// compiles fine
val i: Int = if (pred) f(x) else g(x)

Quindi, se non ci sono problemi nel trattare un'istruzione if come espressione, perché c'è stata una distinzione in primo luogo?

    
posta cdmckay 22.08.2014 - 08:35
fonte

2 risposte

0

Il if potrebbe restituire un valore qui perché entrambe le funzioni restituiscono anche valori. Ma ci sono anche% delle funzioni di% co_de, e void e f potrebbero avere diversi tipi di ritorno, il che renderebbe poco chiaro quale sarebbe il tipo di questo g . In effetti, se si vietano le dichiarazioni da un linguaggio di programmazione, si vietano anche i metodi if , la tipizzazione rigorosa e alcuni costrutti più comuni che molte persone non vogliono vedere andare.

(E sì, sono consapevole che altre persone sarebbero molto contente di vederli andare e diranno a te ea tutti e ad alta e grande volume quanto saranno contenti - questa è una guerra santa, per favore don ' t alimentalo.)

    
risposta data 22.08.2014 - 08:47
fonte
0

Perché è confuso, quindi è più facile introdurre bug.

Uno dei più famosi in C è: if (a = b) invece di if (a == b) . Con una distinzione tra espressioni e affermazioni, il compilatore si sarebbe lamentato.

Proseguendo con C, esiste una forma specifica di if ogni volta che deve restituire un valore:

pred ? f(x) : g(x)
    
risposta data 22.08.2014 - 09:39
fonte

Leggi altre domande sui tag