5

Cuando creamos un ciclo for en cualquier lenguaje, a veces nosotros no entendemos las lineas y variables que desarrollamos y porque las creamos.

Ejemplo:

Cuando creamos una variable de inicio (ejemplo i) sobre entendemos que es el indicio (mejor conocida como index) de un arreglo u objeto.

for (let i = 0; i < length; i++) //here your code loop

Cuando hacemos esta sentencia (la mayoría de los programadores y me incluyo) no entendemos.

¿Porque el signo < en nuestro bucle? ¿Que lógica representa que la variable índice sea menor que el número de veces al que se va repetir?

Mariano
  • 23,777
  • 20
  • 70
  • 102
Samuel Sobalvarro
  • 1,119
  • 5
  • 23
  • Puede indicar muchas cosas , principalmente cuantas veces se ejecutará algún código interno en el for y no necesariamente el indice de un arreglo. Al igual que el < puede tener muchos más operadores de comparación . No es muy clara su pregunta – Dev. Joel Feb 12 '18 at 22:22
  • Saludos @Dev.Joel cuando hablo de entender el for, es simplemente entender su sintaxis y el porqué de el operador tradicional (que en este caso el ' – Samuel Sobalvarro Feb 12 '18 at 23:00

4 Answers4

7

El ciclo for básicamente es una estructura iterativa para ejecutar un mismo segmento de código una cantidad de veces deseada, esta cantidad de veces deseada es controlada por una condición que evaluará si sigue o no ejecutando las líneas de código internas. Las partes básicas son

for (inicialización; condición; incremento) //here your code loop
  1. La inicialización sirve como base o inicio del ciclo es decir por ejemplo si desea ejecutar 20 veces unas lineas de código en un for , podría tener muchas opciones, diría que infinidad de variaciones.

    for (let i = 0; i < 20; i++) { ... }
    for (let i = 10; i < 30; i++) { ...}
    

Las dos formas funcionarán. pero mayormente se utiliza la variable inicial del ciclo for en 0, esto es para que aparte de servir como variable iteradora funcione también como indice para hacer referencia posiciones de arreglos y dado que estos inician desde 0 . Se acostumbra a iniciar en 0 . Ojo que se puede inicializar más de una variable en esta parte.

  1. La segunda parte es la la condición, la parte esencial del ciclo, en esta parte se evaluará si el ciclo sigue o no. Se podría entender como un if si el resultado es verdadero entonces sigue ejecutando y si es falso sale del ciclo. En esta parte puede tener diferentes tipos de comparación y más de una condición siempre siguiendo de cerca las tablas lógicas de verdad.

Mayormente como en la inicialización, se coloca el length, es decir la cantidad de veces que desea que se ejecute el código o el length del arreglo para no obtener una excepción de tipo IndexOfRange cuando se utilice como indice . Pero podría ser simplemente una variable booleana y actuará de igual forma. (ejm)

// se ejecutará 5 veces ya que cuando i=5, cambiará la bandera
// y la condición será false y saldrá del for
let isNext= true;
for (let i = 0; isNext; i++) { 
    if(i==5) isNext = false;
    else console.log(i)
}

Esta segunda parte siempre debe retornar un valor booleano , verdadero o falso

  1. El incremento se utiliza mayormente para cambiar el estado de la variable iteradora , también existen diferentes variaciones y como en la inicialización , puede contener más de 1 variable incrementada, Además de incrementar también se puede decrementar . estos dos pueden ser de 1 en 1 (++) o (--) o lo que se desee i+=2 (2 en 2) i-=2 (2 en 2) descendente. Hay que tener algunas cosas claras en esta parte, para esto quizá pueda servir está pregunta (ejm)

    //Se ejecutará 10 veces , pero se hace de forma descendente el conteo.
    for (var i = 10; i >0; i--) { ...}
    // se ejecutará 5 veces dado que hace el decremento de 2 en 2
    for (var i = 10; i >0; i-=2) { ...}
    
Dev. Joel
  • 23,229
  • 3
  • 25
  • 44
  • 1
    A esto se le llama un buen aporte, creo que tu respuesta aportará muchos en esta comunidad a entender el porqué del for. – Samuel Sobalvarro Feb 12 '18 at 23:51
  • al for creo que te falto agregar iteraciones finitas(entendiendo como esto que sabemos la cantidad a recorrer) – JackNavaRow Feb 13 '18 at 00:14
  • Yo agregaria que en varios lenguajes los 3 segmentos son opcionales. `for(;;);` es igual a un `while(true);` y la equivalencia entre for y while, se puede tener el mismo lenguaje con uno sin el otro – Klaimmore Feb 13 '18 at 03:47
6

Normalmente la expresión que ves en ese ciclo for se utiliza para recorrer los arrays, lo cual no quiere decir que solamente se utilice para eso.

Esto se debe a que hay que recordar que los arrays empiezan por la posición 0.

Por lo tanto, si tenemos un indice i=0 y tenemos tres elementos en nuestro array, si hicieramos lo siguiente: i <= length nos daría un ArrayIndexOutOfBoundsException en Java por ejemplo, ya que intentaría acceder al elemento array[3] el cual no existe, en caso de que quisiéramos obtener su valor.

De todas maneras, la condición que se use en el ciclo for se tiene que amoldar siempre a las condiciones de tu programa y no tiene que ser necesariamente con el símbolo <. Todo dependerá de la lógica de tu programa.

Francisco Romero
  • 16,194
  • 5
  • 30
  • 61
6

El tipo de ciclo for que presentas es el llamado for tradicional. Según Wikipedia fue popularizado por los programadores de C.

Consta de tres partes:

  • la inicialización: let i = 0;

    La inicialización declara (y quizás asigna) cualquier variable requerida. El tipo de una variable debe ser el mismo si estás utilizando múltiples variables en la parte de inicialización.

    En tu caso, lo que se hace es inicializar i a 0.

  • la condición :

    Es verificada y abandona el bucle si la condición es false.

    En tu caso la condición sería i < length; Aquí el bucle se ejecutará mientras i sea menor que el valor de lenght... esta última puede ser cualquier valor, no necesariamente el tamaño de un array.

  • el incremento:

    Esto se realiza cada vez que el ciclo termina y se vuelve a repetir.

    En tu caso, i++ indica en el código que cada vez que el ciclo se vuelve a repetir, el valor de i debe aumentar en 1.

El diagrama de este ciclo for se puede representar así:

introducir la descripción de la imagen aquí

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
  • Tu último punto es interesante, de lo cual en muchos lenguajes te obligan a poner el clásico i++, es un poco loco hacerlo fuera de tu sentencia bucle (osea fuera de tus llaves { }), es algo con que tendremos que vivir y sin el porqué – Samuel Sobalvarro Feb 12 '18 at 23:07
  • 1
    @MerlingSamuelSobalvarro no es *loco* poner el incremento fuera de las llaves. El bucle entra a ejecutar el código que hay dentro de las llaves solamente cuando la condición evaluada es `TRUE`. No tendría sentido en este caso actualizar el contador dentro. El contador se actualiza una vez que el código dentro de las llaves se haya ejecutado. El código sale de las llaves, actualiza el contador y vuelve a evaluar la condición... si es `TRUE` entra de nuevo en las llaves... si es `FALSE` saldrá del bucle de inmediato (no entrará más dentro de las llaves). – A. Cedano Feb 21 '18 at 01:58
2

Tu Bucle o Ciclo for se compone de 3 Partes y/o Elementos

1)let i = 0; //Indica el Inicio de Tu Ciclo, Puede ser una Variable Local declarada dentro de el mismo For como es este caso.

2) i < length; // Una condicional la cual indica en que momento se debe detener el Ciclo For (puedes llamarlo if) mientras se cumpla o no la Condición seguirá Iterando. En tu ejemplo le estas diciendo que repita el Ciclo mientras tu variable i sea menor a length

3) i++) La forma en la que incrementaras a tu Variable i en este caso de 1 en 1 entonces tu variable empezara en 0 y si cumple la condición se cumple o no dependiendo de tu lógica del If continuara incrementando a 1 validara tu if y así sucesivamente ...

Rafael Bautista
  • 2,603
  • 6
  • 20
  • 35
Anyel
  • 173
  • 8
  • Saludos Anyel, cuando te refieres a una condicional (tu punto 2) exactamente a qué le llamas a una condición en el bucle, si es ese el caso podría ocupar el bucle while. – Samuel Sobalvarro Feb 12 '18 at 23:05