[fpc-pascal] typed constants...

David Mears david.mears at cox.net
Tue Oct 24 02:28:26 CEST 2006


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.
>
> Michael.
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
>   
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. :)






More information about the fpc-pascal mailing list