It depends on how you want to use this.
I'd probably want my code to be non-blocking, so the "delay" has to go, and I can't see the point of the "flush" so that may as well go too.
If you're going to call the function every time through "loop", but only want to print when you've got a new value, then you need to signal somehow that reception isn't complete and that you should not print.
You could do this by having the function return status rather than a value, and pass the return value by reference, or by pointer.
Or you could use the Serial event mechanism, and pass the value via a global.
Lots of ways of skinning this feline.