Repite una serie de instrucciones para todos los elementos de una lista.
Sintaxis
[Parallel] For Each Element Contador In Lista Do
[Instrucciones]
End
La sintaxis de la instrucción For Each Element...End consta de las siguientes partes:
Parte |
Descripción |
|---|---|
Contador |
Variable que se utiliza como contador de bucles. No es necesario declarar el contador de bucles con Dim. |
Lista |
La lista cuyos elementos se van a contar. |
Instrucciones |
Una o varias instrucciones que se ejecutan para cada elemento de la Lista. |
Notas
El bloque For Each Element se ejecuta si hay al menos un elemento en la Lista. En este caso, el programa ejecuta todas las instrucciones del bucle con un Contador igual a cero. El bucle se repite para todos los elementos de la Lista, mientras el contador toma los valores de cero hasta el número de elementos menos uno. A continuación, el programa sale del bucle y continúa la ejecución con la instrucción que sigue a la instrucción End.
Puede cambiar el valor del Contador dentro de un bucle, pero esto hace más difícil entender y probar el código. El Contador se utiliza a menudo dentro del bucle para indexar un elemento de una Lista.
Si antepone la palabra clave Parallel, las pasadas de bucle en las ediciones Professional y Developer Suite de FlexPro se ejecutan simultáneamente en lugar de uno tras otro. FlexPro distribuye entonces la ejecución a un máximo de tantos hilos ejecutándose simultáneamente como núcleos de procesador haya. Esto conlleva la correspondiente multiplicación de la velocidad de procesamiento, siempre que esta no se vea limitada por otros factores, como la recarga de grandes conjuntos de datos desde el disco duro.
La ejecución paralela tiene una serie de consecuencias que debe conocer:
•Se crea una instancia independiente para cada hilo para el contador de bucles y para las variables locales que declare dentro del bloque Parallel For Each Element. No se permite el acceso a dicha variable desde fuera del bloque.
•Una variable local que declare encima del bloque Parallel For Each Element es compartida por todos los hilos. Si escribe en una variable de este tipo dentro del bloque, su valor también cambia bruscamente para los demás hilos.
•Como el orden de las pasadas de bucle no está definido, no se pueden utilizar conceptos como la recogida de resultados individuales con el operador de agrupación. En su lugar, debe dimensionar suficientemente el resultado antes del bucle y, a continuación, introducir los resultados individuales utilizando la asignación indexada.
•La instrucción Break no está permitida en un bucle paralelo.
Disponibilidad
FlexPro View, Basic, Professional, Developer Suite
Ejemplo
El siguiente ejemplo proporciona una lista con las derivadas de las señales de la lista pasada como argumento:
Argumentos ArgList
Dim ResultList = List(ArgList, "Derivative")
Parallel For Each Element i In ArgList Do
ResultList.[i] = Derivative(ArgList.[i])
End
ResultList
Véase también
Instrucción For Each Column...End
Instrucción For Each Row...End