I realize this is a bit of a change in subject (and it's not as if we need yet 
another one), but I avoid this construction.  My phobia is based on an extreme 
example:  In their zeal never to use GOTOs, I've frequently seen programmers 
write paragraphs like this:

  PERFORM 1050-LOOP VARYING JC FROM 1 BY 1 TO 99

  1050-LOOP.
    IF X < 1000
      IF FIRST-NAME NOT = "ROBERT"
        IF TYPE = 195
          IF SO-ON
            IF SO-FORTH
              EXECUTE 1050-SUCH-AND-SUCH
              END-IF
            END-IF
          END-IF
        END-IF
      END-IF

Gives me a headache to try to evaluate that.  Much better, in my opinion, to 
introduce ONE LOUSY "GOTO EO-PARAGRAPH" like this:

  PERFORM 1050-LOOP THRU 1059-LOOP VARYING JC FROM 1 BY 1 TO 99

  1050-LOOP.
    IF X > 999 GOTO 1059-LOOP.
    IF FIRST-NAME = "ROBERT" GOTO 1059-LOOP.
    IF TYPE <> 195 GOTO 1059-LOOP.
    IF NOT SO-ON GOTO 1059-LOOP.
    IF NOT SO-FORTH GOTO 1059-LOOP.
    EXECUTE 1050-SUCH-AND-SUCH
  1059-LOOP.

Keep in mind I haven't programmed in COBOL since Y2K; I had to look up the 
syntax, I probably got part of it wrong nonetheless, and I'll bet there are 
easier ways to do it nowadays.  In REXX, for example, they have the ITERATE 
statement:

  do jc=1 to 99
    if x>99 then iterate
    if firstname='ROBERT' then iterate
    if type<>195 then iterate
    if \soon then iterate
    if \soforth then iterate
    call suchandsuch
    end

However you do it, I vastly prefer skip-to-next-item over nested Ifs.  But I 
confess that one single nested IF is not going to give me a headache; I just 
react when I see one.  Not your fault :).

---
Bob Bridges, robhbrid...@gmail.com, cell 336 382-7313

/* In an emergency, a drawstring from a parka hood can be used to strangle a 
snoring tent mate.  -"Camping Tips" */

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Gibney, Dave
Sent: Friday, June 5, 2020 16:17

Using OP
         IF TVOLL (IND1) NOT = HIGH-VALUE
         AND SMOD (IND1) = 'B' OR 'R'

I would do
         IF TVOLL (IND1) NOT = HIGH-VALUE
              IF SMOD (IND1) = 'B' OR 'R'
                  Do the stuff

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to