1 00:00:00,180 --> 00:00:05,620 Nos ha ocurrido hasta ahora 2 00:00:05,620 --> 00:00:07,000 Que a veces nos han 3 00:00:07,000 --> 00:00:09,380 Ocurrido dos cosas 4 00:00:09,380 --> 00:00:11,179 Primera, que hemos ejecutado un programa 5 00:00:11,179 --> 00:00:13,359 Y nos han salido letras rojas 6 00:00:13,359 --> 00:00:13,759 ¿Verdad? 7 00:00:14,880 --> 00:00:17,460 Entonces, eso es 8 00:00:17,460 --> 00:00:19,079 Las letras rojas 9 00:00:19,079 --> 00:00:20,679 También están programadas 10 00:00:20,679 --> 00:00:22,980 Alguien ha programado 11 00:00:22,980 --> 00:00:23,579 ¿Cómo? 12 00:00:24,280 --> 00:00:26,480 No es que el ordenador haya explotado 13 00:00:26,480 --> 00:00:28,039 Y nos diga eso 14 00:00:28,039 --> 00:00:47,939 No, no, no. Eso no nos lo dice el ordenador. Alguien ha programado que cuando detecta que ocurre cierta cosa, pues, por ejemplo, que tú has dado un índice dentro de unos corchetitos de un array y resulta que ese índice que tú has dado es mayor que el tamaño que tiene ese objeto array. 15 00:00:47,939 --> 00:00:50,820 pues alguien ha programado en esas clases 16 00:00:50,820 --> 00:00:52,759 de la máquina virtual, entonces hacer un 17 00:00:52,759 --> 00:00:54,159 system out con las líneas rojas 18 00:00:54,159 --> 00:00:56,020 ¿vale? ya nos ha pasado eso 19 00:00:56,020 --> 00:00:58,479 que hay veces que hemos ejecutado código 20 00:00:58,479 --> 00:01:00,899 y como consecuencia de ejecutarlo 21 00:01:00,899 --> 00:01:02,679 nos han salido líneas rojas 22 00:01:02,679 --> 00:01:04,659 ¿vale? pues eso significa 23 00:01:04,659 --> 00:01:06,159 que alguien 24 00:01:06,159 --> 00:01:08,620 y ese alguien es un código 25 00:01:08,620 --> 00:01:10,299 un código de las clases 26 00:01:10,299 --> 00:01:12,359 que nosotros usamos 27 00:01:12,359 --> 00:01:13,079 siempre 28 00:01:13,079 --> 00:01:16,299 sin saber que son las de la JR 29 00:01:16,299 --> 00:01:19,140 alguien ha decidido que ahí has hecho algo 30 00:01:19,140 --> 00:01:19,760 que no mola 31 00:01:19,760 --> 00:01:22,000 y ese algo que no mola 32 00:01:22,000 --> 00:01:24,840 te informa sacándote un montón 33 00:01:24,840 --> 00:01:26,319 de líneas rojas de system out 34 00:01:26,319 --> 00:01:28,980 y además te para el programa con un system exit 35 00:01:28,980 --> 00:01:31,079 el programa también se para 36 00:01:31,079 --> 00:01:31,640 por código 37 00:01:31,640 --> 00:01:34,620 entonces no es que haya explotado el ordenador 38 00:01:34,620 --> 00:01:36,640 y se haya parado la aplicación 39 00:01:36,640 --> 00:01:39,560 no, es que todo de forma muy controlada 40 00:01:39,560 --> 00:01:41,040 en algún momento 41 00:01:41,040 --> 00:01:42,620 el código, no el que has hecho tú 42 00:01:42,620 --> 00:01:44,519 sino el código que ya está en la JR 43 00:01:44,519 --> 00:01:45,879 al que llamamos todo el rato 44 00:01:45,879 --> 00:01:48,079 cada vez que hacemos un forEach 45 00:01:48,079 --> 00:01:49,859 llamamos a ese código de la JRE 46 00:01:49,859 --> 00:01:51,400 cada vez que hacemos un system out 47 00:01:51,400 --> 00:01:52,180 llamamos a ese código 48 00:01:52,180 --> 00:01:53,540 cada vez que usamos una clase stream 49 00:01:53,540 --> 00:01:54,379 llamamos a ese código 50 00:01:54,379 --> 00:01:56,760 cada vez que hacemos un montón de cosas 51 00:01:56,760 --> 00:01:59,340 la máquina virtual tiene que ir a ese código 52 00:01:59,340 --> 00:02:00,980 bueno, pues dentro de ese código 53 00:02:00,980 --> 00:02:02,359 en ese punto 54 00:02:02,359 --> 00:02:05,500 se ha verificado que algo de lo que has hecho 55 00:02:05,500 --> 00:02:07,099 está muy mal hecho 56 00:02:07,099 --> 00:02:08,199 no deberías hacerlo 57 00:02:08,199 --> 00:02:11,000 y entonces él te hace un system out 58 00:02:11,000 --> 00:02:11,879 en el que te avisa 59 00:02:11,879 --> 00:02:14,219 y además para el programa consiste en el sí 60 00:02:14,219 --> 00:02:15,360 ¿vale? eso es lo primero 61 00:02:15,360 --> 00:02:17,800 eso es lo que pasa cuando se hacen líneas rojas 62 00:02:17,800 --> 00:02:19,879 vale, entonces 63 00:02:19,879 --> 00:02:21,879 puede ocurrir que nosotros 64 00:02:21,879 --> 00:02:23,500 no queramos que sea eso lo que pase 65 00:02:23,500 --> 00:02:25,219 oye, sí, puede que yo 66 00:02:25,219 --> 00:02:27,699 esté haciendo esto mal cuando yo lo estoy escribiendo 67 00:02:27,699 --> 00:02:29,039 en mi código, puede que sí 68 00:02:29,039 --> 00:02:31,939 o puede que no, porque depende 69 00:02:31,939 --> 00:02:33,520 a lo mejor de datos externos 70 00:02:33,520 --> 00:02:35,699 entonces, tenemos que nosotros 71 00:02:35,699 --> 00:02:37,639 poder decidir si aún 72 00:02:37,639 --> 00:02:39,900 detectando el código que hemos 73 00:02:39,900 --> 00:02:41,680 hecho al cofeo, aún detectándolo 74 00:02:41,680 --> 00:02:43,800 queremos que el programa siga o 75 00:02:43,800 --> 00:02:45,580 se pare, tenemos que tener esa opción 76 00:02:45,580 --> 00:02:46,860 ¿vale? 77 00:02:47,340 --> 00:02:49,460 eso es una de las cosas que tenemos que incorporar 78 00:02:49,460 --> 00:02:51,560 tenemos que incorporar dos pequeñas cositas, primero 79 00:02:51,560 --> 00:02:53,699 tener al menos la opción 80 00:02:53,699 --> 00:02:55,680 de, vale, muy bien, código de la 81 00:02:55,680 --> 00:02:57,659 JRE, has detectado que 82 00:02:57,659 --> 00:02:59,300 he hecho algo feo, pero no me pares 83 00:02:59,300 --> 00:03:00,680 no me pares 84 00:03:00,680 --> 00:03:03,599 que la aplicación siga, eso es lo primero 85 00:03:03,599 --> 00:03:05,520 que tenemos que incorporar, la opción de que el programa 86 00:03:05,520 --> 00:03:08,099 no pare, porque es que es imposible 87 00:03:08,099 --> 00:03:09,699 controlar todo lo que 88 00:03:09,699 --> 00:03:10,960 hacemos mal, es imposible 89 00:03:10,960 --> 00:03:13,219 entonces si subimos una aplicación enorme 90 00:03:13,219 --> 00:03:15,379 a producción y ya está funcionando 91 00:03:15,379 --> 00:03:17,439 y de repente llega un dato 92 00:03:17,439 --> 00:03:19,199 de entrada que hace 93 00:03:19,199 --> 00:03:21,379 que algo esté 94 00:03:21,379 --> 00:03:23,280 funcionando mal y que mi código de la 95 00:03:23,280 --> 00:03:24,960 JR verifica que está funcionando mal 96 00:03:24,960 --> 00:03:27,439 y el programa se para, pues el usuario 97 00:03:27,439 --> 00:03:29,099 se queda ahí con el programa parado, ya está 98 00:03:29,099 --> 00:03:31,360 no, eso no debería ocurrir, el programa debería 99 00:03:31,360 --> 00:03:33,400 poder seguir por otro camino 100 00:03:33,400 --> 00:03:35,280 que le permite arreglar eso, lo que 101 00:03:35,280 --> 00:03:36,960 fuera, pero nunca jamás pararse 102 00:03:36,960 --> 00:03:38,800 nunca jamás pararse, que es lo que está ocurriendo 103 00:03:38,800 --> 00:03:40,840 luego vamos a incorporar eso 104 00:03:40,840 --> 00:03:55,860 Y luego también vamos a incorporar la opción de hacer nosotros nuestros propios programas de tal manera que también lancen esas excepciones, porque eso nos da una flexibilidad de diseño que está muy bien, ¿vale? De hacer unos diseños mejores. 105 00:03:56,280 --> 00:04:06,620 No avisar siempre con el system out, que es muy feo, sino avisar de una manera más sofisticada, que es lanzando una propia excepción, en rojo o como sea, ¿vale? 106 00:04:06,620 --> 00:04:09,080 vamos a hacer 107 00:04:09,080 --> 00:04:10,939 la primera de las partes 108 00:04:10,939 --> 00:04:22,120 pues venga 109 00:04:22,120 --> 00:04:25,000 vamos a hacer un proyectillo 110 00:04:39,000 --> 00:04:42,259 a ver 111 00:04:42,259 --> 00:04:45,120 sí, sí, sí 112 00:04:45,120 --> 00:04:47,600 Sois muy poco finos y refinados 113 00:04:47,600 --> 00:04:54,899 Como digas en tu puesto de trabajo 114 00:04:54,899 --> 00:04:55,860 Estoy hasta la polla 115 00:04:55,860 --> 00:05:04,800 En un entorno controlado 116 00:05:04,800 --> 00:05:07,100 Depende 117 00:05:07,100 --> 00:05:09,100 Imagínate que tienes al CEO detrás 118 00:05:09,100 --> 00:05:15,040 Eso, cuidado 119 00:05:15,040 --> 00:05:16,860 En los entornos laborales no hay amigos 120 00:05:16,860 --> 00:05:18,839 Otra enseñanza que 121 00:05:18,839 --> 00:05:21,199 de verdad, no os dejéis engañar 122 00:05:21,199 --> 00:05:22,259 porque luego te pueden 123 00:05:22,259 --> 00:05:23,720 claro 124 00:05:23,720 --> 00:05:27,660 a ver 125 00:05:27,660 --> 00:05:33,120 ya, pero aún así hay que ser siempre 126 00:05:33,120 --> 00:05:35,240 muy cuidadoso en el entorno laboral 127 00:05:35,240 --> 00:05:37,379 no hay amigos 128 00:05:37,379 --> 00:05:38,680 ni amantes, nada 129 00:05:38,680 --> 00:05:40,199 en el entorno laboral no hay nada de eso 130 00:05:40,199 --> 00:05:43,819 y si los hay 131 00:05:43,819 --> 00:05:48,740 solo en el cuarto de baño 132 00:05:48,740 --> 00:05:51,720 Pues eso 133 00:05:51,720 --> 00:05:54,240 Aplicarlo al dedillo 134 00:05:54,240 --> 00:06:01,379 Otro refrán machista 135 00:06:01,379 --> 00:06:01,939 Vamos 136 00:06:01,939 --> 00:06:05,680 El que acaba de decir 137 00:06:05,680 --> 00:06:08,899 Claro, como si fuera primero 138 00:06:08,899 --> 00:06:10,680 Exclusivamente decisión de esa parte 139 00:06:10,680 --> 00:06:12,920 Pero bueno, en fin 140 00:06:12,920 --> 00:06:15,040 El que ha dicho él 141 00:06:15,040 --> 00:06:16,399 No me hagas repetirlo 142 00:06:16,399 --> 00:06:18,399 Cuando tengas la olla, no metas la... 143 00:06:19,459 --> 00:06:29,939 Vale, venga, a ver. 144 00:06:31,519 --> 00:06:33,839 Claro, es que ya tengo el de... 145 00:06:36,959 --> 00:06:42,500 Le voy a llamar con barra baja y ya está. 146 00:06:43,879 --> 00:06:45,139 Ejemplo, excepciones. 147 00:06:46,079 --> 00:06:47,459 Tonterina y nos vamos. 148 00:06:47,839 --> 00:07:11,709 Vale, pues por ejemplo, situación que se nos da típica, por ejemplo, 149 00:07:12,529 --> 00:07:17,550 ay, ya estamos con el mail, que ya sé que hay un truco, que no sé qué, que te lo hace. 150 00:07:21,550 --> 00:07:24,550 Es que me cuesta incorporar nuevos aprendizajes. 151 00:07:26,189 --> 00:07:30,939 Porque es muy cómodo. 152 00:07:32,360 --> 00:07:34,060 No tengo que buscar el corchete 153 00:07:34,060 --> 00:07:35,519 que con lo mal que veo me cuesta encontrarlo. 154 00:07:35,879 --> 00:07:38,120 A ver, esto es una manera, por si lo veis por ahí 155 00:07:38,120 --> 00:07:38,540 escrito. 156 00:07:40,120 --> 00:07:40,639 Ya, ya, ya. 157 00:07:41,680 --> 00:07:43,899 Esto no lo hemos visto ni lo hemos mirado, pero bueno, son los 158 00:07:43,899 --> 00:07:45,980 típicos detalles que se van incorporando en versiones de Java. 159 00:07:47,240 --> 00:07:48,019 Esto es una forma 160 00:07:48,019 --> 00:07:49,120 cuando tú quieres decir, 161 00:07:49,879 --> 00:07:50,720 hay una cosa que se llama 162 00:07:50,720 --> 00:07:54,279 parámetros variables de los métodos. 163 00:07:54,279 --> 00:07:55,540 Nosotros hemos visto hasta ahora 164 00:07:55,540 --> 00:07:58,259 que a los métodos hay que pasarle 165 00:07:58,259 --> 00:07:59,959 exactamente los parámetros que necesitas. 166 00:08:00,120 --> 00:08:00,959 Este y este y este. 167 00:08:01,699 --> 00:08:03,300 Pero es esta la posibilidad de dejar abierto. 168 00:08:03,300 --> 00:08:04,560 ¿Como los tipos canálicos? 169 00:08:05,680 --> 00:08:06,319 Sí. 170 00:08:07,860 --> 00:08:09,980 En este caso en cantidad. 171 00:08:10,500 --> 00:08:12,180 No en tipo de dato, sino en cantidad. 172 00:08:12,560 --> 00:08:13,199 Claro. 173 00:08:13,980 --> 00:08:16,879 Entonces, yo aquí estoy diciendo 174 00:08:16,879 --> 00:08:19,399 pásame un número variable 175 00:08:19,399 --> 00:08:21,279 de parámetros de tipo string. 176 00:08:21,740 --> 00:08:23,699 No sé si 2, 3, 4, 5. 177 00:08:23,699 --> 00:08:25,939 con lo cual es lo mismo 178 00:08:25,939 --> 00:08:26,699 que esto en realidad 179 00:08:26,699 --> 00:08:28,939 es lo mismo que esto 180 00:08:28,939 --> 00:08:31,819 con esto pásame una cantidad de parámetros 181 00:08:31,819 --> 00:08:33,259 ¿vale? entonces 182 00:08:33,259 --> 00:08:35,779 como es lo mismo pero se 183 00:08:35,779 --> 00:08:37,759 aplica también en otras 184 00:08:37,759 --> 00:08:40,019 cosas, o sea que tiene sus detalles 185 00:08:40,019 --> 00:08:41,759 no lo hemos visto 186 00:08:41,759 --> 00:08:43,379 pero bueno es una cosa que se incorporó después 187 00:08:43,379 --> 00:08:45,700 son esos pequeños detalles que podéis estudiar 188 00:08:45,700 --> 00:08:47,879 por vuestra cuenta, pero a veces por vaguería 189 00:08:47,879 --> 00:08:49,600 y porque no viven el corchete yo lo pongo 190 00:08:49,600 --> 00:08:51,340 pero da igual, olvidarlo 191 00:08:51,340 --> 00:08:54,059 vale, pues entonces, situación típica 192 00:08:54,059 --> 00:08:56,039 en la que se nos puede dar una excepción 193 00:08:56,039 --> 00:08:57,539 con la que no contábamos 194 00:08:57,539 --> 00:08:59,299 pues le vamos a decir al tío 195 00:08:59,299 --> 00:09:01,720 John 196 00:09:01,720 --> 00:09:02,899 o quien sea el que habla 197 00:09:02,899 --> 00:09:06,700 oye John 198 00:09:06,700 --> 00:09:22,610 vale, imaginaos un 199 00:09:22,610 --> 00:09:24,250 programa que tiene que 200 00:09:24,250 --> 00:09:26,529 introducir un número y mostrar 201 00:09:26,529 --> 00:09:27,830 pues 202 00:09:27,830 --> 00:09:32,809 no, hombre, no, te has quedado más adelante 203 00:09:32,809 --> 00:09:34,590 imagina un programa 204 00:09:34,590 --> 00:09:40,610 oye, ni que 205 00:09:40,610 --> 00:09:42,830 fuera el único, en caso de serlo 206 00:09:42,830 --> 00:09:48,210 eso jamás 207 00:09:48,210 --> 00:09:50,309 jamás lo diría 208 00:09:50,309 --> 00:09:53,529 Eso sí, lo que hay en el cerebro de cada persona 209 00:09:53,529 --> 00:09:54,809 Nunca lo indaguéis 210 00:09:54,809 --> 00:09:56,690 Porque puede haber de todo 211 00:09:56,690 --> 00:09:59,289 Pero lo importante no es lo que se piensa 212 00:09:59,289 --> 00:10:00,149 Es lo que se dice 213 00:10:00,149 --> 00:10:03,289 La imagen que des a los demás es lo que quieras 214 00:10:03,289 --> 00:10:04,110 Por supuesto 215 00:10:04,110 --> 00:10:07,029 Lo importante no es lo que eres 216 00:10:07,029 --> 00:10:08,570 Eso no existe, es lo que haces 217 00:10:08,570 --> 00:10:10,529 Es lo que hay en las acciones 218 00:10:10,529 --> 00:10:11,850 Justo 219 00:10:11,850 --> 00:10:14,669 Tú puedes ser un cabronazo, pero si no lo manifiestas 220 00:10:14,669 --> 00:10:15,710 Eres maravilloso 221 00:10:15,710 --> 00:10:16,789 Tú puedes estar pensando todo el día 222 00:10:16,789 --> 00:10:18,049 Odio a los negros, odio a los negros 223 00:10:18,049 --> 00:10:25,009 de todas formas 224 00:10:25,009 --> 00:10:28,730 me pregunto que tienes tú de negro 225 00:10:28,730 --> 00:10:43,909 ha dicho que podría pensar eso 226 00:10:43,909 --> 00:10:45,450 pero lo que importa es lo que haga 227 00:10:45,450 --> 00:10:46,330 y tiene razón 228 00:10:46,330 --> 00:10:47,809 lo que importa es lo que tú hagas 229 00:10:47,809 --> 00:10:49,409 porque del pensamiento a veces no eres libre 230 00:10:49,409 --> 00:10:50,509 Estás demasiado acondicionado 231 00:10:50,509 --> 00:10:53,029 Pero sí que eres libre sobre lo que tú vas a hacer 232 00:10:53,029 --> 00:10:53,929 Con eso 233 00:10:53,929 --> 00:10:56,769 Tus acciones son las que te definen 234 00:10:56,769 --> 00:10:57,210 No tu 235 00:10:57,210 --> 00:11:00,269 Eso 236 00:11:00,269 --> 00:11:02,509 Vale, a ver 237 00:11:02,509 --> 00:11:04,429 Introduzca número 238 00:11:04,429 --> 00:11:06,570 Pues venga, ahora introducimos un número 239 00:11:06,570 --> 00:11:46,070 Bueno, aquí en este programa sí que hemos llegado todos 240 00:11:46,070 --> 00:11:47,090 Estamos todos, ¿verdad? 241 00:11:47,090 --> 00:11:48,909 aquí no se ha perdido 242 00:11:48,909 --> 00:11:52,289 el doble igual 243 00:11:52,289 --> 00:11:53,649 aquí nadie se ha perdido 244 00:11:53,649 --> 00:11:55,049 ¿qué significa el cero? 245 00:11:56,889 --> 00:11:57,370 uff 246 00:11:57,370 --> 00:11:58,990 una pregunta interesante 247 00:11:58,990 --> 00:12:02,470 para los chinos no existía el cero 248 00:12:02,470 --> 00:12:03,669 era todo 249 00:12:03,669 --> 00:12:05,990 el uno y el menos uno, la lucha de contrarios 250 00:12:05,990 --> 00:12:06,750 no existía el cero 251 00:12:06,750 --> 00:12:10,009 por ejemplo 252 00:12:10,009 --> 00:12:11,730 claro, entonces interesante 253 00:12:11,730 --> 00:12:13,610 ¿qué significa el cero? en nuestro caso 254 00:12:13,610 --> 00:12:16,509 pues significa que no tiene resto 255 00:12:16,509 --> 00:12:19,070 vale, a ver, entonces 256 00:12:19,070 --> 00:12:21,529 uno ejecuta esto y ya está, y estupendo 257 00:12:21,529 --> 00:12:23,830 y tiene un programa maravilloso y le dan en el trabajo 258 00:12:23,830 --> 00:12:25,370 pues 259 00:12:25,370 --> 00:12:27,750 un bonus, porque ha hecho su trabajo 260 00:12:27,750 --> 00:12:29,669 y ya está, vale, pero claro 261 00:12:29,669 --> 00:12:31,610 el equipo de pruebas no es 262 00:12:31,610 --> 00:12:33,330 tonto, no es tan tonto como el jefe 263 00:12:33,330 --> 00:12:35,110 el jefe normalmente sí es bastante 264 00:12:35,110 --> 00:12:37,850 lerdillo, porque si no no sería jefe 265 00:12:37,850 --> 00:12:39,710 habría seguido de técnico, porque el listo 266 00:12:39,710 --> 00:12:41,149 sigue de técnico que es el que saca el curro 267 00:12:41,149 --> 00:12:42,950 entonces si es medio tonto, pues se va para arriba 268 00:12:42,950 --> 00:12:44,529 y así no molestas 269 00:12:44,529 --> 00:12:48,529 pero el equipo de testing no es tonto 270 00:12:48,529 --> 00:12:50,269 y el equipo de testing 271 00:12:50,269 --> 00:12:52,029 se pone a pasar sus pruebas 272 00:12:52,029 --> 00:12:54,049 hace sus pruebas de caja negra, de caja blanca 273 00:12:54,049 --> 00:12:56,090 después de todas las pruebas tiene un conjunto de casos 274 00:12:56,090 --> 00:12:57,070 de pruebas que te cagas 275 00:12:57,070 --> 00:12:59,110 y hace esto 276 00:12:59,110 --> 00:13:01,769 y dice, ah, pues no has pasado las pruebas 277 00:13:01,769 --> 00:13:02,929 en este programa estupendo 278 00:13:02,929 --> 00:13:06,169 vale, entonces efectivamente, ¿qué ha ocurrido? 279 00:13:06,929 --> 00:13:08,389 el programa está mal 280 00:13:08,389 --> 00:13:10,470 no, el programa no está mal 281 00:13:10,470 --> 00:13:12,090 yo trato de leer un número entero 282 00:13:12,090 --> 00:13:13,710 lo guardo en un número entero 283 00:13:13,710 --> 00:13:15,929 el programa está estupendo, es que no puedo hacer nada más 284 00:13:15,929 --> 00:13:17,870 de lo que he hecho, no puedo cambiar el código, está bien 285 00:13:17,870 --> 00:13:19,909 pero claro, dependo de 286 00:13:19,909 --> 00:13:21,970 factores externos, dependo de lo que 287 00:13:21,970 --> 00:13:22,870 haga la gente de fuera 288 00:13:22,870 --> 00:13:25,950 me tengo que resignar a que 289 00:13:25,950 --> 00:13:28,149 si el de fuera le da por meter un decimal 290 00:13:28,149 --> 00:13:29,710 mi programa se ha parado 291 00:13:29,710 --> 00:13:30,809 y el pobre usuario 292 00:13:30,809 --> 00:13:33,490 se ha quedado diciendo y aquí que pasa 293 00:13:33,490 --> 00:13:35,710 no me tengo que resignar a eso, tengo que poder hacer algo 294 00:13:35,710 --> 00:13:37,190 entonces 295 00:13:37,190 --> 00:13:50,610 del desarrollador siempre 296 00:13:50,610 --> 00:13:53,309 porque una premisa fundamental es que el usuario 297 00:13:53,309 --> 00:13:55,330 es tonto y lo va a hacer 298 00:13:55,330 --> 00:13:55,889 todo mal 299 00:13:55,889 --> 00:14:02,549 pues tu programa 300 00:14:02,549 --> 00:14:05,429 el desarrollador tendrá que ponerte un amable mensaje 301 00:14:05,429 --> 00:14:06,809 en el que te diga 302 00:14:06,809 --> 00:14:09,129 Por favor, introduzca la fecha en este formato. 303 00:14:09,830 --> 00:14:12,669 Y si tú insistes, otra vez el amable mensaje. 304 00:14:13,629 --> 00:14:15,909 Y si no, pues el desarrollador está haciendo mal. 305 00:14:17,009 --> 00:14:19,090 Claro, pues el tema es que aquí no hay salida. 306 00:14:19,210 --> 00:14:20,549 Yo no puedo cambiar mi programa. 307 00:14:21,549 --> 00:14:24,330 Pero sí que podemos decir, oye, ¿qué pasa? 308 00:14:24,590 --> 00:14:26,289 Yo sé, porque ya tengo experiencia, 309 00:14:26,429 --> 00:14:28,009 porque he hecho en mi caso de pruebas, 310 00:14:28,730 --> 00:14:30,409 pues he visto que esto que ha ocurrido 311 00:14:30,409 --> 00:14:32,610 es que se ha lanzado una excepción. 312 00:14:32,610 --> 00:14:33,809 Esto no lo quería. 313 00:14:34,970 --> 00:14:36,370 ¿Qué es una excepción? 314 00:14:36,809 --> 00:14:46,669 Una excepción en realidad es un objeto que se instancia y aparece en el programa cuando se detecta, el código detecta que ha ocurrido algo raro. 315 00:14:47,210 --> 00:14:49,269 Entonces, ¿aquí quién lo detecta aunque nosotros no lo veamos? 316 00:14:49,769 --> 00:14:51,049 Aquí lo detecta el next in. 317 00:14:51,690 --> 00:14:54,169 El next in no lo hemos hecho nosotros, lógicamente. 318 00:14:54,330 --> 00:15:00,610 El next in, pues, tiene su código aquí dentro que hace un montón de historietas, ¿vale? 319 00:15:00,610 --> 00:15:21,429 Y cuando ese código detecta, lo siento, aquí el match me ha fallado, ¿qué hace? Te lanza, y como veis está muy controlado por código, te lanza un objeto, por eso es un new, un objeto excepción de este tipo. 320 00:15:21,429 --> 00:15:25,610 Luego, las excepciones son objetos que se crean en el programa, 321 00:15:25,889 --> 00:15:28,889 alguien los crea cuando detecta que algo ha fallado. 322 00:15:32,269 --> 00:15:35,669 Bueno, esta clase está declarada en algún sitio, le mete información, 323 00:15:35,889 --> 00:15:41,029 en este caso le mete un mensajito, que es el mensajito que a su vez 324 00:15:41,029 --> 00:15:49,899 está aquí en esta clase, que lo podemos, sí, bueno. 325 00:15:52,799 --> 00:15:55,200 ¿Dónde está este getMessage? 326 00:15:55,279 --> 00:16:00,139 En F, pues aquí tendrá su mensaje en algún sitio puesto. 327 00:16:00,299 --> 00:16:05,980 Ese mensajito que sale en algún sitio de este objeto está... 328 00:16:05,980 --> 00:16:06,700 ¡Ay, ya lo he perdido! 329 00:16:16,700 --> 00:16:20,659 Sí, pero bueno, que luego cuando hagamos nuestras propias excepciones 330 00:16:20,659 --> 00:16:22,580 veremos que el que ha hecho esa clase excepción 331 00:16:22,580 --> 00:16:24,860 ha puesto el mensajito que quiere que aparezca 332 00:16:24,860 --> 00:16:27,059 que se va recuperando con los métodos 333 00:16:27,059 --> 00:16:30,100 que es exactamente esto que vemos ahí, 334 00:16:30,179 --> 00:16:31,080 de alguna manera, ¿vale? 335 00:16:31,360 --> 00:16:32,740 Entonces, pero lo que me importa ahora, 336 00:16:32,840 --> 00:16:36,539 sobre todo, es que la excepción es un objeto 337 00:16:36,539 --> 00:16:38,259 que crea mi programa. 338 00:16:39,320 --> 00:16:41,960 En este caso, el método este de escáner, 339 00:16:42,019 --> 00:16:43,580 el next in, este de aquí, 340 00:16:44,360 --> 00:16:47,100 el método next in, este, 341 00:16:49,120 --> 00:16:50,679 ha visto que esto ha fallado, 342 00:16:50,679 --> 00:16:53,399 ha hecho este matcher de aquí, lo que sea, 343 00:16:53,500 --> 00:16:55,879 ha visto que, oye, eso está mal, 344 00:16:55,879 --> 00:16:57,500 y ha lanzado 345 00:16:57,500 --> 00:16:58,899 ha creado un objeto 346 00:16:58,899 --> 00:17:00,360 de tipo excepción 347 00:17:00,360 --> 00:17:03,840 entonces excepciones solo se pueden lanzar 348 00:17:03,840 --> 00:17:05,279 las que tengan clases 349 00:17:05,279 --> 00:17:06,359 que ya existen 350 00:17:06,359 --> 00:17:08,160 las que tengan clases 351 00:17:08,160 --> 00:17:11,400 y hay 200.000, 300.000 millones 352 00:17:11,400 --> 00:17:13,119 bueno, exagero, no tantas, pero hay muchas 353 00:17:13,119 --> 00:17:14,279 hay muchas 354 00:17:14,279 --> 00:17:16,279 y una de ellas es esta, por ejemplo 355 00:17:16,279 --> 00:17:17,900 input mismatch exception 356 00:17:17,900 --> 00:17:20,960 que esta se crea cuando tú esperas 357 00:17:20,960 --> 00:17:23,240 un tipo de dato que no casa 358 00:17:23,240 --> 00:17:24,940 en formato con el que 359 00:17:24,940 --> 00:17:26,819 necesitas, ¿vale? 360 00:17:26,839 --> 00:17:28,559 Cuando tú recibes un tipo de dato que no casa. 361 00:17:29,119 --> 00:17:30,980 Vale, pues la excepción es un objeto que la 362 00:17:30,980 --> 00:17:32,799 máquina virtual hace 363 00:17:32,799 --> 00:17:34,859 aparecer, la máquina virtual, no, el 364 00:17:34,859 --> 00:17:36,900 código, el código que se está ejecutando 365 00:17:36,900 --> 00:17:38,839 hace aparecer cuando ve que 366 00:17:38,839 --> 00:17:40,900 algo falla, ¿vale? ¿Y qué 367 00:17:40,900 --> 00:17:42,839 hace? Te lo lanza mediante 368 00:17:42,839 --> 00:17:44,720 esta sentencia throw, hace throw, 369 00:17:45,140 --> 00:17:45,960 te lo lanza, pa. 370 00:17:47,299 --> 00:17:48,920 Y ese lanzamiento 371 00:17:48,920 --> 00:17:50,680 nos llega a nosotros 372 00:17:50,680 --> 00:17:52,619 aquí, nos llega aquí. 373 00:17:54,200 --> 00:17:54,720 Entonces, 374 00:17:54,940 --> 00:18:11,339 Si nosotros nos callamos y no decimos nada, cuando la máquina virtual, después de haber hecho el next in, le llega a ese objeto lanzado con el throw, la máquina virtual dice, uh, me han hecho un throw de una excepción que se ha creado ahí. 375 00:18:11,339 --> 00:18:23,359 ¿Qué hago yo? Pues lo siento. ¿Qué es lo que hago yo? La máquina virtual para el programa y te pone estas letritas. Ya las ha sacado del mensaje de la excepción, etc. 376 00:18:24,940 --> 00:18:43,160 Vale, pero nosotros podemos alterar ese funcionamiento y podemos decirle, oye máquina virtual, cuidado, escucha máquina, si en algún momento te llega a ti una excepción de esta clase, de este tipo, por Dios no pares, haz esto otro y continúa el programa. 377 00:18:43,160 --> 00:18:55,480 Vale, pues ¿cómo hacemos eso? Hacemos eso capturando la excepción. Luego tenemos dos opciones cuando me aparece una excepción, cuando me aparece ese objeto excepción, que en este caso nos está apareciendo aquí. 378 00:18:55,480 --> 00:18:57,319 callarnos 379 00:18:57,319 --> 00:18:59,980 callarnos significa 380 00:18:59,980 --> 00:19:02,220 dejar que esa excepción 381 00:19:02,220 --> 00:19:03,380 se lance 382 00:19:03,380 --> 00:19:06,240 y la máquina virtual entonces la recoja 383 00:19:06,240 --> 00:19:07,779 y para el programa y se acabó 384 00:19:07,779 --> 00:19:09,200 callarnos o 385 00:19:09,200 --> 00:19:10,740 capturarla 386 00:19:10,740 --> 00:19:12,559 capturarla 387 00:19:12,559 --> 00:19:15,460 pues vamos a capturarla 388 00:19:20,359 --> 00:19:21,940 y ya la capturamos 389 00:19:21,940 --> 00:19:23,000 y nos vamos 390 00:19:23,000 --> 00:19:29,380 Pues aquí hasta que no la capturemos 391 00:19:29,380 --> 00:19:30,680 Aquí no se va nadie 392 00:19:30,680 --> 00:19:33,059 Hasta que no se capture la excepción 393 00:19:33,059 --> 00:19:35,140 Así que ya podéis correr rápido 394 00:19:35,140 --> 00:19:36,559 Vale 395 00:19:36,559 --> 00:19:39,500 ¿Cómo se captura una excepción? 396 00:19:40,259 --> 00:19:41,220 Poniendo un bloque 397 00:19:41,220 --> 00:19:43,220 Como ya habéis visto muchas veces 398 00:19:43,220 --> 00:19:44,240 Try, catch 399 00:19:44,240 --> 00:19:50,180 A ver, se pone este bloque 400 00:19:50,180 --> 00:19:52,859 Dentro del try 401 00:19:52,859 --> 00:19:54,000 Entre las llaves 402 00:19:54,000 --> 00:19:56,440 se pone la sentencia que tú 403 00:19:56,440 --> 00:19:58,799 prevés que puede que te haga parecer una excepción 404 00:19:58,799 --> 00:20:00,059 que tú por tu experiencia 405 00:20:00,059 --> 00:20:02,420 porque el equipo de testing te lo ha dicho 406 00:20:02,420 --> 00:20:04,640 por lo que sea prevés que puede 407 00:20:04,640 --> 00:20:05,799 que eso lance una excepción 408 00:20:05,799 --> 00:20:07,400 entonces 409 00:20:07,400 --> 00:20:10,700 la metes en el try y le dices, oye, inténtalo 410 00:20:10,700 --> 00:20:12,519 no te obligo a que la 411 00:20:12,519 --> 00:20:14,099 hagas porque pueda, inténtalo 412 00:20:14,099 --> 00:20:14,900 tú inténtalo 413 00:20:14,900 --> 00:20:17,779 que lo consigues 414 00:20:17,779 --> 00:20:20,000 porque el usuario te ha metido el dato bien 415 00:20:20,000 --> 00:20:22,079 maravilloso, lo que haya en el catcha 416 00:20:22,079 --> 00:20:23,980 como si no existiera, sigues con el programa 417 00:20:23,980 --> 00:20:26,519 que no lo consigues 418 00:20:26,519 --> 00:20:28,220 mira a ver si la excepción 419 00:20:28,220 --> 00:20:29,400 que ha salido es esta 420 00:20:29,400 --> 00:20:36,690 sí 421 00:20:36,690 --> 00:20:38,069 y no 422 00:20:38,069 --> 00:20:40,789 porque gracias a Dios tenemos la herencia 423 00:20:40,789 --> 00:20:42,490 ahora lo 424 00:20:42,490 --> 00:20:45,490 es que hacéis tantas preguntas interesantes 425 00:20:45,490 --> 00:20:47,349 que es imposible acabar pronto 426 00:20:47,349 --> 00:20:54,869 no, pero es que a ver 427 00:20:54,869 --> 00:20:56,589 que de todas estas cosas 428 00:20:56,589 --> 00:20:58,549 salen cosas 429 00:20:58,549 --> 00:21:00,630 sale la clave de 430 00:21:00,630 --> 00:21:03,349 no, pero de responder eso 431 00:21:03,349 --> 00:21:04,329 y de entender eso 432 00:21:04,329 --> 00:21:05,809 está la diferencia 433 00:21:05,809 --> 00:21:09,730 entre ser un programador que vas a poder avanzar 434 00:21:09,730 --> 00:21:10,890 y adaptarte a tu mundo 435 00:21:10,890 --> 00:21:12,190 que seguramente no sea Java 436 00:21:12,190 --> 00:21:15,069 sea bla bla bla, vete a saber qué 437 00:21:15,069 --> 00:21:17,210 o a solamente saber 438 00:21:17,210 --> 00:21:17,990 lo que te han enseñado 439 00:21:17,990 --> 00:21:20,029 ¿a dónde están vendiendo que pruebe Cobol? 440 00:21:20,710 --> 00:21:21,529 que hay trabajo 441 00:21:21,529 --> 00:21:22,809 y que no están coñando 442 00:21:22,809 --> 00:21:27,319 Cobol es viejo, no está para mí 443 00:21:27,319 --> 00:21:30,420 Ya, pero 444 00:21:30,420 --> 00:21:32,920 por la vaguería de migrar 445 00:21:32,920 --> 00:21:34,539 pero en cuanto una IA 446 00:21:34,539 --> 00:21:36,599 se lo migre en un PIS-PAS, pues ya está 447 00:21:36,599 --> 00:21:38,319 Claro 448 00:21:38,319 --> 00:21:39,759 Entonces 449 00:21:39,759 --> 00:21:58,210 Un nombre, sí, a ver 450 00:21:58,210 --> 00:22:26,390 Entonces, no, no, dejadme terminar, paciencia, a ver, sintaxis y estructura del try-catch, tú le dices, try y un bloque entre llaves, dentro de ese bloque pones todas las sentencias que tú quieras, en esas sentencias estarán las que tú preves que puedan generar la excepción, vale, 451 00:22:26,390 --> 00:22:28,170 y el cat significa 452 00:22:28,170 --> 00:22:31,230 si la excepción 453 00:22:31,230 --> 00:22:33,069 que se ha lanzado es de esta clase 454 00:22:33,069 --> 00:22:35,349 entonces 455 00:22:35,349 --> 00:22:37,210 haz lo que yo te meta aquí 456 00:22:37,210 --> 00:22:38,289 haz esto 457 00:22:38,289 --> 00:22:39,789 esto es como si fuera un if 458 00:22:39,789 --> 00:22:42,369 haz esto que está aquí 459 00:22:42,369 --> 00:22:45,210 que te funciona, genial, olvídate de lo demás 460 00:22:45,210 --> 00:22:46,470 y continúe por abajo 461 00:22:46,470 --> 00:22:48,670 que no te funciona 462 00:22:48,670 --> 00:22:50,730 porque te sale una excepción 463 00:22:50,730 --> 00:22:52,369 de esta clase 464 00:22:52,369 --> 00:22:53,869 ahora miramos lo del ex 465 00:22:53,869 --> 00:22:55,269 etcétera 466 00:22:55,269 --> 00:22:56,970 pues entonces entra aquí 467 00:22:56,970 --> 00:22:58,710 y hace esto 468 00:22:58,710 --> 00:23:00,289 pero no paras el programa 469 00:23:00,289 --> 00:23:01,789 sigues por abajo otra vez 470 00:23:01,789 --> 00:23:04,210 luego con un try catch 471 00:23:04,210 --> 00:23:06,089 en ningún caso se para el programa 472 00:23:06,089 --> 00:23:08,089 haya excepción o no, en ningún caso 473 00:23:08,089 --> 00:23:10,650 lo que puede ocurrir es que bien 474 00:23:10,650 --> 00:23:12,849 haces lo del try o bien haces lo del catch 475 00:23:12,849 --> 00:23:13,529 una de dos 476 00:23:13,529 --> 00:23:16,309 si todo te ha funcionado haces lo del try 477 00:23:16,309 --> 00:23:17,650 y continúas por abajo 478 00:23:17,650 --> 00:23:19,549 si no te ha funcionado 479 00:23:19,549 --> 00:23:22,529 haces lo del catch y continúas por abajo 480 00:23:22,529 --> 00:23:24,730 en este caso no queremos continuar por abajo 481 00:23:24,730 --> 00:23:44,910 Con lo cual, en este caso, tendría sentido meter esto aquí dentro, porque solamente quieres hacer esto si esto te ha funcionado, ¿vale? Entonces, este programa lo podríamos cambiar de esta manera. Intenta leer el número. Si no te ha salido excepción, sigue haciendo esto, ¿vale? 482 00:23:44,910 --> 00:24:00,009 Pero si como consecuencia de hacer el next in apareció la excepción, aquí se detiene, aquí se detiene automáticamente, esto ya no se continúa, se detiene y automáticamente saltas al catch y haces lo de dentro y el programa sigue. 483 00:24:00,009 --> 00:24:02,089 entonces funciona o no funciona 484 00:24:02,089 --> 00:24:02,869 el programa sigue 485 00:24:02,869 --> 00:24:06,069 ponemos el adiós para ver que realmente sigue 486 00:24:06,069 --> 00:24:06,690 vale 487 00:24:06,690 --> 00:24:09,509 entonces el catch además 488 00:24:09,509 --> 00:24:12,250 el catch además recibe 489 00:24:12,250 --> 00:24:13,369 el objeto 490 00:24:13,369 --> 00:24:15,950 que ha generado aquí 491 00:24:15,950 --> 00:24:16,789 este código 492 00:24:16,789 --> 00:24:19,890 este código next in cuando vio ese error 493 00:24:19,890 --> 00:24:21,269 generó con el throw un objeto 494 00:24:21,269 --> 00:24:23,349 ¿verdad? vimos aquí un throw new 495 00:24:23,349 --> 00:24:25,690 pues este objeto throw new 496 00:24:25,690 --> 00:24:27,230 que se ha generado este objeto 497 00:24:27,230 --> 00:24:29,930 es el que atrapa este catch 498 00:24:29,930 --> 00:24:31,829 bajo este nombre ex 499 00:24:31,829 --> 00:24:34,009 esto es como si declaramos un método 500 00:24:34,009 --> 00:24:36,670 y este ex se rellena 501 00:24:36,670 --> 00:24:38,750 con el objeto que lanzó 502 00:24:38,750 --> 00:24:40,849 este método, que tiene dentro 503 00:24:40,849 --> 00:24:41,910 toda la información 504 00:24:41,910 --> 00:24:44,730 luego este objeto ex, si uno ve 505 00:24:44,730 --> 00:24:46,549 con el punto todo lo que nos ofrece, nos ofrece 506 00:24:46,549 --> 00:24:48,309 mucha información sobre esa excepción 507 00:24:48,309 --> 00:24:50,630 pues por qué vino, cómo vino, su mensaje 508 00:24:50,630 --> 00:24:51,609 de error, etcétera 509 00:24:51,609 --> 00:24:54,529 y ese objeto pertenece a una clase, ¿a qué clase 510 00:24:54,529 --> 00:24:56,430 pertenece? a esta clase 511 00:24:56,430 --> 00:24:57,869 que tengo que importar, como todas 512 00:24:57,869 --> 00:25:01,490 como todas menos las de 513 00:25:01,490 --> 00:25:02,789 Havala 514 00:25:02,789 --> 00:25:03,809 lo sé 515 00:25:03,809 --> 00:25:07,650 pero la idea 516 00:25:07,650 --> 00:25:09,269 general está entendida 517 00:25:09,269 --> 00:25:10,230 entonces 518 00:25:10,230 --> 00:25:12,750 si yo hago un try-catch 519 00:25:12,750 --> 00:25:15,509 claro porque es una 520 00:25:15,509 --> 00:25:17,130 clase, tengo que importarla 521 00:25:17,130 --> 00:25:19,529 creo que es súper fácil 522 00:25:19,529 --> 00:25:21,089 puedo poner dos en el catch 523 00:25:21,089 --> 00:25:22,470 dos tipos de gestiones distintas 524 00:25:22,470 --> 00:25:23,829 puedes poner 525 00:25:23,829 --> 00:25:25,569 muchas 526 00:25:25,569 --> 00:25:27,789 un multi-catch aquí 527 00:25:27,789 --> 00:25:29,029 porque claro 528 00:25:29,029 --> 00:25:32,430 sí, sí lo vamos a completar 529 00:25:32,430 --> 00:25:34,349 el próximo día, pero sí, puedes poner 530 00:25:34,349 --> 00:25:36,269 catch, catch, catch, porque este código podría 531 00:25:36,269 --> 00:25:38,089 generar varias, claro 532 00:25:38,089 --> 00:25:39,170 entonces 533 00:25:39,170 --> 00:25:41,970 sí 534 00:25:41,970 --> 00:25:43,930 claro 535 00:25:43,930 --> 00:25:46,130 este código imagínate que lanza una excepción 536 00:25:46,130 --> 00:25:48,170 porque el momento en que lanza una, ya como 537 00:25:48,170 --> 00:25:50,069 no sigue, solo puede lanzar una 538 00:25:50,069 --> 00:25:52,269 que es la primera, y ahora ya se pone 539 00:25:52,269 --> 00:25:53,450 a comprobar en todos los catch 540 00:25:53,450 --> 00:25:56,329 y el primero que encuentre que coincide se mete dentro 541 00:25:56,329 --> 00:25:57,869 lo hace y luego ya sigue 542 00:25:57,869 --> 00:25:59,849 ¿vale? entonces 543 00:25:59,849 --> 00:26:01,390 si ejecutamos ahora esto 544 00:26:01,390 --> 00:26:03,269 ahora sí 545 00:26:03,269 --> 00:26:06,630 si el tío mete el numerito bien, estupendo, es par y adiós 546 00:26:06,630 --> 00:26:08,390 pero si el tío 547 00:26:08,390 --> 00:26:10,349 mete el numerito mal, pues has metido 548 00:26:10,349 --> 00:26:12,150 mal el número y en este caso termina 549 00:26:12,150 --> 00:26:13,589 pero podría seguir 550 00:26:13,589 --> 00:26:16,549 entonces es un programa más robusto 551 00:26:16,549 --> 00:26:18,289 ¿vale? 552 00:26:24,730 --> 00:26:26,170 venga, anda, sí, vámonos ya 553 00:26:26,170 --> 00:26:28,329 Pero no hemos terminado 554 00:26:28,329 --> 00:26:29,710 Que no hables así 555 00:26:29,710 --> 00:26:32,170 Habla en bajo 556 00:26:32,170 --> 00:26:35,309 O sea, di esas cosas en bajo