Otro error: todavía hay algo que no va bien
Actualización: noviembre 2007
En esta lección, aprenderá a encontrar un error lógico que sólo se produce en situaciones determinadas.
En la lección anterior, ¿Qué? Esto no debiera haber ocurrido. Encontrar errores lógicos, aprendió a encontrar y corregir un error de lógica. En el código de ejemplo de esa lección, aún existe un error oculto: uno que es más difícil de encontrar porque sólo se produce en situaciones determinadas.
Probar un programa
Como desarrollador, se encuentra en desventaja cuando debe probar el programa para ver si se comporta según lo deseado. Sabe cómo debe funcionar, de modo que es improbable que se cometa un error que pueda revelar un error lógico. Sin embargo, un usuario que no esté familiarizado con el programa puede y hará cosas en las que no ha pensado.
Por ejemplo, en un programa que calcula millas por hora dividiendo el número de millas recorridas por el número de horas que demoró el viaje, ¿qué pasa si el usuario escribe cero para las horas o las millas? Probémoslo y vea.
Inténtelo
Para probar el programa
Abra el proyecto LogicErrors que se creó en la lección anterior, ¿Qué? Esto no debiera haber ocurrido. Encontrar errores lógicos.
Nota: Si no finalizó o no guardó el proyecto anterior, deberá regresar y finalizarlo antes de poder continuar.
Presione F5 para ejecutar el programa. En el primer cuadro de texto, escriba 0 (para representar minutos) y en el segundo escriba 5 (para representar millas) y, a continuación, haga clic en Button1.
Se muestra un cuadro de mensaje con el mensaje "Velocidad media infinito."
Mantenga abierto el proyecto: en el siguiente procedimiento aprenderá a encontrar el error lógico.
5 dividido por 0 = ¿Infinito?
En el procedimiento anterior, es posible que "Infinito" no sea lo que se esperaba, pero es matemáticamente correcto: 0 cabe en 5 un número infinito de veces. Sin embargo, éste no es el resultado que se desea que los usuarios del programa vean. ¿Puede pensar en una forma de evitar esto?
Podría pensar en agregar un controlador de errores, un procedimiento descrito en la lección Qué hacer cuando algo sale mal: control de errores. Sin embargo, en este caso no funcionaría porque el resultado "Infinito" no es un error, únicamente no es lo que desea.
Puesto que no es útil mostrar una velocidad de cero, una manera de corregir el problema es probar un valor de cero y advertir al usuario que debe escribir un número mayor. Mientras se realiza esto, también se puede evitar que el usuario escriba números negativos, puesto que los números negativos también pueden generar un resultado falso.
En el siguiente procedimiento, se modificará el código en el controlador de eventos Button1_Click para llamar sólo a la función GetMPH si los valores son mayores que cero.
Inténtelo
Para corregir el error
En el Editor de código, cambie el código en el controlador de eventos Button1_Click de la siguiente manera:
Dim minutes As Integer = CInt(Textbox1.Text) Dim miles As Double = CDbl(Textbox2.Text) Dim hours As Double = 0 If minutes <= 0 Or miles <= 0 Then MsgBox("Please enter a number greater than zero") Else hours = minutes / 60 MsgBox("Average speed " & GetMPH(miles, hours)) End If
Presione F5 para ejecutar el programa nuevamente. En el primer cuadro de texto, escriba 0, y en el segundo, escriba 5. A continuación, haga clic en Button1.
Aparecerá el cuadro de mensaje indicándole que especifique un número mayor que 0. Inténtelo probando el programa con otras combinaciones de números hasta que esté seguro de que se ha corregido el error.
Pasos siguientes
En esta lección, aprendió a encontrar y corregir un error lógico que produjo un comportamiento inesperado. En la siguiente lección, aprenderá a utilizar los comentarios en el código.
Siguiente lección: Agregar notas a programas: utilizar comentarios
Vea también
Tareas
¿Qué? Esto no debiera haber ocurrido. Encontrar errores lógicos
Qué hacer cuando algo sale mal: control de errores
Conozca sus errores: tres tipos de errores de programación
Encontrar errores: introducción a la depuración en Visual Basic