comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada case-statement
Date: Thu, 15 Mar 2018 17:20:28 -0500
Date: 2018-03-15T17:20:28-05:00	[thread overview]
Message-ID: <p8erjd$mo5$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: p8dbcp$11bc$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:p8dbcp$11bc$1@gioia.aioe.org...
> On 15/03/2018 00:16, Randy Brukardt wrote:
...
> Ugh, that could be a source quite intractable bugs. If so, I use this 
> pattern time to time then:
>
> declare
>    Selector : Day_Type renames Calculate_Day;
>    subtype Weekend_Subtype is Day_Type range Sat .. Sun;
> begin
>    case Selector is
>      when Mon .. Fri =>
>         ...
>      when Weekend_Subtype =>
>         ...
>         case Weekend_Subtype'(Selector) is
>            when Sat =>
>               ...
>            when Sun =>
>               ...
>         end case;
>   end case;

You're right, that's better.

> And this does not work with
>
>    when Odd_Week_Day : Mon | Wed | Fri =>

Wrong:

   subtype Odd_Week_Day is Day_Type
      with Static_Predicate => Odd_Week_Day in Mon | Wed | Fri;

...
      when Odd_Week_Day =>
         ...
         case Odd_Week_Day'(Selector) is

The subtype is the (admittedly ugly - I wanted something cleaner) way to 
declare a set constraint. If the predicate is static, it works in loops and 
case statements with the usual rules.

>> Personally, I don't like declarations without explicit subtypes, as the
>> subtype of an object is critical for understanding the semantics. Not 
>> having
>> the subtype in the source makes it much harder to understand the 
>> semantics.
>
> Huh, it is definitely true for types, but Ada subtypes are designed for 
> exactly the opposite. On many occasions people here argued that Ada 
> subtype is not a type. Well, from that point of view it must have exactly 
> the same semantics as its base. What's is there to understand more?

You have to have the subtype in the source to know the type -- Ada does not 
have names for types.

>> Expanding the "id :" notation would definitely harm understandability of 
>> Ada
>> code, and with readability being pretty much the first priority for Ada
>> syntax, that's a bad thing.
>
> I don't see how giving a name could add anything to the semantics. Each 
> alternative exhaustively defines a constraint. No reason to contaminate 
> the name space.

How does
     when Today: Thurs =>
exhaustively define anything? It just defines a constraint, but there is not 
way to know of what. You have to look at the selecting_expression to find 
the type -- but it doesn't show it either. It might a function call as in 
this example. So then you have to look at the function to get the return 
type, but it will turn out to have been implemented in a generic or 
inherited in OOP. So now you're on 4-5 hops and you've forgotten why you 
were looking for the type in the first place. :-)

Surely a fancy IDE would help, but if you need a fancy IDE to undertstand 
your code, it isn't readable.

                              Randy.



  reply	other threads:[~2018-03-15 22:20 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-14 17:35 Ada case-statement Stephen Davies
2018-03-14 17:49 ` Dmitry A. Kazakov
2018-03-15  0:57   ` Robert I. Eachus
2018-03-15  3:10     ` Dan'l Miller
2018-03-15  5:54       ` J-P. Rosen
2018-03-15  7:56         ` Niklas Holsti
2018-03-15 12:21           ` Dan'l Miller
2018-03-15 17:22             ` Mill processor (Was: Re: Ada case-statement) Niklas Holsti
2018-03-15 21:50     ` Ada case-statement Randy Brukardt
2018-03-14 22:22 ` Mehdi Saada
2018-03-14 23:16 ` Randy Brukardt
2018-03-15  5:04   ` gautier_niouzes
2018-03-15  7:50   ` Jacob Sparre Andersen
2018-03-15 22:05     ` Randy Brukardt
2018-03-15  8:37   ` Dmitry A. Kazakov
2018-03-15 22:20     ` Randy Brukardt [this message]
2018-03-16  8:54       ` Dmitry A. Kazakov
2018-03-16 23:49         ` Randy Brukardt
2018-03-17  7:59           ` Dmitry A. Kazakov
2018-03-15 15:37   ` Stephen Davies
2018-03-15 16:33     ` J-P. Rosen
2018-03-15 17:01       ` Dmitry A. Kazakov
2018-03-15 18:41         ` Shark8
2018-03-15 21:12           ` Jeffrey R. Carter
2018-03-18  5:41             ` Robert I. Eachus
2018-03-18  6:57               ` Spiros Bousbouras
2018-03-18  9:17               ` Jeffrey R. Carter
2018-03-18 12:53                 ` Simon Wright
2018-03-15 18:50     ` Jere
2018-03-15 20:40       ` Anh Vo
2018-03-15 22:24     ` Randy Brukardt
2018-03-16  9:53       ` Stephen Davies
2018-04-03 17:56   ` marciant
replies disabled

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