• Publicidad

Diferencia entre bucles While y For

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Diferencia entre bucles While y For

Notapor mparrado8 » 2013-04-20 12:57 @581

No comprendo la diferencia entre while, for y foreach. Sé que el foreach, o eso creo, es recomendable a la hora de trabajar con arrays, pero no sé cuándo es mejor usar el while y cuando el for. ¿Puedes ayudarme?
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582

Publicidad

Re: Diferencia entre bucles While y For

Notapor explorer » 2013-04-20 13:22 @599

Los bucles hacen lo mismo: recorren una serie de valores mientras se cumpla una condición.

Hay dos tipos de bucles for:

for (my $i = 0; $i < 100; $i++) {

Este es igual que en el lenguaje C: tiene tres partes: inicialización, condición e incremento. Y se ejecutan de la misma manera que en el lenguaje C

for my $i (0..99) {

Esta es una solución general de bucles: recorre los valores indicados y los va guardando en la variable del bucle. Lo mismo sirve para recorrer los índices de un array:

for my $i (0 .. $#array) {

que para recorrer los valores de un array:

for my $valor (@array) {

Los bucles while() (al igual que los until()) son más sencillos: son bucles que se ejecutan mientras la condición sea verdadera (o falsa en el caso del until()). De esta forma, el bucle for heredado del C se puede escribir así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $i = 0;
  2. while ( $i < 100 ) {
  3.     ...;
  4. }
  5. continue {
  6.     $i++;
  7. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
La parte de continue{} se ejecuta cuando se ha terminado de ejecutarse cada vuelta del bucle.

Pero... hay una gran diferencia entre while y for... bueno... dos :)
  • los valores que se usan en el bucle for son alias de los valores definidos al principio. Eso quiere decir que podemos modificarlos dentro de un bucle for, y así estaremos modificando los valores de origen. Ejemplo: supongamos que tenemos un array con valores enteros, y que queremos modificar todos los valores, multiplicándoles por 8. Lo normal sería hacerlo así:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. for my $i (0 .. $#array) {           # recorremos los índices
    2.     $array[$i] *= 8;                 # modificamos los valores del @array
    3. }
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
    Con Perl, se puede hacer simplemente así:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. for my $valor (@array) {             # recorremos los valores
    2.     $valor *= 8;                     # modificamos los valores del @array
    3. }
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
    Esto puede despistar al novato, pero si lo leemos de corrido, lo vemos más lógico.
    .
  • en un bucle for(), Perl se hace con todos los valores posibles antes de empezar a dar vueltas, mientras que con while(), la condición se va ejecutando paso a paso. Esto se ve claramente con la forma de trabajar con los archivos. Si lo hacemos con while():
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. open my $fh, '<', 'archivo.txt';
    2. while (<$fh>) {
    3.     # aquí procesamos la línea
    4. }
    5. close $fh;
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
    en cada vuelta, el while lee una línea del archivo, hasta el final del archivo. En cambio, con for():
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. open my $fh, '<', 'archivo.txt';
    2. for (<$fh>) {
    3.     # aquí procesamos la línea
    4. }
    5. close $fh;
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
    también vamos procesando línea a línea, pero... ¡el for se ha descargado a memoria todas las líneas del archivo, de golpe! Si el archivo es muy grande, pues podremos tener problemas de memoria agotada.
¡Ah!, y el foreach... es igual que el for, pero con cuatro letras más (sí, así es: 'each' :lol: ).

Más información en tu propio ordenador en perldoc perlsyn, y en la Web (traducido al español).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Diferencia entre bucles While y For

Notapor mparrado8 » 2013-04-20 13:37 @609

Uff Cuánta información por procesar y asimilar, me lo tomaré con calma.
¡Muchas gracias!
mparrado8
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-04-10 12:58 @582


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 56 invitados