Bueno se supone que cada estructura de control está pensada para un propósito específico. El FOR en principio debe aplicarse cuando conocemos el número de iteraciones que vamos a realizar. El WHILE en cambio se utiliza cuando sabemos la condición de parada pero no está tan claro el número de iteraciones.
En el ejemplo de recorrer un array hay dos condiciones de parada: Encontrar el elemento o haber llegado al final.
En estos dos ejemplos (suponiendo que ya tenemos declarado el arreglo de enteros con 25 elementos) al salir del bucle i contiene la primera posición del array donde aparece el número 3
Código:
for (i = 0; i<25; i++)
{
if numeros[i] = 3
break;
}
En el caso de un WHILE
Código:
i = 0
while (i<25 && numeros[i]<> 3)
{
i ++;
}
Parece bastante más claro a la hora de visualizarlo la opción del While.
De cara al rendimiento cabe destacar que en principio los microprocesadores utilizan técnicas de predicción para mantener en caché las varialbes que presumiblemente van a ser consultadas. Para ello uno de los métodos es detectar bucles y asumir que las variables de control serán consultadas una y otra vez de manera que las mantiene en caché para que el acceso sea más rápido.
En ambos casos la variable de control estaría en caché, pero en While ademas la condición de parada de numeros[i] = 3 también se encuentra en la estructura de control por lo queparte de ese Array se mantendría en cache y la comparación sería más rapida que en el caso del for.
En casos tan breves es posible que no se aprecie diferencia, o que incluso parte de las variables dentro de la secuencia For también se incluyan en la caché por lo que creo que no habría grandes diferencias.
En general resulta bastante similar, aunque la sintaxis del While para este caso es mucho más simple.
Es algo que en realidad nunca he tenido demasiado claro por qué una cosa está mejor que la otra funcionalmente (a parte de por claridad de lectura) así que se agradecen todos los comentarios al respecto
PD: Como comentario diré que más de una persona de mi facultad suspendió exámenes por romper un FOR en casos donde podría haberse empleado un WHILE