comp.lang.ada
 help / color / mirror / Atom feed
From: "John R. Strohm" <strohm@airmail.net>
Subject: Re: Ada 0x, exception idea ?
Date: Sat, 26 Jul 2003 10:53:49 -0500
Date: 2003-07-26T10:53:49-05:00	[thread overview]
Message-ID: <bfu8fb$gj1@library1.airnews.net> (raw)
In-Reply-To: mailman.0.1059231120.320.comp.lang.ada@ada.eu.org

"sk" <noname@myob.com> wrote in message
news:mailman.0.1059231120.320.comp.lang.ada@ada.eu.org...
> Hi,
>
> IDEA
>
> when <boolean-condition> raise <exception-name>;
>
> OR
>
> when <boolean-condition> then raise <exception-name>;
>
> OR
>
> raise <exception-name> when <boolean-condition>;
>
> SITUATION
>
> Call_Condition_Setting_Procedure (Paramters, Success);
>
> if not Success then
>      raise Call_Failed;
> end if;
>
>
> REPLACED BY
>
> Call_Condition_Setting_Procedure (Paramters, Success);
>
> when not Success raise Call_Failed;
> OR
> when not Success then raise Call_Failed;
> OR
> raise Call_Failed when not Success;
>
>
> Thoughts ?
>
> (This is a ghost of Timex/Sinclair Basic "ON ERR GOSUB" (sorry to
> pollute with the "B" word :-)).

Bletch.

As you observe, your proposed constructs are precisely equivalent to

    call_procedure(..., success);
    if not success then
      raise call_failed;
    end if;

Ada in general does not bother with unnecessary syntactic sugar, which is
what this is.

Second, and more general: If an exception should be raised SOME of the time
when the procedure fails, it probably should be raised ALL of the time, and
then the procedure itself should raise the exception, not set a status flag
and rely on the caller to check the flag and raise the exception if
necessary.

Observe that raising the exception inside the procedure is more robust: it
REQUIRES every caller to be prepared to trap the exception, and hence handle
a potential error case.  (One of the more common errors made by C
programmers is forgetting to check a pass/fail status return parameter.)





  reply	other threads:[~2003-07-26 15:53 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-26 14:52 Ada 0x, exception idea ? sk
2003-07-26 15:53 ` John R. Strohm [this message]
2003-07-26 17:08   ` sk
2003-07-26 17:08   ` sk
2003-07-27  2:46     ` Wesley Groleau
2003-07-27 16:35     ` Hyman Rosen
2003-07-27  9:10 ` Preben Randhol
     [not found] <3F229597.3090909@myob.com>
2003-07-27 11:42 ` sk
2003-07-27 15:33   ` Nick Roberts
2003-07-27 17:13     ` Samuel Tardieu
2003-07-28 12:41       ` Nick Roberts
2003-07-28  0:23   ` Wesley Groleau
2003-07-28  2:46     ` John R. Strohm
2003-07-28  3:23       ` Hyman Rosen
2003-07-28  3:24       ` Hyman Rosen
2003-07-27 15:51 ` sk
2003-07-27 17:22   ` Nick Roberts
2003-07-27 19:30     ` sk
2003-07-27 23:04       ` John R. Strohm
2003-07-28  0:07     ` sk
2003-07-28  0:27       ` Wesley Groleau
2003-07-28  2:50       ` John R. Strohm
2003-07-28  0:21 ` sk
2003-07-28  8:38   ` Preben Randhol
2003-07-28 11:24 ` sk
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox