Coming from SML world I killed the notion of the function as an expression, because implicit evaluation of the expression (and thus — a function) can lead to undesired behaviour. Probably the best examples come from Scala forums, where it is asked what happened with
if-no-else expression — it is not a proof, but solid hint, that some people were taken by surprise.
One could say it is solely Scala issue, because of snowball effect — the aforementioned function-expression notion and inference of result type — but the less surprises in code, the better. Besides, not only writing code matters, but also maintaining it. And actually seeing “here, here, it is the result of the function” is much clear than doing manual parsing and evaluation in the head.
However there is one exception… if there is no big code, because entire function is simple expression. In case of such one-liner function could be an expression without loss of readability.
Thus in Skila a function is either single expression:
def foo() : Int = addThis(5,2);
or a list of statements:
def bar() : Int do var x : Int = addThis(7,3); return x+10; end
but in both cases the result type is not inferred and has to be given explicitly.