comp.lang.ada
 help / color / mirror / Atom feed
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

  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