MainframeSupports
tip uge 9/2007:

I denne uge vil jeg bevæge mig ind på emnet programmeringsstil, der kan føre til hidsig debat i enhver IT afdeling. Derfor kan det godt være, at du er aldeles uenig i, at denne uges tip virkelig er et tip. Nogen vil måske kalde det et skråplan.

Du kender sandsynligvis situationen i COBOL, hvor du skal foretage en række valideringer. Dem isolerer du så i en paragraf (det tætteste COBOL kommer på en procedure, som alle andre programmeringssprog er udstyret med på nær assembler). Ved den første validering der fejler, udskriver du en fejlmelding og hopper ud af paragraffen. Og nu er det så, at emnet programmeringsstil kommer på banen. Problemstillingen kan løses på mange måder. Den gammeldags og pragmatiske måde er at lave en GO TO til en exit paragraf, der følger lige efter valideringsparagraffen.

Hvis nu man som jeg hader GO TO af et godt hjerte, så bliver det svært at kode valideringen på en pænt og overskuelig måde. Hvis nu bare COBOL havde et RETURN statement, som det kendes fra PL/I og REXX...

01  returnArea pic x(1) value 'Y'.
  88  returnNow value 'Y'.
...
validations.
    if a = spaces
      display 'value for a missing'
      if returnNow next sentence end-if
    end-if
    if b not numeric
      display 'b must be numeric'
      if returnNow next sentence end-if
    end-if
    if (c < 'A' or c > 'F') and c not numeric
      display 'c must be hexadecimal'
      if returnNow next sentence end-if
    end-if
    .

NEXT SENTENCE i IBM COBOL bevirker, at programmet fortsætter eksekveringen efter det næste punktum. Derudover kræver COBOL, at NEXT SENTENCE skal være det eneste statement i en IF eller en ELSE. Man kan altså ikke nøjes med at skrive NEXT SENTENCE et hvilket som helst sted for at hoppe til efter det næste punktum. Derfor den lidt underlige konstruktion med IF returnNow NEXT SENTENCE END-IF. Det kan heldigvis skrives på een linie. Og hvorfor ikke bare skrive IF 1 = 1 i stedet for en condition variabel. Det er du nødt til, da COBOL ikke tillader betingelser, der er åbenlyst sande eller falske.

Man kan jo altid diskutere, hvor køn og gennemskuelig ovenstående kode er, men det virker i hvert fald efter hensigten. Bemærk den vigtige detalje med at NEXT SENTENCE hopper til det første statement efter det næste punktum. Hvis punktummet afslutter paragraffen, så fortsætter eksekveringen med statementet lige efter den perform, der kaldte paragraffen. Jeg vil i øvrigt generelt anbefale kun at benytte de punktummer, som er krævet af COBOL og kun at anvende paragraffer i procedure division.

Forrige danske tip        Last tip in english        Tip oversigten