If you really need the variables, @Bortao, then assign them just like in Alan's code and use them in place the function calls in Jon's code. It might not just be a matter of aesthetics, either. They could be important to guarantee order of evaluation. In Jon's code, `right` might be evaluated before `up` and `down`, even though the original code has it evaluated last.

Out of interest, where do the side-effects come in? Surely each function is going to be executed exactly once either way, right? Admittedly the *ordering* becomes important in my answer - but in your statement here, there's no concern about ordering as far as I can tell.