Home > Archive > Cobol > August 2007 > So here he goes again!
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
So here he goes again!
|
|
| Frank Swarbrick 2007-08-15, 6:55 pm |
| So here he goes again!
Below are two snippets of code. The first is how it is now and the second
is the new one.
PERFORM REPOSITION-ACCOUNT
IF NOT-RELATED-CUSTOMER
IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
CONTINUE
ELSE
ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
END-IF
MOVE UMA1-ADDR-KEY TO WS-HOLD-CUST-ADDR-KEY
IF UPDATE-MAIL-CODE
MOVE MAIL-CODE-TC TO MR-TC
MOVE HOLD-OLD-MAIL-CODE TO MRO-X
MOVE HOLD-NEW-MAIL-CODE TO MRN-X
PERFORM WRITE-ACCT-MAINTENANCE
END-IF
PERFORM UPDATE-ACCT-MSTR
ELSE
IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
IF UPDATE-MAIL-CODE
MOVE MAIL-CODE-TC TO MR-TC
MOVE HOLD-OLD-MAIL-CODE TO MRO-X
MOVE HOLD-NEW-MAIL-CODE TO MRN-X
PERFORM WRITE-ACCT-MAINTENANCE
PERFORM UPDATE-ACCT-MSTR
END-IF
ELSE
ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
IF UPDATE-MAIL-CODE
MOVE MAIL-CODE-TC TO MR-TC
MOVE HOLD-OLD-MAIL-CODE TO MRO-X
MOVE HOLD-NEW-MAIL-CODE TO MRN-X
PERFORM WRITE-ACCT-MAINTENANCE
END-IF
PERFORM UPDATE-ACCT-MSTR
END-IF
MOVE UMA1-CUST-NBR TO WS-SSA-Q-D-RELN-CUST-NBR
MOVE WS-HOLD-SEQ-NBR TO WS-SSA-Q-D-RELN-SEQ
PERFORM REPOSITION-ACCT-RELN
MOVE UMA1-ADDR-KEY TO D-RELN-USE-ADDR-KEY
PERFORM UPDATE-ACCT-RELN
END-IF.
--------------------------------------------------------------------
PERFORM REPOSITION-ACCOUNT
IF NOT-RELATED-CUSTOMER
IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
CONTINUE
ELSE
ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
END-IF
MOVE UMA1-ADDR-KEY TO WS-HOLD-CUST-ADDR-KEY
PERFORM HANDLE-MAIL-CODE
PERFORM UPDATE-ACCT-MSTR
ELSE
IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
PERFORM HANDLE-MAIL-CODE
IF UPDATE-MAIL-CODE
PERFORM UPDATE-ACCT-MSTR
END-IF
ELSE
ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
PERFORM HANDLE-MAIL-CODE
PERFORM UPDATE-ACCT-MSTR
END-IF
MOVE UMA1-CUST-NBR TO WS-SSA-Q-D-RELN-CUST-NBR
MOVE WS-HOLD-SEQ-NBR TO WS-SSA-Q-D-RELN-SEQ
PERFORM REPOSITION-ACCT-RELN
MOVE UMA1-ADDR-KEY TO D-RELN-USE-ADDR-KEY
PERFORM UPDATE-ACCT-RELN
END-IF.
HANDLE-MAIL-CODE.
IF UPDATE-MAIL-CODE
MOVE MAIL-CODE-TC TO MR-TC
MOVE HOLD-OLD-MAIL-CODE TO MRO-X
MOVE HOLD-NEW-MAIL-CODE TO MRN-X
PERFORM WRITE-ACCT-MAINTENANCE
END-IF.
Obviously I re-did it to refactor redundant code in to a single procedure.
This is all well and good, in that the redundant code is fairly small and I
am comfortable placing it within the IF statement in the new procedure.
My question, is, what would you do if the code that is to be performed is
many lines long, including perhaps other conditional logic. Would you:
1) Keep it like it is, putting the code within the IF statement?
2) Move the code in to a separate paragraph (WRITE-MAIL-CODE-MAINT), and
perform that paragraph from within the HANDLE-MAIL-CODE IF statement?
3) Rename HANDLE-MAIL-CODE itself to WRITE-MAIL-CODE-MAINT and put the IF
statements in the main procedure above (doing the test each of the three
times before performing the new paragraph).
4) Escape out of HANDLE-MAIL-CODE immediately if UPDATE-MAIL-CODE is not
true (using EXIT PARAGRAPH, if available; otherwise necessitating the
restructure of the logic to allow for a useful GO TO EXIT, either by using
SECTIONs or PERFORM...THRU (argh, I know!))
5) Put it in a subroutine which you would exit (EXIT PROGRAM) if
UPDATE-MAIL-CODE was not true?
6) Something else entirely?
HANDLE-MAIL-CODE.
IF NOT UPDATE-MAIL-CODE
EXIT PARAGRAPH.
MOVE MAIL-CODE-TC TO MR-TC
MOVE HOLD-OLD-MAIL-CODE TO MRO-X
MOVE HOLD-NEW-MAIL-CODE TO MRN-X
PERFORM WRITE-ACCT-MAINTENANCE
| |
| Alistair 2007-08-16, 6:55 pm |
| On 15 Aug, 21:43, "Frank Swarbrick" <Frank.Swarbr...@efirstbank.com>
wrote:
> So here he goes again!
>
> 2) Move the code in to a separate paragraph (WRITE-MAIL-CODE-MAINT), and
> perform that paragraph from within the HANDLE-MAIL-CODE IF statement?
>
At the risk of upsetting some people, I would:
Move the code to a separate SECTION and perform that SECTION from
within the Handle-Mail-Code statement.
;-P
| |
| William M. Klein 2007-08-22, 6:55 pm |
| <JUST JOKING>
Put the redundant code into a COPY member and COPY it in (in the appropriate
places - using REPLACING if any cases differ). "Single sourced" routines
(common logic) are easier to "maintain" when a change occurs.
--
Bill Klein
wmklein <at> ix.netcom.com
"Frank Swarbrick" <Frank.Swarbrick@efirstbank.com> wrote in message
news:46C31127.6F0F.0085.0@efirstbank.com...
> So here he goes again!
>
> Below are two snippets of code. The first is how it is now and the second
> is the new one.
>
> PERFORM REPOSITION-ACCOUNT
> IF NOT-RELATED-CUSTOMER
> IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
> CONTINUE
> ELSE
> ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
> END-IF
> MOVE UMA1-ADDR-KEY TO WS-HOLD-CUST-ADDR-KEY
> IF UPDATE-MAIL-CODE
> MOVE MAIL-CODE-TC TO MR-TC
> MOVE HOLD-OLD-MAIL-CODE TO MRO-X
> MOVE HOLD-NEW-MAIL-CODE TO MRN-X
> PERFORM WRITE-ACCT-MAINTENANCE
> END-IF
> PERFORM UPDATE-ACCT-MSTR
> ELSE
> IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
> IF UPDATE-MAIL-CODE
> MOVE MAIL-CODE-TC TO MR-TC
> MOVE HOLD-OLD-MAIL-CODE TO MRO-X
> MOVE HOLD-NEW-MAIL-CODE TO MRN-X
> PERFORM WRITE-ACCT-MAINTENANCE
> PERFORM UPDATE-ACCT-MSTR
> END-IF
> ELSE
> ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
> IF UPDATE-MAIL-CODE
> MOVE MAIL-CODE-TC TO MR-TC
> MOVE HOLD-OLD-MAIL-CODE TO MRO-X
> MOVE HOLD-NEW-MAIL-CODE TO MRN-X
> PERFORM WRITE-ACCT-MAINTENANCE
> END-IF
> PERFORM UPDATE-ACCT-MSTR
> END-IF
> MOVE UMA1-CUST-NBR TO WS-SSA-Q-D-RELN-CUST-NBR
> MOVE WS-HOLD-SEQ-NBR TO WS-SSA-Q-D-RELN-SEQ
> PERFORM REPOSITION-ACCT-RELN
> MOVE UMA1-ADDR-KEY TO D-RELN-USE-ADDR-KEY
> PERFORM UPDATE-ACCT-RELN
> END-IF.
> --------------------------------------------------------------------
> PERFORM REPOSITION-ACCOUNT
> IF NOT-RELATED-CUSTOMER
> IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
> CONTINUE
> ELSE
> ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
> END-IF
> MOVE UMA1-ADDR-KEY TO WS-HOLD-CUST-ADDR-KEY
> PERFORM HANDLE-MAIL-CODE
> PERFORM UPDATE-ACCT-MSTR
> ELSE
> IF WS-HOLD-DATE-LAST-MTCE GREATER THAN +99999999
> PERFORM HANDLE-MAIL-CODE
> IF UPDATE-MAIL-CODE
> PERFORM UPDATE-ACCT-MSTR
> END-IF
> ELSE
> ADD +100000000 TO WS-HOLD-DATE-LAST-MTCE
> PERFORM HANDLE-MAIL-CODE
> PERFORM UPDATE-ACCT-MSTR
> END-IF
> MOVE UMA1-CUST-NBR TO WS-SSA-Q-D-RELN-CUST-NBR
> MOVE WS-HOLD-SEQ-NBR TO WS-SSA-Q-D-RELN-SEQ
> PERFORM REPOSITION-ACCT-RELN
> MOVE UMA1-ADDR-KEY TO D-RELN-USE-ADDR-KEY
> PERFORM UPDATE-ACCT-RELN
> END-IF.
>
> HANDLE-MAIL-CODE.
> IF UPDATE-MAIL-CODE
> MOVE MAIL-CODE-TC TO MR-TC
> MOVE HOLD-OLD-MAIL-CODE TO MRO-X
> MOVE HOLD-NEW-MAIL-CODE TO MRN-X
> PERFORM WRITE-ACCT-MAINTENANCE
> END-IF.
>
> Obviously I re-did it to refactor redundant code in to a single procedure.
> This is all well and good, in that the redundant code is fairly small and I
> am comfortable placing it within the IF statement in the new procedure.
>
> My question, is, what would you do if the code that is to be performed is
> many lines long, including perhaps other conditional logic. Would you:
>
> 1) Keep it like it is, putting the code within the IF statement?
>
> 2) Move the code in to a separate paragraph (WRITE-MAIL-CODE-MAINT), and
> perform that paragraph from within the HANDLE-MAIL-CODE IF statement?
>
> 3) Rename HANDLE-MAIL-CODE itself to WRITE-MAIL-CODE-MAINT and put the IF
> statements in the main procedure above (doing the test each of the three
> times before performing the new paragraph).
>
> 4) Escape out of HANDLE-MAIL-CODE immediately if UPDATE-MAIL-CODE is not
> true (using EXIT PARAGRAPH, if available; otherwise necessitating the
> restructure of the logic to allow for a useful GO TO EXIT, either by using
> SECTIONs or PERFORM...THRU (argh, I know!))
>
> 5) Put it in a subroutine which you would exit (EXIT PROGRAM) if
> UPDATE-MAIL-CODE was not true?
>
> 6) Something else entirely?
>
> HANDLE-MAIL-CODE.
> IF NOT UPDATE-MAIL-CODE
> EXIT PARAGRAPH.
>
> MOVE MAIL-CODE-TC TO MR-TC
> MOVE HOLD-OLD-MAIL-CODE TO MRO-X
> MOVE HOLD-NEW-MAIL-CODE TO MRN-X
> PERFORM WRITE-ACCT-MAINTENANCE
> .
>
> My preference is number 6. :-)
>
> Anyway, since there are only a few statements I'm going to code it as I have
> above, but I'm always looking for a better way. Not that I ever take
> anyone's advice <g>, but I still like to hear it.
>
> Frank
>
| |
| Frank Swarbrick 2007-08-22, 6:55 pm |
| Great idea, Bill!
:-)
n 8/22/2007 at 3:35 PM, in message
<J_1zi.122238$sR4.36482@fe08.news.easynews.com>, William M.
Klein<wmklein@nospam.netcom.com> wrote:
<> JUST JOKING>
>
> Put the redundant code into a COPY member and COPY it in (in the
> appropriate
> places - using REPLACING if any cases differ). "Single sourced" routines
>
> (common logic) are easier to "maintain" when a change occurs.
|
|
|
|
|