comp.lang.ada
 help / color / mirror / Atom feed
From: John McCabe <john@mccabe.org.uk>
Subject: Re: Ada and "early return" - opinion/practice question
Date: Mon, 15 Mar 2021 10:29:12 -0700 (PDT)	[thread overview]
Message-ID: <53b2508a-b005-4335-b069-810249dc6cd1n@googlegroups.com> (raw)
In-Reply-To: <s2o3ud$19im$1@gioia.aioe.org>

On Monday, 15 March 2021 at 17:02:09 UTC, Dmitry A. Kazakov wrote:
> On 2021-03-15 17:46, John McCabe wrote: 
> > I hope this isn't a FAQ (it's hard to find relevant articles) but can someone guide me on the 'normal' treatment in Ada style of what appears to be referred to (by C/C++ programmers) as early-return. 
> > 
> > For example, you have a C++ function (pseudo code sort of thing): 
<..snip..>

> 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; 

Thanks for that Dmitry; the subtlety here is the use of elsif thoughout though, which tends to be skipped in C++ sources. Put that way, what I originally wrote would be:

<sometype> fn(<some parameters>)
{
    if (<some undesirable condition 1>)
    {
        return <something bad happened 1>;
    }
    else if (<some undesirable condition 2>)
    {
        return <something bad 2>;
    }
    else if (<some undesirable condition 3>)
    {
        return <something bad 3>;
    }
    else
    {
        // Only get here if everything's good...
        <do some real stuff>
        return <something good>;
    }
}

I probably wouldn't mind that layout so much, since it makes it clear that the code that's done at the bottom only happens when all the other conditions have been satisfied, and you're less likely to get some random behaviour because of a missing return in the bunch of earlier tests.

  reply	other threads:[~2021-03-15 17:29 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 [this message]
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
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