[comp.lang.fortran] More Style Points -- One Entry, One Exit?

nraoaoc@nmt.edu (Daniel Briggs) (08/04/90)

As long as we are discussing style points, here's one I have wondered
about.  Why are people SO adamant about the ONE entry, ONE exit point
of view?  I grant you that from a CS "proof of correctness" point of
view, it is certainly the most convenient form to analyze.  Likewise,
one can create some awful code with indiscriminate use of ENTRY and
RETURN statements.  Still are these issues so important from a
practical point of view that we should never use alternate constructs?
(I know that this is largely a matter of taste, but I am trying to see
what the prevailing opinion is.)  For a simple example, I don't really
see that the following code fragment is particularly unreasonable.
(Allow me a modest set of extensions, please....)

C Normal Return
 900  type *, 'All is OK'
      return
C Error Return
 990  type *, 'Error condition'
      return
      end

Is this really any worse than the form

C Normal Return
 900  type *, 'All is OK'
      go to 999
C Error Return
 990  type *, 'Error condition'
 999  return
      end

I might argue that the first form is in fact more aesthetically
pleasing and clearer.  Alternate entries are a little harder to
justify, but at least one reasonable use jumps to mind.  How about a
subroutine that needs initialization which involves a parameter.  The
invokation of the subroutine does not need this parameter, but
requires several others.  I'm thinking of something like

      subroutine CALC_MODEL (parm1,parm2,parm3)
      ...stuff...
      return
      entry INIT_MODEL (table_size)
      ...sets up local calculations...
      return
      end

The alternatives might be to pass an initialization parameter around
that is never used after the first call.  Something like

      call CALC_MODEL (dummy, dummy, dummy, table_size)

the first time, and

      call CALC_MODEL (parm1, parm2, parm3, dummy)

on all subsequent invokations.  Ugly, but it seems to be fairly common
practice.  One could have separate calculation and initialization
subroutines, but then you need COMMONs so that they can communicate.
This seems even uglier.  So, style gurus, what are your opinions?  Do
you stick religiously to one entry, one exit, or do you bend the rules
a bit when it makes for clearer code?

-- 
This is a shared guest account, please send replies to
dbriggs@nrao.edu (Internet)
Dan Briggs / NRAO / P.O. Box O / Socorro, NM / 87801  (U.S. Snail)

shenkin@cunixf.cc.columbia.edu (Peter S. Shenkin) (08/06/90)

In article <1990Aug4.011300.17395@nmt.edu> dbriggs@nrao.edu (Daniel Briggs) writes:
>As long as we are discussing style points, here's one I have wondered
>about.  Why are people SO adamant about the ONE entry, ONE exit point
>of view?  I grant you that from a CS "proof of correctness" point of
>view, it is certainly the most convenient form to analyze.  Likewise,
>one can create some awful code with indiscriminate use of ENTRY and
>RETURN statements.  Still are these issues so important from a

I interpreted the style guide to prohibit not the appearance of more than
one RETURN in a subroutine, but rather to prohibit "RETURN n", transferring
control to different places in the calling routine, depending on the value
on n.

From my point of view, the problem with ENTRY is how complicated it is for
a human to analyse what is going on in someone else's code.  I accept that
there may be smple cases where analysis is easy, but I've learned to shudder
whenever I encounter an ENTRY in someone else's code, and I tend to avoid
it in my own, largely because I hate to make other people shudder.  (Confession:
I once used some ENTRY points, and coming back to the code later, I myself
shuddered....  That's what really did it for me!)

	-P.
************************f*u*cn*rd*ths*u*cn*gt*a*gd*jb**************************
Peter S. Shenkin, Department of Chemistry, Barnard College, New York, NY  10027
(212)854-1418  shenkin@cunixc.cc.columbia.edu(Internet)  shenkin@cunixc(Bitnet)
***"In scenic New York... where the third world is only a subway ride away."***

ghm@ccadfa.adfa.oz.au (Geoff Miller) (08/15/90)

nraoaoc@nmt.edu (Daniel Briggs) writes:

>As long as we are discussing style points, here's one I have wondered
>about.  Why are people SO adamant about the ONE entry, ONE exit point
>of view?  

Maintainability.  When you have had to maintain large chunks of unstructured
FORTRAN in which each (long) subroutine has multiple entry and exit points,
you become slightly paranoid on the subject.  Also, as I pointed out in 
another connection, it is better to have one simple rule to follow than to 
have rules which depend on the surroundings.

>  ...examples and discussion deleted...

>....  So, style gurus, what are your opinions?  Do
>you stick religiously to one entry, one exit, or do you bend the rules
>a bit when it makes for clearer code?

Any Style Guide is an ideal.  How rigidly you apply it (or have your staff 
apply it) is up to you, and I would be the first to admit that in some cases 
the very nature of FORTRAN can make stylistically pure code appear ugly.
It comes back always to maintainability, and there will always be some room
for judgement.

Actually, the only point where I bend the one-entry-one-exit rule is in the
case of an emergency stop  -  for example, where a program is designed to 
maintain two consistent data files, and yet it detects an inconsistency.  In
this case I stop the program with an informative (to me :-) message, because
I have obviously got something drastically wrong somewhere.

Geoff Miller  (ghm@cc.adfa.oz.au)
Computer Centre, Australian Defence Force Academy