Pular para o conteúdo principal

Instruções

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 } ] ")" ;

Atribuição​

name = expression; é uma instrução, não uma expressão. Por isso a = b = 1;, if (x = 5) e f(x = 1) são todos erros. Não há atribuição composta (+=) nem ++/--. Escreva i = i + 1;.

Instruções de expressão​

Qualquer expressão seguida de ; é uma instrução, e o seu valor é descartado. É assim que uma função interna é chamada pelo seu efeito: WindowMinimize(w);. O Bool que a maioria das funções internas retorna é ignorado, a menos que você o capture: ok = FileDelete(p);.

if / else​

Os parênteses em volta da condição são obrigatórios. O ramo é uma única instrução ou um bloco { }. else if é apenas um else cuja instrução é outro if, então encadeamentos funcionam. Um else pendente pertence ao if mais próximo. Use chaves quando houver ambiguidade.

n = MathRandom(1, 100);
if (n < 10) {
size = "small";
} else if (n < 50) {
size = "medium";
} else {
size = "large";
}
if (n == 42) UtilityPrint("the answer"); // ramo de uma única instrução, sem chaves

for​

for (init; condition; step) body. As três partes são obrigatórias. init e step precisam ser, cada um, uma única atribuição name = expression, sem listas separadas por vírgula e sem chamadas soltas. condition é qualquer expressão e é verificada antes de cada passagem, inclusive a primeira. step é executado depois de cada passagem.

for (i = 10; i > 0; i = i - 2) {
UtilityPrint(StringFormat("{0}", i, "")); // 10 8 6 4 2
}

É o único loop. Não há while, do, break, continue nem for x in …. Os substitutos habituais estão em Padrões de fluxo de controle.

Blocos​

{ ... } agrupa instruções em qualquer lugar onde se espera uma única instrução, inclusive no nível superior. Ele não abre um novo escopo de variáveis.