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?