4D v16.3For...End for |
||
|
4D v16.3
For...End for
For...End for
A sintaxe formal da estrutura de controle de fluxo é: For(Variável_Contador;Expressão_inicial;Expressão_final{;Expressão_incremento}) O loop é um loop controlado por uma variável de contador:
Importante: A expressão numérica Expressão_inicial , Expressão_final e Expressão_incremento são avaliadas uma única vez no início do loop. Caso essas expressões sejam variáveis, mudar uma dessas variáveis no loop não afeta o loop. Dica: No entanto, para fins especiais, você pode alterar o valor da variável contador Variável_Contador dentro do loop, o que afetará o loop
1. O exemplo a seguir executa 100 iterações: For(vContador;1;100) 2. O exemplo a seguir passa por todos os elementos do array umArray: For($vlElem;1;Size of array(umArray)) 3. O exemplo a seguir passa por todos os caracteres do texto vtTexto: For ($vlCar;1;Length(vtTexto))`Faça alguma coisa com o caractere, se for um TAB If (Character code(vtTexto[[$vlCar]])=Tab ) ` ... End if End for 4. O exemplo a seguir percorre os registros selecionados para a tabela [umaTabela]: FIRST RECORD([umaTabela])For ($vlRegistro;1;Records in selection([umaTabela])) ` Faça alguma coisa com o registro SEND RECORD([umaTabela]) ` ... ` Vai para o próximo registro NEXT RECORD([umaTabela]) End for A maioria dos loops que você vai escrever em seus bancos de dados vai funcionar como os listados nesses exemplos. Em alguns casos, você pode querer ter um loop cuja variável contador está diminuindo ao invés de aumentar. Para fazer isso, você deve especificar Expressão_inicial superior a Expressão_final e um Expressão_incremento negativo. Os exemplos a seguir faz a mesma coisa, como nos exemplos anteriores, mas em ordem inversa: 5. O exemplo a seguir executa 100 iterações: For(vCounter;100;1;-1) 6. O exemplo a seguir passa por todos os elementos do array umArray: For($vlElem;Size of array(umArray);1;-1) 7. O exemplo a seguir passa por todos os caracteres do texto vtTexto: For($vlCar;Length(vtTexto);1;-1) 8. O exemplo a seguir percorre os registros selecionados para a tabela [umaTabela]: LAST RECORD([umaTabela]) Se você precisar, você pode usar um Expressão_Incremento (positivo ou negativo), cujo valor absoluto é maior que um. 9. O loop seguinte refere-se apenas aos elementos do mesmo array umArray: For($vlElem;2;((Size of array(umArray)+1)\2)*2;2) Observe que a expressão ((Size of Array(umArray)+1)\2)*2 trata os arrays pares e ímpares. Em alguns casos, você pode querer executar um loop por um determinado número de iterações, mas, em seguida, sair do loop quando uma outra condição se tornar verdadeira. Para fazer isso, você pode testar esta condição dentro do loop e se ela se torna realidade, definir explicitamente a variável do contador para um valor que excede a expressão final. 10. No exemplo a seguir, uma seleção de registros é percorrida até que isso seja realmente feito ou até que a variável interprocesso <>vbWeStop, inicialmente definido como FALSE, se torne TRUE. Esta variável é tratada por um método de projeto ON EVENT CALL que lhe permite interromper a operação: <>vbWeStop:=False Vamos voltar para o primeiro exemplo : O exemplo a seguir executa 100 iterações: For(vCounter;1;100) É interessante ver como o loop e como o loop realizam a mesma ação. $i :=1 `Inicializar o contador $i :=1 ` Inicializar o contador Conselho: O loop For...End for é geralmente mais rápido do que a e , porque 4D testa a condição internamente para cada ciclo do loop e incrementa o contador. Portanto, use o loop , sempre que possível. Você pode utilizar Real, Inteiro, Inteiro Longo e variáveis, bem como as variáveis interprocesso, processo e contadores com uma variável local. Por loops longos e repetitivos, especialmente no modo compilado, use as variáveis locais Long Integer. 11. Aqui está um exemplo: C_LONGINT($vlContador) ` use variáveis locais Inteiro Longo<gen9>For ($vlContador;1;10000) Você pode aninhar quantas estruturas de controle quanto você (razoavelmente) precisa. Isso inclui aninhamento para loops . Para evitar erros, certifique-se utilizar diferentes variáveis de contador para cada estrutura de looping Aqui estão dois exemplos: 12. O exemplo a seguir passa por todos os elementos de um array bidimensional: For($vlElem;1;Size of array(umArray)) 13. O exemplo a seguir cria um array de ponteiros para todos os campos de data presentes no banco de dados: ARRAY POINTER($apCamposData;0)
Ver também
Case of...Else...End case
|
PROPRIEDADES
Produto: 4D
HISTÓRIA
ARTICLE USAGE
Manual de linguagem 4D ( 4D v16) |