Es una pregunta que me habéis hecho algunos alumnos. El caso es que hay veces que al programar surge la duda. Cuando compruebo una condición puedo utilizar ambas sentencias pero el funcionamiento del programa puede verse afectado si tomo una decisión equivocada.
Pongamos un supuesto. Imagina un comedor. Muchos clientes levantando la mano solicitando atención. Tenemos a un camarero muy especial. Tiene la sorprendente capacidad de poder moverse a la velocidad de la luz. Si algún cliente le llama, se dirige al cliente y le pregunta lo que desea tomar.
El camarero se dirige al cliente y se queda inmóvil esperando. Algunos clientes son rápidos, saben lo que quieren y le entregan al instante la información al camarero. Cuando el camarero recibe la petición, la procesa y la entrega al cliente de manera inmediata.
Algunos clientes se piensan un poco el pedido, están dubitativos, no lo tienen claro o bien han cambiado de opinión. En este caso nuestro supercamarero se queda inmóvil mirando al cliente y espera...
Imagina que el cliente se entretiene. El camarero está inmóvil pendiente del cliente.
Si el cliente no se decide, el camarero seguirá inmóvil esperando. Otros clientes pueden haber levantado la mano, pero el camarero no puede atenderlos porque está bloqueado hasta que el cliente decida que ya no necesita atención.
Este caso descrito representa el uso del "While". Cuando utilizamos esta sentencia, el programa queda bloqueado y "secuestra" el control hasta que la condición del "While" se libera. Con el uso de esta condición, el control del programa queda controlado por las condiciones. Si la condición no se libera (el cliente no se decide a pedir...) el programa (nuestro camarero) quede enganchado dentro de este bucle y no puede hacer nada más.
El problema en esta circunstancia es que mientras el programa está encerrado en el bucle, NO puede hacer otra cosa (aunque otros clientes soliciten atención, nuestro camarero está ocupado). Por lo tanto, de esta manera, nuestro programa se queda aislado frente a otros eventos.
En ciertas circunstancias, no hay más remedio que hacerlo de esta manera. Por ejemplo cuando el camarero atiende al cliente, espera cobrar por ello, por lo tanto, en este caso es obligado incluir una sentencia "While" (el camarero no se irá del lugar hasta que cobre).
Cuando necesitamos que nuestro programa no siga adelante hasta que se cumpla una determinada condición usaremos "While" aún a riesgo de que el programa quede bloqueado hasta que se libere la condición.
Si hubiéramos utilizado la sentencia "if", nuestro camarero hubiera podido atender a otros clientes si alguno no se decide. Como es muy rápido, mientras un cliente se piensa lo que desea tomar, es capaz de atender a muchos porque la sentencia "if" no es bloqueante.
También puedes entenderlo con el siguiente ejemplo. Imagina un pasillo de un hospital, desde un extremo puedes ver todas las puertas de las habitaciones, incluso las más alejadas. También puedes ver los indicadores luminosos en la parte superior del marco de las puertas. Con una sentencia "if" puedes comprobar si algún paciente solicita atención porque puedes ver todos los indicadores luminosos. Sin embargo, si entras en una habitación para atender a un cliente, no podrás ver el resto de indicadores y no podrás atender al resto de clientes hasta que no salgas de la habitación (este caso sería usando "While").
No hay comentarios:
Publicar un comentario