Re: Informix 4GL question
Posted in 1997
Douglas Wilson (dgwilson@gte.net) }X-Informix-List-Id: <news.36545> } }I've helped users who were allowed to do this sort of thing, didn't }realize they were already 5 or 10 levels deep, then wonder why they're }getting errors. If you really want to allow the back and forth calling }(it can be useful I admit), you could pass in some argument to only }allow just so many levels of calling, and maybe warn the user that }they're already so many levels deep and using up system resources, and }maybe to please release them. Alternatively, and often preferable, forbid re-entering the customers screen by detecting when it is already active, and the same for the orders screen. There are many ways to do this. The grubby ones use global variables, the cleaner ones use arguments to the functions. }Belakimem wrote: }> Suppose you have an orders screen / function with an option to transfer to }> the customer screen. }> }> Suppose also your customer screen / function can transfer to the orders }> screen. }> }> Both functions can be called from a menu in main first, and both have an }> option to exit back to the main menu. }> }> Now, it is obviously possible to call customers then orders, then }> customer, then orders etc. and travel endlessly down many levels of the }> function / subroutine stack. }> }> In 4GL would this be good programming practice? What are your opinions on }> avoiding this problem, if it is one. Is it better to always return to the }> calling function before going into this spiral? I'd suggest that allowing indefinite mutual recursion like this is undesirable because it confuses the user -- that makes it bad programming practice regardless of the implementation language. It may be better to return to the calling function. It depends on how much state you want to preserve when you re-enter the customer menu after being in the order menu (having got to the order menu from the customer menu). Yours, Jonathan Leffler (johnl@informix.com) #include <disclaimer.h>