From 3613683977512520719099ca0af40a88a356e810 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Tue, 8 Sep 2026 09:42:45 +0200 Subject: [PATCH] [Sync-En] control-structures/for: rewrite the loop-condition example --- language/control-structures/for.xml | 156 +++++++++++----------------- 1 file changed, 60 insertions(+), 96 deletions(-) diff --git a/language/control-structures/for.xml b/language/control-structures/for.xml index 228a2adaf..b526a5bd8 100644 --- a/language/control-structures/for.xml +++ b/language/control-structures/for.xml @@ -1,15 +1,15 @@ - + for - Las bucles for son las más complejas en PHP. - Funcionan como las bucles for del lenguaje C(C++). - La sintaxis de las bucles for es la siguiente : + Los bucles for son los más complejos en PHP. + Funcionan como los bucles for del lenguaje C. + La sintaxis de los bucles for es la siguiente: La primera expresión (expr1) es - evaluada (ejecutada), en cualquier caso al - inicio de la bucle. + evaluada (ejecutada) una sola vez, sin condición, al + inicio del bucle. Al inicio de cada iteración, la expresión expr2 es evaluada. - Si la evaluación es &true;, la bucle + Si la evaluación es &true;, el bucle continúa y los comandos son ejecutados. Si la evaluación es &false;, - la ejecución de la bucle se detiene. + la ejecución del bucle se detiene. Al final de cada iteración, la expresión @@ -38,21 +38,21 @@ for (expr1; expr2; expr3) (ejecutada). - Las expresiones pueden eventualmente ser - dejadas vacías o pueden contener varias expresiones separadas por comas. + Cada una de las expresiones puede estar + vacía o puede contener varias expresiones separadas por comas. En expr2, todas las expresiones separadas por una coma son evaluadas pero el resultado se obtiene desde la última parte. Si la expresión expr2 - es dejada vacía, esto significa que es una bucle infinita + es dejada vacía, esto significa que es un bucle infinito (PHP considera implícitamente que vale &true;, - como en C). Esto no es realmente muy útil, a menos que se desee terminar la bucle con la - instrucción condicional + como en C). Esto puede ser menos inútil de lo que parece, ya que a menudo se + desea terminar el bucle con una instrucción condicional break - en lugar de la expresión for. + en lugar de usar la expresión de verdad del for. - Considérese los siguientes ejemplos. Todos muestran los números enteros de - 1 a 10 : + Considérense los siguientes ejemplos. Todos muestran los números enteros de + 1 a 10: Por supuesto, el primer ejemplo es el más simple - de todos (o quizás el cuarto), pero también se puede pensar que usar una expresión vacía en una + de todos (o quizás el cuarto), pero también se puede pensar que usar una expresión vacía en un bucle for puede ser útil a veces. - PHP también soporta la siguiente sintaxis alternativa para las bucles - for : + PHP también soporta la siguiente sintaxis alternativa para los bucles + for: - Muchas personas tienen la costumbre de iterar a través de arrays, como en - el ejemplo a continuación. + Las expresiones expr2 y expr3 se + evalúan en cada iteración. Es aconsejable usar expresiones simples en estos + lugares para evitar problemas de rendimiento. Por ejemplo, si el número de + iteraciones se conoce de antemano, es mejor usar una variable en lugar de una + llamada a función en expr2: - + 'Kalle', 'salt' => 856412), - array('name' => 'Pierre', 'salt' => 215863) -); -for($i = 0; $i < count($people); ++$i) { - $people[$i]['salt'] = random_int(100000, 999999); +$people = ['Kalle', 'Pierre']; + +// Mala práctica: llamar a una función en cada iteración +for($i = 0; $i < getIterationCount($people); ++$i) { + $people[$i] .= ' es genial'; } -var_dump($people); -]]> - - &example.outputs.similar; - - - array(2) { - ["name"]=> - string(5) "Kalle" - ["salt"]=> - int(454478) - } - [1]=> - array(2) { - ["name"]=> - string(6) "Pierre" - ["salt"]=> - int(776978) - } + +// Buena práctica: almacenar el número en una variable +for($i = 0, $peopleCount = getIterationCount($people); $i < $peopleCount; ++$i) { + $people[$i] .= ' es genial'; } + ]]> - + - Este código puede ser lento porque debe calcular el tamaño del array en cada - iteración. Dado que el tamaño nunca cambia, puede ser fácilmente optimizado utilizando una variable intermedia para almacenar el tamaño en lugar de - llamar repetidamente a la función count : - + En el ejemplo anterior, la función se llama en cada iteración del primer + bucle, aunque siempre devuelve el mismo valor. Almacenar ese valor en una + variable, como hace el segundo bucle, llama a la función una sola vez. Tenga + en cuenta que el número de iteraciones queda entonces fijado: si el array se + modifica dentro del bucle, el valor almacenado ya no refleja su tamaño. - - - - 'Kalle', 'salt' => 856412), - array('name' => 'Pierre', 'salt' => 215863) -); -for($i = 0, $size = count($people); $i < $size; ++$i) { - $people[$i]['salt'] = random_int(100000, 999999); -} -var_dump($people); -]]> - - &example.outputs.similar; - - - array(2) { - ["name"]=> - string(5) "Kalle" - ["salt"]=> - int(454478) - } - [1]=> - array(2) { - ["name"]=> - string(6) "Pierre" - ["salt"]=> - int(776978) - } -} -]]> - - - + + + El tamaño de un array se almacena junto con el array, lo que + significa que llamar a la función nativa count no + requiere contar los elementos y no provoca problemas de rendimiento. Esto no + se aplica a COUNT_RECURSIVE, que recorre todo el array. + También hay que tener cuidado al usar count sobre + objetos que implementan Countable, ya que + tales llamadas pueden ser más costosas. + + + + + + El bucle for no es la forma recomendada de iterar sobre + arrays. El bucle &foreach; está diseñado específicamente para este propósito + y suele ser más cómodo. + +