From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Ada and "early return" - opinion/practice question
Date: Tue, 16 Mar 2021 10:46:13 +0100 [thread overview]
Message-ID: <s2pup5$1fp7$1@gioia.aioe.org> (raw)
In-Reply-To: s2pq0h$gh7$1@dont-email.me
On 2021-03-16 09:24, John McCabe wrote:
> On 15/03/2021 17:31, Stephen Leake wrote:
>> John McCabe <john@mccabe.org.uk> writes:
>>
> <..snip..>
>
>>> For example, you have a C++ function (pseudo code sort of thing):
>>>
>>> <sometype> fn(<some parameters>)
>>> {
>>> if (<some undesirable condition 1>)
>>> {
>>> return <something bad happened 1>;
>>> }
>>>
>>> if (<some undesirable condition 2>)
>>> {
>>> return <something bad 2>;
>>> }
>>>
>>> if (<some undesirable condition 3>)
>>> {
>>> return <something bad 3>;
>>> }
>>>
>>> // Only get here if everything's good...
>>> <do some real stuff>
>>> return <something good>;
>>> }
>>>
>
> <snip>
>
>> I would tend to use an exception for "something bad", but that depends
>> on the overall design.
>
> Thinking back on this point, would you do it a style where you try to do
> what needs to be done then handle the exception when it fails? For example,
> in this style
>
> begin
> <try to do a good thing>
> exception
> when blah blah
> end
>
> Or do you mean, rather than return when the undesirable condition
> occurs, do
> something like:
>
> if <some undesirable condition 1> then
> raise <some exception 1>
> end if;
>
> In other words, does each undesirable condition, when it occurs, throw a
> [potentially] different exception?
It is a difficult choice. One would expect a different exception for
each case. Unfortunately Ada lacks important features to support that
design:
1. Exception contracts. If you have many different exceptions it becomes
increasingly difficult to track them.
2. There is no way to group exceptions in a tree-like or relational
structure. You cannot name a group and handle its exceptions as whole.
You have no operations on such groups etc.
A rather pragmatic design is to use a minimal set of exceptions packing
structured information into the exception message. A quite fragile approach.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2021-03-16 9:46 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-15 16:46 Ada and "early return" - opinion/practice question John McCabe
2021-03-15 17:02 ` Dmitry A. Kazakov
2021-03-15 17:29 ` John McCabe
2021-03-16 7:08 ` Randy Brukardt
2021-03-15 17:31 ` Stephen Leake
2021-03-15 17:43 ` John McCabe
2021-03-15 18:15 ` Shark8
2021-03-15 20:39 ` Simon Wright
2021-03-15 20:56 ` Chris Townley
2021-03-16 7:19 ` Stéphane Rivière
2021-03-16 10:31 ` Jeffrey R. Carter
2021-03-16 8:28 ` John McCabe
2021-03-16 20:34 ` Simon Wright
2021-03-17 8:05 ` John McCabe
2021-03-17 11:43 ` Simon Wright
2021-03-18 8:08 ` John McCabe
2021-03-18 16:27 ` Stephen Leake
2021-03-20 13:41 ` John McCabe
2021-03-15 19:05 ` Paul Rubin
2021-03-16 8:38 ` John McCabe
2021-03-16 9:03 ` Stephen Leake
2021-03-16 9:21 ` John McCabe
2021-03-16 8:24 ` John McCabe
2021-03-16 9:13 ` Stephen Leake
2021-03-16 11:51 ` John McCabe
2021-03-16 9:46 ` Dmitry A. Kazakov [this message]
2021-03-16 10:46 ` Jeffrey R. Carter
2021-03-17 8:18 ` John McCabe
2021-03-17 10:06 ` AdaMagica
2021-03-15 18:12 ` Shark8
2021-03-15 18:20 ` John McCabe
2021-03-15 19:08 ` Paul Rubin
2021-03-15 19:37 ` Shark8
2021-03-16 7:17 ` Randy Brukardt
2021-03-16 9:26 ` Paul Rubin
2021-03-16 9:53 ` Dmitry A. Kazakov
2021-03-16 9:16 ` Stephen Leake
2021-03-16 11:04 ` Niklas Holsti
2021-03-16 22:49 ` Stephen Leake
2021-03-15 18:37 ` Jeffrey R. Carter
2021-03-15 18:54 ` John McCabe
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox