delphi - Sintaxis de estructura adecuada para Pascal si luego comienza fin y;
inno-setup pascalscript (1)
Han pasado alrededor de 20 años desde la última vez que tuve que escribir en Pascal.
Parece que no puedo usar los elementos de estructura del lenguaje correctamente donde estoy anidando
if then
bloqueo usando
begin
y
end
.
Por ejemplo, esto me da un error del compilador
"Identificador esperado"
.
procedure InitializeWizard;
begin
Log(''Initialize Wizard'');
if IsAdminLoggedOn then begin
SetupUserGroup();
SomeOtherProcedure();
else begin (*Identifier Expected*)
Log(''User is not an administrator.'');
msgbox(''The current user is not administrator.'', mbInformation, MB_OK);
end
end;
end;
Por supuesto, si elimino el bloque
if then
y los bloques de
begin end
asociados con ellos, entonces todo está bien.
A veces entiendo bien este tipo de sintaxis y funciona bien, pero los problemas se exasperan al anidar los bloques
if then else
.
Resolver el problema no es suficiente aquí. Quiero tener una mejor comprensión de cómo usar estos bloques. Claramente me falta un concepto. Algo de C ++ o C # probablemente se está arrastrando desde otra parte de mi mente y está entorpeciendo mi comprensión. He leído algunos artículos al respecto, y creo que lo entiendo y luego no.
Debes hacer coincidir cada
begin
con un
end
en el mismo nivel, como
if Condition then
begin
DoSomething;
end
else
begin
DoADifferentThing;
end;
Puede acortar el número de líneas utilizadas sin afectar la ubicación, si lo prefiere. (Sin embargo, lo anterior podría ser más fácil cuando se está acostumbrando a la sintaxis).
if Condition then begin
DoSomething
end else begin
DoADifferentThing;
end;
Si está ejecutando una sola declaración, el
begin..end
son opcionales.
Tenga en cuenta que la primera condición no contiene una terminación
;
, ya que aún no está terminando la declaración:
if Condition then
DoSomething
else
DoADifferentThing;
El punto y coma es opcional en la última instrucción de un bloque (aunque normalmente lo incluyo incluso cuando es opcional, para evitar problemas futuros cuando agrega una línea y se olvida de actualizar la línea anterior al mismo tiempo).
if Condition then
begin
DoSomething; // Semicolon required here
DoSomethingElse; // Semicolon optional here
end; // Semicolon required here unless the
// next line is another ''end''.
También puede combinar bloques de instrucciones simples y múltiples:
if Condition then
begin
DoSomething;
DoSomethingElse;
end
else
DoADifferentThing;
if Condition then
DoSomething
else
begin
DoADifferentThing;
DoAnotherDifferentThing;
end;
El uso correcto para su código sería:
procedure InitializeWizard;
begin
Log(''Initialize Wizard'');
if IsAdminLoggedOn then
begin
SetupUserGroup();
SomeOtherProcedure();
end
else
begin
Log(''User is not an administrator.'');
msgbox(''The current user is not administrator.'', mbInformation, MB_OK);
end;
end;