comp.lang.ada
 help / color / mirror / Atom feed
* Avoiding Kludges
@ 2002-10-30 11:45 Alan and Carmel Brain
  0 siblings, 0 replies; only message in thread
From: Alan and Carmel Brain @ 2002-10-30 11:45 UTC (permalink / raw)


"Dr Nancy's Sweetie" <kilroy@elvis.rowan.edu> wrote

> At this point, several alternative approaches occurred to me.  The first
is
> to have the function return an illegal logical location -- made difficult
> because the "Location_Type" is range limited to only legal possibilities.
> It could be kludged to have a "Any_Location_Type", which would include
some
> impossible spots, and "Real_Location_Type", which would be only legal
> spots, and then cast things around, and then . . .  Well, it's starting to
> sound pretty kludgy

Indeed it is.

> Then I realised that this could also be done with an exception:

But it's not an unusual or erroneous situation. Bad Form.

> But of these last two approaches, I don't have a feeling for which one is
> Good Ada Style(tm).

Neither: Good Ada Style , valid for -83 and -95 is to return
something of this type

<code>

type Mouse_Location_Type( InWindow : boolean := false) is
record
  case InWindow is
    when true  => CoOrdinate : Location_Type;
    when false => null;
  end case;
end record;

</code>

When referencing something of this type, you'll have to do an
explicit test to see if CoOrdinate exists. If doing a test on
the co-ordinates, the "and then" clause is useful.

Example:

<code>

-- Get the mouse location and see if it's within normal bounds.
begin

  MouseLocation := GetLocation;
  if MouseLocation.InWindow             and then
     InBounds(MouseLocation.CoOrdinate) then
     -- do stuff
  else
     -- do other stuff.
  end if;

exception
   when others => raise; -- No expected exceptions,
                         -- and we wouldn't know what to do with one
                         -- if we get one. So kick it upstairs to
                         -- a higher authority.
end;

</code>

> My own inclination is to write two functions and use an if, but I thought
> it might be worthwhile to ask people with a better sense of the style.

My qualifications as a Style Guru:

I've got a dozen successful Ada-83 projects under my belt over nearly 20
years, and was in charge of the Ada-95 spaceflight avionics for FedSat, due
for
launch in December. The style above is what I'd recommend for practical use
in large projects.

Note that I make no claim to infallibility.

Regards, AEB



--
Alan & Carmel Brain
mailto:aebrain@webone.com.au





^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-10-30 11:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-30 11:45 Avoiding Kludges Alan and Carmel Brain

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