[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