|
| 1 | +# Instruções |
| 2 | + |
| 3 | +--- |
| 4 | + |
| 5 | +Uma instrução pode ocupar uma ou mais linhas, enquanto uma linha pode conter duas ou |
| 6 | +mais instruções. |
| 7 | + |
| 8 | +Instruções de controle de fluxo (if, if–else, for, while, do–while e switch) podem ser aninhadas. |
| 9 | + |
| 10 | +**Rótulo de instrução** |
| 11 | + |
| 12 | + Um rótulo consiste em um identificador seguido por dois pontos (":"). |
| 13 | + Um rótulo é um "alvo de salto" para a instrução goto. |
| 14 | + |
| 15 | + Cada instrução pode ser precedida por um rótulo. |
| 16 | + Deve haver uma instrução após o rótulo; uma instrução vazia é permitida. |
| 17 | + |
| 18 | + O escopo de um rótulo é a função na qual ele é declarado |
| 19 | + (uma instrução goto não pode, portanto, saltar para fora da função atual para outra função). |
| 20 | + |
| 21 | +**Instrução composta** |
| 22 | + |
| 23 | + Uma instrução composta é uma série de zero ou mais instruções |
| 24 | + cercadas por chaves (`{` e `}`). A chave final (`}`) não deve ser seguida por um ponto e vírgula. |
| 25 | + Qualquer instrução pode ser substituída por uma instrução composta. |
| 26 | + Uma instrução composta também é chamada de bloco. |
| 27 | + Uma instrução composta com zero instruções é um caso especial, |
| 28 | + e é chamada de "instrução vazia". |
| 29 | + |
| 30 | +**Instrução de expressão** |
| 31 | + |
| 32 | + Qualquer expressão se torna uma instrução quando um ponto e vírgula (";") é anexado a ela. |
| 33 | + Uma expressão também se torna uma instrução quando apenas espaço em branco |
| 34 | + a segue na linha e a expressão não pode ser estendida para a próxima linha. |
| 35 | + |
| 36 | +**Instrução vazia** |
| 37 | + |
| 38 | + Uma instrução vazia não realiza nenhuma operação e consiste em um |
| 39 | + bloco composto com zero instruções; ou seja, consiste nos tokens "{ }". |
| 40 | + Instruções vazias são usadas em instruções de controle de fluxo |
| 41 | + se não houver ação (por exemplo, while (!iskey()) {}) ou ao definir um rótulo logo |
| 42 | + antes da chave de fechamento de uma instrução composta. |
| 43 | + Uma instrução vazia não termina com um ponto e vírgula. |
| 44 | + |
| 45 | +**assert** _expressão_ |
| 46 | + |
| 47 | + Aborta o programa com um erro em tempo de execução |
| 48 | + se a expressão resultar logicamente em "falso". |
| 49 | + |
| 50 | +**break** |
| 51 | + |
| 52 | + Termina e sai da menor instrução do, for ou while |
| 53 | + que a contém de qualquer ponto dentro do loop |
| 54 | + que não seja o final lógico. A instrução break move o controle do programa |
| 55 | + para a próxima instrução fora do loop. |
| 56 | + |
| 57 | +**continue** |
| 58 | + |
| 59 | + Termina a iteração atual da menor instrução do, for ou while |
| 60 | + que a contém e move o controle do programa para a parte de condição do loop. |
| 61 | + Se a instrução de loop for uma instrução for, |
| 62 | + o controle move para a terceira expressão na instrução for |
| 63 | + (e depois para a segunda expressão). |
| 64 | + |
| 65 | +**do** _instrução_ **while** ( _expressão_ ) |
| 66 | + |
| 67 | + Executa uma instrução antes da parte de condição (a cláusula while) ser avaliada. |
| 68 | + A instrução é repetida enquanto a condição for logicamente "verdadeira". |
| 69 | + A instrução é executada pelo menos uma vez. |
| 70 | + |
| 71 | +**exit** _expressão_ |
| 72 | + |
| 73 | + Aborta o programa. A expressão é opcional, mas deve começar |
| 74 | + na mesma linha que a instrução exit se estiver presente. |
| 75 | + A instrução exit retorna o valor da expressão (mais a tag da expressão) |
| 76 | + ao aplicativo host, ou zero se nenhuma expressão exit estiver presente. |
| 77 | + O significado e propósito dos códigos de saída é definido pela implementação. |
| 78 | + |
| 79 | +**for** ( _expressão 1_ ; _expressão 2_ ; _expressão 3_ ) _instrução_ |
| 80 | + |
| 81 | + Todas as três expressões são opcionais. |
| 82 | + |
| 83 | + *expressão 1* |
| 84 | + Avaliada apenas uma vez, e antes de entrar no loop. |
| 85 | + Esta expressão pode ser usada para inicializar uma variável. |
| 86 | + Esta expressão também pode conter uma declaração de variável, usando a sintaxe new. |
| 87 | + Uma variável declarada nesta expressão existe apenas no loop for. |
| 88 | + |
| 89 | + *expressão 2* |
| 90 | + Avaliada antes de cada iteração do loop e |
| 91 | + termina o loop se a expressão resultar logicamente em "falso". |
| 92 | + Se omitida, o resultado da expressão 2 é assumido como logicamente "verdadeiro". |
| 93 | + |
| 94 | + *expressão 3* |
| 95 | + Avaliada após cada execução da instrução. |
| 96 | + O controle do programa move da expressão 3 para a expressão 2 |
| 97 | + para a próxima iteração (condicional) do loop. |
| 98 | + A instrução for( ; ; ) é equivalente a while (true). |
| 99 | + |
| 100 | +**goto** _rótulo_ |
| 101 | + |
| 102 | + Move o controle do programa (incondicionalmente) para a instrução que segue o rótulo especificado. |
| 103 | + O rótulo deve estar dentro da mesma função que a |
| 104 | + instrução goto (uma instrução goto não pode saltar para fora de uma função). |
| 105 | + |
| 106 | +**if** ( _expressão_ ) _instrução 1_ **else** _instrução 2_ |
| 107 | + |
| 108 | + Executa a instrução 1 se a expressão resultar logicamente em "verdadeiro". |
| 109 | + A cláusula else da instrução if é opcional. |
| 110 | + Se a expressão resultar logicamente em "falso" e uma cláusula else existir, |
| 111 | + a instrução associada à cláusula else (instrução 2) é executada. |
| 112 | + |
| 113 | + Quando instruções if são aninhadas e cláusulas else estão presentes, |
| 114 | + um dado else é associado à instrução if precedente mais próxima no mesmo bloco. |
| 115 | + |
| 116 | +**return** _expressão_ |
| 117 | + |
| 118 | + Termina a função atual e move o controle do programa |
| 119 | + para a instrução que segue a instrução de chamada. |
| 120 | + O valor da expressão é retornado como o resultado da função. |
| 121 | + A expressão pode ser uma variável de array ou um array literal. |
| 122 | + |
| 123 | + A expressão é opcional, mas deve começar na mesma linha |
| 124 | + que a instrução return se estiver presente. |
| 125 | + Se ausente, o valor da função é zero. |
| 126 | + |
| 127 | +**sleep** _expressão_ |
| 128 | + |
| 129 | + Aborta o programa, mas o deixa em um estado reiniciável. |
| 130 | + A expressão é opcional. Se incluída, a instrução sleep |
| 131 | + retorna o valor da expressão (mais a tag da expressão) |
| 132 | + ao aplicativo host. O significado e propósito |
| 133 | + dos códigos/tags de saída é definido pela implementação; |
| 134 | + tipicamente, um aplicativo usa a instrução sleep para permitir |
| 135 | + multitarefa leve de vários programas pawn concorrentes, |
| 136 | + ou para implementar funções "latentes". |
| 137 | + |
| 138 | +**state** ( _expressão_ ) **automaton** :_nome_ |
| 139 | + |
| 140 | + Muda o estado atual no autômato especificado. |
| 141 | + A expressão entre parênteses é opcional; se ausente, |
| 142 | + os parênteses devem ser omitidos também. |
| 143 | + O nome do autômato também é opcional, |
| 144 | + ao mudar o estado do autômato padrão, anônimo; |
| 145 | + se o nome do autômato estiver ausente, os dois pontos (":") devem ser omitidos também. |
| 146 | + |
| 147 | + Abaixo estão dois exemplos de mudanças de estado incondicionais. O primeiro é para o autômato padrão: |
| 148 | + |
| 149 | +``` |
| 150 | +
|
| 151 | +state handshake |
| 152 | +
|
| 153 | +``` |
| 154 | + |
| 155 | + e o segundo para um autômato específico: |
| 156 | + |
| 157 | +``` |
| 158 | +
|
| 159 | +state gps:handshake |
| 160 | +
|
| 161 | +``` |
| 162 | + |
| 163 | + Frequentemente, se um estado muda ou não depende dos parâmetros do evento ou da condição do autômato como um todo. |
| 164 | + Como mudanças de estado condicionais são tão frequentes, |
| 165 | + a condição pode estar na própria instrução state. |
| 166 | + ∗ A condição segue a palavra-chave state, entre parênteses. |
| 167 | + O estado só mudará se a condição for logicamente "verdadeira". |
| 168 | + |
| 169 | + A instrução state causa uma chamada implícita para a |
| 170 | + função entry para o estado indicado — se tal função entry existir. |
| 171 | + |
| 172 | +**switch** ( _expressão_ ) \{ _lista de cases_ \} |
| 173 | + |
| 174 | + Transfere o controle para diferentes instruções dentro do corpo do switch dependendo |
| 175 | + do valor da expressão do switch. |
| 176 | + O corpo da instrução switch é uma instrução composta, |
| 177 | + que contém uma série de "cláusulas case". |
| 178 | + |
| 179 | + Cada "cláusula case" começa com a palavra-chave case seguida por uma lista de constantes e uma instrução. |
| 180 | + A lista de constantes é uma série de expressões, separadas por vírgulas, |
| 181 | + que cada uma resulta em um valor constante. |
| 182 | + A lista de constantes termina com dois pontos. Para especificar um "intervalo" na lista de constantes, |
| 183 | + separe os limites inferior e superior do intervalo com um período duplo (".."). |
| 184 | + Um exemplo de intervalo é: "case 1..9:". |
| 185 | + |
| 186 | + A instrução switch move o controle para uma "cláusula case" se o valor de uma das |
| 187 | + expressões na lista de constantes for igual ao resultado da expressão do switch. |
| 188 | + |
| 189 | + A "cláusula default" consiste na palavra-chave default e dois pontos. |
| 190 | + A cláusula default é opcional, mas se for incluída, deve ser a última cláusula no corpo do switch. |
| 191 | + A instrução switch move o controle para a "cláusula default" se |
| 192 | + nenhuma das cláusulas case corresponder ao resultado da expressão. |
| 193 | + |
| 194 | + Exemplo: |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +###### ∗ A alternativa é incluir mudanças de estado incondicionais na construção comum if–else. |
| 199 | + |
| 200 | +--- |
| 201 | + |
| 202 | +```c |
| 203 | + |
| 204 | +switch (weekday(12,31,1999)) |
| 205 | +{ |
| 206 | + case 0, 1: /* 0 == Sábado, 1 == Domingo */ |
| 207 | + print("fim de semana") |
| 208 | + case 2: |
| 209 | + print("Segunda-feira") |
| 210 | + case 3: |
| 211 | + print("Terça-feira") |
| 212 | + case 4: |
| 213 | + print("Quarta-feira") |
| 214 | + case 5: |
| 215 | + print("Quinta-feira") |
| 216 | + case 6: |
| 217 | + print("Sexta-feira") |
| 218 | + default: |
| 219 | + print("dia da semana inválido") |
| 220 | +} |
| 221 | + |
| 222 | +``` |
| 223 | + |
| 224 | +**while** ( _expressão_ ) _instrução_ |
| 225 | + |
| 226 | + Avalia a expressão e executa a instrução |
| 227 | + se o resultado da expressão for logicamente "verdadeiro". |
| 228 | + Após a instrução ter sido executada, o controle do programa retorna à expressão novamente. |
| 229 | + A instrução é assim executada enquanto a expressão for verdadeira. |
| 230 | + |
| 231 | +--- |
| 232 | + |
| 233 | +`Identificadores: 97` |
| 234 | + |
| 235 | +`Exemplo: 11 (assert)` |
| 236 | + |
| 237 | +`Exemplo: 21 (break)` |
| 238 | + |
| 239 | +`Exemplo: 27 (do while)` |
| 240 | + |
| 241 | +`Exemplos: 9, 11, 21 (for)` |
| 242 | + |
| 243 | +`Declarações de variáveis: 62 (for)` |
| 244 | + |
| 245 | +`Exemplo: 7 (if else)` |
| 246 | + |
| 247 | +`Exemplos: 11, 21 (return)` |
| 248 | + |
| 249 | +`Veja página 40 para exemplos de mudanças de estado condicionais (state automaton)` |
| 250 | + |
| 251 | +`funções "entry": 44 (state automaton)` |
| 252 | + |
| 253 | +`Exemplos: 7, 21, 26 (while)` |
| 254 | + |
| 255 | +--- |
| 256 | + |
| 257 | +[Voltar ao Índice](00-Contents) |
0 commit comments