[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