2010/2/25 Phil Smith III <[email protected]>
......
> Another great use for SIGNAL (and one that your rules do admit to) is for
> error exits. I hate code like this:
>
> address command 'somecmd'
> if rc <> 0 then do
> say 'That was an error, rc='rc
> exit rc
> end
>
> Far better IMHO is:
>
> address command 'somecmd'
> if rc <> 0 then signal Error
>
> This keeps the mainline more compact and readable, and it's pretty clear to
> the reader that "Hey, we're going somewhere to handle the error and we ain't
> comin' back"!
>
> We now return you to the actual thread on SFS.
>
> ...phsiii
>
I agree with the "use Signal sometimes", in cases where one will not return,
it is more clear indeed. But, the example above "if rc<>0 then signal
Error" isn't very practical: you cannot pass parameters. So I have a Call
to my errorexit: routine. The name of the called routine makes it clear to
the reader that one will not return from there.
if rc<>0 then call errExit rc,'Something was wrong','Please try again'
.......
ERREXIT: /* general errorexit routine */
parse upper source . . myname .
do i=2 to arg() /* give errormessages (if any) */
say myname':' arg(i)
end
exit arg(1)
I guess we devoted some chapter to it in our selfstudy Telecourse:
http://www.vm.ibm.com/download/packages/descript.cgi?TCVM1
--
Kris Buelens,
IBM Belgium, VM customer support