[fpc-pascal] typed constants...
Marc Santhoff
M.Santhoff at t-online.de
Tue Oct 24 12:26:42 CEST 2006
Am Montag, den 23.10.2006, 20:28 -0400 schrieb David Mears:
> Michael Van Canneyt wrote:
> > On Mon, 23 Oct 2006, David Mears wrote:
> >
> >
> >> is this bit of syntactic weirdness a fpc element, or from delphi. I've
> >> largely been away from pascal since the early 90s, mostly only using it to
> >> write dos-y non-object-y utilities, for which it excels.
> >> typed constants seem to basically to be like the static keyword from c.. but
> >> not a var modifier.. It just seems it should be a modifier for var. such as
> >> var st:string static;.. since.. constant is usually pretty wrapped up in the
> >> meaning of "not changing." and that it has a constant, initialized, reserved
> >> place in memory is.. well.. abstract. Especially since you can initialize
> >> your variables now, then the only thing that makes it special is that it is a
> >> global variable with a local scope.
> >>
> >> I'm not the sort who thinks pascal should be C, because I hate having to work
> >> with C or it's work likes. I just think that being able to call something
> >> constant and change it muggles the syntactic clarity of the language, which is
> >> otherwise rather good.
> >>
> >
> > Initialized constants are deprecated, and should be replaced by initialized
> > variables, as in Delphi:
> >
> > Var
> > A : String = 'Some string';
> >
> > "Real" constants (in the sense of 'not changing') do not need to be typed in
> > the first place so
> >
> > Const
> > A = 'Some String';
> >
> > Will do just fine. You now have both possibilities and they each have clear
> > and unambiguous meaning.
> >
> I was less interested in the initialized part- which I'm happy you can
> do with variables now but would not be overly concerned setting them in
> code as I always had to in the past, as the "It should be stressed that
> typed constants are initialized at program start. This is also true of
> local typed constants." Which I take it to mean that they retain their
> value when out of scope, which provides encapsulation at a level that
> can only otherwise be done with objects.
>
> like
> function HowManyBirds:integer;
> const n: integer = 1;
> begin
> n:=n * 2;
> end;
>
> ignoring that the function here is useless, that's a useful ability..
> while you can define variables anywhere not in procedure, nothing else
> quite does that. It's just I'd rather it be
> var n: integer = 1; static;
> var n: integer = 1; fixed;
> or some such. It makes more sense linguistically, in an otherwise very
> sensible language. :)
Why don't you just type and initialize your constants? I'm doing it all
the time like this (from a real world working program):
const
H5FILE_NAME : string = 'SDS_P.h5';
DATASETNAME : string = 'IntArray';
That should do what you want IIRC,
Marc
More information about the fpc-pascal
mailing list