Ideally, all your code fragments / functions are called from loop() and the results are returned, processed, etc. in a manner similar to GOSUB. Why is this better?
For one, it's a lot more efficient because you can set up recurring code fragments as separate functions and call them from loop() or from within another function. Secondly, you only have to write a particular function once, then you can re-use it over and over. Additionally, it is helpful from the point of view of the limited SRAM your processor has - as functions are terminated, the SRAM is freed up again. Last but certainly not least, you only have to debug a function once, you can isolate it easily and make sure it works 100% of the time.
The only downside to using functions as opposed to doing it all inside a massive loop() program is that functions cannot return arrays or multiple numbers, only single variables. Thus, you may have to define a couple of global variables (which eat up SRAM) to handle additional values, etc. that each function may need to return. But on balance, I expect the use of functions to be way more efficient in terms of SRAM utilization than doing it in a big loop.