On 24.03.2018 16:53, Jonas Maebe wrote:
> You'd also have to support it at least for record field initialisers and default parameters.

Oh yes, I'd also love to write

procedure Test(const A, B, C, D: Integer = 0);

instead of

procedure Test(const A: Integer = 0; const B: Integer = 0; const C: Integer = 0; const D: Integer = 0);

On 24.03.2018 16:53, Jonas Maebe wrote:
In the end, pretty much every extra language feature makes both the compiler and the language more complex. Therefore, I think the question for language extensions should never be "is there a good reason not to allow this", but "is it really necessary to allow this"? I.e., does it make things much easier to read, less error prone to write, and/or increase productivity a lot. I don't think the answer is "yes" for any of these questions as far as this extension is concerned.

Sorry I forgot to supply my real world example - I need to initialize local string parameters to empty strings:

procedure Test;
var
  A, B, C, D, E, F: string;
begin
  A := '';
  B := '';
  C := '';
  D := '';
  E := '';
  F := '';
// ....
end;

becomes:

procedure Test;
var
  A, B, C, D, E, F: string = '';
begin
  // ....
end;

Yes, both examples are much easier to read. You cannot convince me they are not.

On 24.03.2018 16:53, Jonas Maebe wrote:
> When seeing that compound initialisation/declaration statement for the first time, my first reflex was to interpret the initialisation as only applying to the final variable, no matter how useless that would make the language extension. As someone else posted, even languages that do allow multiple variables to be assigned in a single statement use a different syntax than the one to indicate that all variables have the same type.

Could you please tell me what post do you refer to? I probably missed it.

If you are talking about Ozz Nixon's post and the C-syntax:
int a, b, c;
int a=0, b=0, c=0;

What different syntax do you talk about? The syntax is consequent - it's about operator precedence. Comma is evaluated after the assignment ( http://en.cppreference.com/w/cpp/language/operator_precedence ) - this is well documented. A similar scenario for Pascal would be: var A = 0, B = 0, C = 0: Integer; But you know this is not Pascal syntax.

int a=b=0; is not supported in gcc

JavaScript: I am not aware you can declare type of variable in JavaScript. The operator precedence is the same as in C: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence so var a=5,b=1; is logical and well documented like in C.
Yes, the alternative syntax var a=b=1; is valid in JavaScript.

So in Pascal, var A, B, C: Integer = 0; makes perfect sense and undoubtedly means all three variables are initialized to 0

Ondrej
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to