Instrucciones
Gramática
program = { statement } ;
statement = assignment | exprStmt | block | ifStmt | forStmt | ";" ;
assignment = identifier "=" expression ";" ;
exprStmt = expression ";" ; (* result discarded, e.g. a builtin call *)
block = "{" { statement } "}" ;
ifStmt = "if" "(" expression ")" statement [ "else" statement ] ;
forStmt = "for" "(" identifier "=" expression ";"
expression ";"
identifier "=" expression ")" statement ;
expression = see the precedence table under Operators ;
call = identifier "(" [ expression { "," expression } ] ")" ;
Asignación
name = expression; es una instrucción, no una expresión. Por eso a = b = 1;, if (x = 5) y
f(x = 1) son todos errores. No hay asignación compuesta (+=) ni ++/--. Escriba
i = i + 1;.
Instrucciones de expresión
Cualquier expresión seguida de ; es una instrucción, y su valor se descarta. Así se llama a una
función integrada por su efecto: WindowMinimize(w);. El Bool que devuelve la mayoría de las
funciones integradas se ignora a menos que lo capture: ok = FileDelete(p);.
if / else
Los paréntesis alrededor de la condición son obligatorios. La rama es una sola instrucción o un
bloque { }. else if es simplemente un else cuya instrucción es otro if, así que las cadenas
funcionan. Un else colgante pertenece al if más cercano. Use llaves cuando eso resulte ambiguo.
n = MathRandom(1, 100);
if (n < 10) {
size = "small";
} else if (n < 50) {
size = "medium";
} else {
size = "large";
}
if (n == 42) UtilityPrint("the answer"); // rama de una sola instrucción, sin llaves
for
for (init; condition; step) body. Las tres partes son obligatorias. init y step deben ser cada
una una sola asignación name = expression, sin listas separadas por comas y sin llamadas sueltas.
condition es cualquier expresión y se comprueba antes de cada pasada, incluida la primera. step
se ejecuta después de cada pasada.
for (i = 10; i > 0; i = i - 2) {
UtilityPrint(StringFormat("{0}", i, "")); // 10 8 6 4 2
}
Es el único bucle. No hay while, do, break, continue ni for x in …. Los sustitutos
habituales están en Patrones de control de flujo.
Bloques
{ ... } agrupa instrucciones en cualquier lugar donde se espera una sola instrucción, incluido el
nivel superior. No abre un nuevo ámbito de variables.