comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada and "early return" - opinion/practice question
Date: Tue, 16 Mar 2021 02:08:58 -0500	[thread overview]
Message-ID: <s2plib$34d$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: s2o3ud$19im$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:s2o3ud$19im$1@gioia.aioe.org...
> On 2021-03-15 17:46, John McCabe wrote:
...
> I see nothing wrong with it. In Ada:
>
>    function fn (<some parameters>) return <sometype> is
>    begin
>       if <some undesirable condition 1> then
>          return <something bad happened 1>;
>       elsif <some undesirable condition 2> then
>          return <something bad 2>;
>       elsif <some undesirable condition 3> then
>          return <something bad 3>;
>       else --Only get here if everything's good...
>          <do some real stuff>
>         return <something good>;
>    end fn;

I agree with Dmitry; it's not unusual to find this sort of structure in my 
code (usually raising exceptions, though).

With Ada 2012, some of those conditions probably ought to be in the 
precondition, so that people can see what not to do when writing their code. 
That would be:

    function fn (<some parameters>) return <sometype>
       with Pre => (not <some undesirable condition 1>) and then
                          (not <some undesirable condition 2>);

It's not always easy to decide where to draw the line, but a rule of thumb 
that I use is that the precondition should depend only on the parameters 
(not global state) and it should be easy to describe (preferably with a 
simple function call). If those are met, then it probably should be in the 
precondition -- and then the body of the function can assume the 
precondition is true.

                                   Randy.




  parent reply	other threads:[~2021-03-16  7:08 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 [this message]
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
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