Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/01/2008, 17:40
jferrero
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 1 mes
Puntos: 11
Re: No entiendo que hace esta línea!

Hummm... Digamos que hace lo siguiente: Tenemos un 'and', por lo que tenemos que ver si las dos expresiones de los lados son verdaderas. Eso implica evaluarlas. De la parte izquierda, la evalúa, y si es falsa, ni siquiera mira la derecha, porque ya sabemos entonces el resultado del 'and': falso. En cambio, si es verdadera la parte izquierda, ahora tiene que evaluar la parte derecha.

Y fíjate que NO importa si la parte derecha es falsa o verdadera... lo que importa (para el programador que escribió esa línea) es que la parte derecha se EVALÚA (la expresión se va a EJECUTAR).

Este tipo de construcciones está heredado de los programas escritos en shell, donde es frecuente encadenar sentencias solo si van ejecutando y el resultado va siendo correcto una tras otra. Ejemplo:

cd /tmp && rm *.tmp

La línea anterior (en shell) primero ejecuta la parte izquierda (ir al directorio temporal), y, si es cierta (es decir, EXISTE /tmp y hemos PODIDO entrar en él) entonces el 'and' del shell (&&) mira a ver la parte derecha (ejecuta el borrado de todos los ficheros temporales).

Es decir, el 'and' encadena sentencias que queremos ejecutar solo si la sentencia anterior es verdadera. NO estamos mirando el valor lógico -booleano- de todo el 'and'. Solo nos interesa la ejecución consecutiva.

En Perl, es clásico ver líneas como:

open FICHERO, '<mifichero' or die "ERROR: no puedo leer mifichero: $!\n"

Si el open() falla (falso) el 'or' está obligado a ejecutar el lado derecho, aunque eso signifique su muerte ('die'), pero nosotros queremos precisamente eso, que muera.