‫Bienvenido de nuevo y este video, finalmente vamos a solucionar los problemas que tuvimos en
‫nuestro programa aquí, nuestro programa virtual que creamos, y también vamos a ver la programación defensiva.
‫Entonces la idea de la programación defensiva es hacer código seguro que realmente ya piense en qué problemas podrían surgir, porque en
‫este caso, los problemas que podrían surgir es que, por ejemplo, la
‫lista está vacía o queremos tener demasiados amigos.
‫Por eso queremos invitar a más amigos de los que tenemos.
‫Y en este caso, la lista es súper simple que creamos manualmente.
‫Pero imagina que es de una base de datos.
‫Entonces viene de una base de datos o viene de la web, de una base de datos en la nube o algo así.
‫Y luego sería una historia diferente porque nunca sabríamos qué tan grande es la lista en este caso.
‫Podemos verlo en el código, pero es posible que no lo sepamos dependiendo de dónde venga.
‫En este caso, tenemos que anticiparnos a los diferentes problemas que puedan surgir y podemos probarlos nosotros mismos a la hora
‫de desarrollarlos.
‫Por ejemplo, ¿ya lo hicimos bien?
‫Ingresamos más amigos de los que tenemos en la lista.
‫Entonces es simple.
‫Simplemente ejecutamos esto y luego obtenemos este argumento fuera de rango de excepción.
‫Pero de dónde lo estamos consiguiendo es interesante.
‫Así que lo estamos obteniendo en el punto de nuestro método de amigos de la fiesta, aunque el
‫problema está en otro lado, porque si lo miramos, dice Shorris name list zero.
‫Entonces estamos tratando de acceder a un elemento ilícito que no está disponible porque ya pasamos de la lista.
‫Hazte amigo de la fiesta y te pasamos esta lista aquí.
‫Entonces, si miramos de dónde obtenemos esta lista, ese podría ser un buen punto de partida porque podemos ver que aquí estamos tratando
‫de acceder a algo que no está disponible.
‫Entonces, ¿cuál es el problema con lo que está disponible?
‫Entonces podemos mirar esta línea aquí, poner parte al frente.
‫Ahí es donde se llama.
‫Y podemos ver.
‫De acuerdo, ese es el búfer.
‫¿Derecha?
‫Entonces obtenemos un búfer, que es esta lista de aquí.
‫Entonces, lo que obtenemos es una lista del nivel superior.
‫Entonces, nuevamente, podemos ver, está bien, obtenemos esta lista de tal y tal, tanta gente y de aquí
‫es de donde obtenemos el valor.
‫Y bueno, un buen punto para comprobar si la lista es buena es en realidad el método arget party friends, porque aquí tenemos
‫la lista correcta.
‫Entonces, en este punto, tenemos una lista para que podamos verificar esta lista.
‫Podemos ver si esta lista es lo suficientemente buena para lo que queremos hacer.
‫Y lo que queremos hacer es escribir algo basado en la cuenta de elementos en
‫esa lista para que podamos verificar si la cuenta es mayor que la cuenta de puntos de la lista.
‫Y esta es la lista que nos pasó.
‫Entonces, si ese es el caso, lo que podemos hacer es simplemente imprimir algo, no hacer eso o error o algo
‫así.
‫Pero algo aún mejor que podemos hacer es crear el programa Kresh.
‫Entonces sabemos que el programa tiene un problema.
‫Pero al mismo tiempo, detenemos la ejecución del programa en una etapa muy temprana porque imagina que tenemos una conexión a una base de datos
‫y ahora estamos creando todos estos errores diferentes o simplemente estamos revisando el código y este método se vuelve amigo de
‫la fiesta. se está ejecutando y digamos que está conectado a una base de datos y escribe algo
‫en la base de datos y luego ejecutamos el código nuevamente.
‫Y por alguna razón, el estado de la base de datos ha cambiado y ahora estamos alucinados porque los datos que
‫se nos muestran son una completa tontería y trabajamos con ellos.
‫Así que arreglar ese error sería un problema real.
‫Está bien.
‫Entonces, ya podemos detectarlo lo antes posible, por lo que simplemente podemos lanzar un argumento fuera del rango de excepción aquí.
‫Así que lanza nuevos argumentos fuera del rango de excepción porque eso es lo que estábamos haciendo bien.
‫Y un argumento fuera de la excepción de Reagan tiene una sobrecarga múltiple.
‫Entonces podemos tener este aquí con un nombre de Parum.
‫Podemos tener un mensaje y con la excepción o un nombre de Perram con un mensaje.
‫Entonces aquí podría decir algo como, OK, el recuento es el problema y el recuento no puede ser mayor que
‫los elementos de la lista o algo así.
‫Bien, ese sería un ejemplo de lo que podríamos mostrar.
‫Así que ejecutémoslo de nuevo, porque ahora deberíamos poder detectar este error o al menos lanzar una excepción de argumento fuera de
‫rango una vez que obtengamos este error.
‫Está bien.
‫Entonces podemos ver excepcionales sin manejar.
‫Es un argumento del sistema fuera de rango.
‫La excepción no puede ser mayor que los elementos de la lista.
‫Recuento de parámetros.
‫Así que ese es el resultado de lo que hemos escrito aquí.
‫Bien, así es como se verá la excepción.
‫Entonces ahora sabemos cuál es el problema.
‫Es un poco más expresivo justo antes de que el problema no estuviera realmente aquí.
‫Así que déjame comentar esas dos líneas.
‫El problema no se planteó en este punto, sino más abajo.
‫Se incluyó en nuestro método get different, por lo que está en la línea 42, pero el problema real surgió mucho
‫antes, ¿no?
‫Y el índice fue la excepción, pero también es una declaración muy genérica, ¿verdad?
‫Podría ser cualquier cosa.
‫Derecha.
‫Entonces, detectarlo antes nos ayuda a ver dónde están los problemas que tenemos.
‫Entonces, lo que podríamos hacer, por supuesto, es decir, OK, una vez que ingresemos este valor y
‫digamos que este valor proviene de un usuario que ingresa un valor.
‫Derecha.
‫Entonces puede ingresar cualquier valor desde cero hasta la cantidad de elementos de la lista que tenemos.
‫Para que pudiéramos atraparlo incluso antes.
‫Podríamos hacer una prueba incluso aquí.
‫Así que si.
‫Amigos, ese recuento es.
‫Menos del valor que ingresamos aquí y podríamos obtener este valor nuevamente del usuario, entonces podríamos darle un
‫mensaje, ¿verdad?
‫No lanzaríamos nuestra excepción.
‫No haríamos que nuestro programa colapsara.
‫Simplemente le pediremos al usuario que ingrese un nuevo valor nuevamente.
‫Pero no lo estamos haciendo aquí porque nosotros, como programadores, podemos ingresar el valor aquí y forzamos estos errores manualmente
‫ahora mismo.
‫Derecha.
‫De acuerdo, esa es una forma de resolverlo o, en realidad, una forma de detectarlo desde el principio.
‫Ahora digamos.
‫Ingresamos un valor estúpido aquí, como menos uno.
‫Muy bien, ahora ejecutémoslo de nuevo.
‫De hecho, vamos a ejecutarlo de nuevo.
‫Y nuestro programa parece funcionar, pero no muestra nada allí, por lo que no mostró nada.
‫Las flechas no arrojaron ningún error, pero no muestra ningún amigo.
‫Bueno, nuestro programa parece funcionar con menos uno porque tratamos de obtener elementos de la lista menos
‫uno de nuestra lista y, bueno, no nos da ninguna información valiosa.
‫Así que ahora lo que podemos hacer, por supuesto, es agregar otra condición aquí.
‫El recuento debe ser Krater igual a cero.
‫Si ese no es el caso, entonces podríamos escribir algo como que el código no puede ser mayor que los
‫elementos de la lista o un cero menor.
‫Bien, esa es solo una forma de expresarlo.
‫Y ahora si lo volvemos a ejecutar, lanzaremos este error.
‫está bien.
‫Así que eso es algo en lo que el programa no limitaba antes, pero ahora nosotros, como desarrolladores, entendimos, está bien, este es
‫un estado que no queremos tener.
‫Esta es una situación con la que no queremos trabajar, ¿de acuerdo?
‫Y como dije, cortaríamos mientras intentábamos obtener este valor de algún lugar e intentaríamos capturarlo incluso
‫antes de eso.
‫Ahora, supongamos que tenemos una situación que es aún más divertida.
‫Entonces tenemos una situación en la que mi lista de amigos está vacía.
‫Así que solo voy a crear una lista vacía aquí.
‫Al igual que.
‫Ahora, esto va a estar llegando a dudar y ahora tenemos esta lista vacía, volvamos a ejecutarla y veamos si nuestro
‫programa aún funciona.
‫Y ahora todavía tenemos nuestra excepción de argumento fuera del rango, así que eso es bastante bueno.
‫Así que parece que la excepción que creamos aquí soluciona incluso este problema.
‫Por lo tanto, no tenemos que mirar manualmente cómo es la lista, aunque esté vacía.
‫Derecha.
‫Entonces, si miras nuestra lista de amigos, nuestra lista de amigos está vacía, pero al final, obtenemos una cuenta de
‫cero.
‫Entonces, aunque la lista es nula, la lista sigue siendo cero.
‫Entonces, el valor que obtenemos allí sigue siendo cero.
‫Pero eso no es todo lo que podemos por ahora.
‫Entonces, en lugar de analizar Francia con Francia, que es esta lista vacía, podemos pasar nulo aquí.
‫Entonces, digamos que por alguna razón no pudimos crear esta lista porque la conexión a la base de datos no funcionó o
‫algo así.
‫Y entramos como resultado.
‫Y ahora estamos pasando ahora e intentamos pasar ahora a un método que realmente requiere una lista.
‫Ejecútelo y veamos qué tipo de error obtenemos esta vez.
‫Entonces ahora obtenemos una referencia nula, una excepción, una referencia de objeto, no configurada como una instancia de una lista de objetos
‫que era nula.
‫Así que la lista que pasamos ahora era ahora.
‫Entonces obtenemos este error incluso antes de que podamos lanzar un error.
‫Entonces, lo que podríamos hacer, por supuesto, es captar esta situación también, para poder seguir adelante
‫y escribir otra declaración if.
‫Si la lista es nula, lanza otra excepción de puntero.
‫Lanza una nueva excepción nula de argumento.
‫Entonces lista.
‫La lista está vacía, está bien, por supuesto, puede ser más descriptivo aquí, por lo que la lista no debería
‫estar vacía.
‫Compruebe la conexión a Internet o algo por el estilo.
‫Podría ser la conexión a Internet o el lugar de donde obtenga sus datos.
‫está bien.
‫Así que vamos a ejecutarlo de nuevo, y deberíamos lanzar nuestra excepción nula de argumento, como puede ver,
‫la lista está vacía lista de parámetros perfecta.
‫Está bien.
‫Ahora, podría preguntarse, ¿por qué estamos haciendo todo esto?
‫No quiero que mi programa se bloquee todo el tiempo.
‫Bueno, hacemos esto para que nuestro programa no entre en el estado en el que realmente cambiaría algo en la base
‫de datos.
‫No cambiaremos nada en la base de datos y nuestro pequeño programa.
‫Pero imagina que sería el caso entonces.
‫Es una situación muy diferente y podemos crear algunos problemas graves aquí.
‫Ahora, quiero mostrarles una última cosa, porque antes teníamos todo este derecho, así que antes
‫teníamos esta declaración if y esta y aquella y así sucesivamente, y antes teníamos la lista de este amigo.
‫Sí, en realidad podría detenerme antes de que tuviéramos amigos aquí y nos cruzáramos con amigos allí, y luego tratamos de tener
‫10 amigos en nuestra fiesta, pero solo tenemos siete amigos.
‫Entonces, en esta situación, una vez que ejecutamos, lo que podemos hacer es forzar este error que tuvimos y el error estaba en nuestro
‫amigo de la fiesta.
‫Bien, sacamos este argumento fuera de rango.
‫El índice de excepciones estaba fuera de alcance.
‫Ese es un problema que teníamos antes de solucionarlo.
‫Derecha.
‫Pero ahora lo interesante que podemos ver es la pila de llamadas.
‫Entonces hay algo llamado pila de llamadas.
‫Y déjame hacerlo un poco más grande aquí, de hecho.
‫Quiero decir, cierra todos esos.
‫Así que ahora veamos esta pila de llamadas.
‫Esta pila de llamadas aquí dice que actualmente estamos en la línea cuarenta y seis.
‫Está bien.
‫Ahí es donde estamos.
‫Entonces vamos a obtener un método diferente.
‫Ahora, si vamos un paso más arriba, podemos ver que aquí es donde se llamó al método party front.
‫Ahora estamos dentro del método plural get party friends.
‫Y lo que queremos saber dónde se llamó este método.
‫Bueno, se llamó en la línea 13.
‫Entonces, con la pila de llamadas, podemos ver desde dónde nos llamaron, desde dónde nos llamaron de nuevo y así
‫sucesivamente.
‫Entonces podemos subir todo el camino hasta el nivel en el que lo haremos.
‫Se llamó al método inicial y se llamó al método inicial para conseguir amigos de la fiesta.
‫Luego entramos en este bucle while, luego se llama get party friend y entramos en este método aquí.
‫Y luego, finalmente, nuestra variable se crea en función de una lista que está vacía.
‫De acuerdo, todo correcto.
‫Así que espero que esto le haya dado una pequeña introducción a la depuración.
‫Por supuesto, hay mucho más por saber, pero no quiero aburrirlos con todos los detalles porque
‫algunas de las cosas son útiles.
‫Pero muchos de ellos no serán necesarios en su vida diaria porque, quiero decir, en general, puede, por
‫supuesto, seguir adelante e ir a depurar y luego ver todas las diferentes ventanas que puede obtener
‫aquí y puede investigue las amenazas que se ejecutan en paralelo, los procesos, etc.
‫Pero creo que lo que está viendo ahora realmente serán las cosas principales o serán las
‫cosas principales que necesitará, las herramientas principales que necesitará para depurar su
‫software.
‫Está bien.
‫Así que espero que haya disfrutado de esto y espero que pueda utilizarlo en sus programas futuros.
‫Y ahora finalmente puedes ver cómo se resuelve la depuración.
‫Y, por cierto, gracias por dar estos comentarios, porque recibí comentarios de que faltaba una sección de depuración,
‫así que decidí crear esta pequeña sección.
‫Muchas gracias por los comentarios.
‫Si tiene algo que cree que falta en este curso o si cree que algo está
‫muy mal, no me dé una mala calificación directamente.
‫Pero déjame saber de qué se trata para que pueda mejorar el campo, porque mi objetivo es hacer de este el mejor uso,
‫por supuesto, del mercado.
‫Así que muchas gracias por tu ayuda y espero verte en el próximo video.