1 00:00:00,000 --> 00:00:09,900 [MÚSICA DE FONDO] 2 00:00:09,900 --> 00:00:11,350 DAVID: Muy bien. 3 00:00:11,350 --> 00:00:17,590 Esto es CS50 e iniciaremos la lección 11, estamos muy cerca del final. 4 00:00:17,590 --> 00:00:20,830 Entre los objetivos de hoy, la siguiente vez y para nuestra lección final 5 00:00:20,830 --> 00:00:24,940 juntos, está unir las cosas que vimos desde la semana cero. 6 00:00:24,940 --> 00:00:30,150 Con esa intención, pensé que podríamos iniciar con el siguiente clip, 7 00:00:30,150 --> 00:00:31,900 tal vez lo recordemos de unas semanas atrás, 8 00:00:31,900 --> 00:00:37,600 en donde tratamos de observar en medios de comunicación populares la percepción 9 00:00:37,600 --> 00:00:40,540 de los espectadores sobre la tecnología, si confían más 10 00:00:40,540 --> 00:00:44,470 en programas como este, en CSI y similares que vemos en la pantalla 11 00:00:44,470 --> 00:00:46,400 aunque técnicamente esto no es muy preciso. 12 00:00:46,400 --> 00:00:51,670 También es maravilloso decirles, que muy recientemente salió Stranger Things 2, 13 00:00:51,670 --> 00:00:54,590 seguramente la mayoría de ustedes sabe a qué me refiero y tal vez 14 00:00:54,590 --> 00:00:58,220 si son como yo la terminaron el sábado, después de que salió el viernes. 15 00:00:58,220 --> 00:01:00,310 Y lo que vimos en la pantalla, 16 00:01:00,310 --> 00:01:01,930 déjenme decirles esto, no es un spoiler, 17 00:01:01,930 --> 00:01:04,209 pero estaba tan orgulloso de esta serie en particular. 18 00:01:04,209 --> 00:01:06,700 Pero antes de que lleguemos allí, les adelantaré 19 00:01:06,700 --> 00:01:09,400 una versión de CS50 de esa misma serie. 20 00:01:09,400 --> 00:01:10,570 Si pudiéramos atenuar las luces. 21 00:01:10,570 --> 00:02:09,220 [REPRODUCCIÓN DEL TEMA STRANGER THINGS] 22 00:02:09,220 --> 00:02:12,250 OK, eso básicamente fue una introducción para lo siguiente, 23 00:02:12,250 --> 00:02:16,804 si nunca hemos visto Stranger Things, o al menos todos los episodios, 24 00:02:16,804 --> 00:02:18,970 y no quiero que todo el Internet me odie, 25 00:02:18,970 --> 00:02:21,290 y mucho menos los que están en esta sala, pero cerremos nuestros ojos brevemente, 26 00:02:21,290 --> 00:02:24,340 en verdad esto no es un spoiler, todo es técnico y no arruina ninguna trama, 27 00:02:24,340 --> 00:02:25,950 aunque a nadie va a importarle en algunas semanas, 28 00:02:25,950 --> 00:02:27,280 así que pensamos que podríamos revelar esto. 29 00:02:27,280 --> 00:02:29,590 Es momento de que pongamos los dedos en nuestros oídos 30 00:02:29,590 --> 00:02:34,429 y cerremos los ojos si no queremos saber más, en algún momento de la presentación, 31 00:02:34,429 --> 00:02:35,470 tenemos esta escena de aquí. 32 00:02:35,470 --> 00:02:37,990 Por supuesto, en cada serie como CSI, La ley y el orden, 33 00:02:37,990 --> 00:02:41,020 y cosas por el estilo, si amplían y mejoran la pantalla, 34 00:02:41,020 --> 00:02:44,860 se vuelve un sinsentido, como un programa de tipo crayón, como lo que vimos en CSI. 35 00:02:44,860 --> 00:02:49,000 Pero estaba tan orgulloso de ver eso que si nos acercamos a esta pantalla, 36 00:02:49,000 --> 00:02:52,690 veremos este código, en un lenguaje llamado Visual Basic. 37 00:02:52,690 --> 00:02:54,820 Y a pesar de que no aprenderemos Visual Basic, 38 00:02:54,820 --> 00:02:57,490 ni muchas personas usan Visual Basic tanto como antes, 39 00:02:57,490 --> 00:03:02,515 ¿podemos deducir lo que este programador hacía en la pantalla? 40 00:03:02,515 --> 00:03:05,390 41 00:03:05,390 --> 00:03:06,954 ¿Qué parece ocurrir? 42 00:03:06,954 --> 00:03:09,620 PÚBLICO: ¿Es algo como obtener una contraseña de cuatro dígitos o romperla? 43 00:03:09,620 --> 00:03:11,720 DAVID: Sí, fue un programa con el cual 44 00:03:11,720 --> 00:03:13,730 rompieron una contraseña de cuatro dígitos. 45 00:03:13,730 --> 00:03:16,370 Si deducimos todos los bucles en esta estructura, 46 00:03:16,370 --> 00:03:19,370 veremos que hace intentos para obtener un dígito tras otro dígito 47 00:03:19,370 --> 00:03:21,290 tras otro dígito tras otro dígito y prueba con todos ellos, 48 00:03:21,290 --> 00:03:25,310 hasta que finalmente encuentra ese valor y sucede algo interesante. 49 00:03:25,310 --> 00:03:28,920 Ahora, todos lo que tengan los ojos cerrados pueden escuchar esto, 50 00:03:28,920 --> 00:03:31,700 pueden sacar los dedos de sus oídos y continuaremos. 51 00:03:31,700 --> 00:03:35,000 Pero tal vez el primer ejemplo de los medios y un programa reciente 52 00:03:35,000 --> 00:03:36,660 sea lo que funciona en la pantalla. 53 00:03:36,660 --> 00:03:39,860 Hoy veremos nuevamente un modelo que 54 00:03:39,860 --> 00:03:43,730 presentamos hace algún tiempo, el MVC o modelo-vista-controlador, que solo 55 00:03:43,730 --> 00:03:47,510 es una manera elegante para describir un tipo de programación 56 00:03:47,510 --> 00:03:52,040 muy popular en la web, en estos días, con el cual tenemos un controlador, que 57 00:03:52,040 --> 00:03:54,650 es el código que escribimos en Pset 6 58 00:03:54,650 --> 00:03:57,020 y ahora en Pset 7, en application.pi. 59 00:03:57,020 --> 00:04:00,004 El hecho de que se llame application.pi es por una convención en Flask, 60 00:04:00,004 --> 00:04:01,670 pero allí es a donde va toda nuestra lógica. 61 00:04:01,670 --> 00:04:04,580 Como en el código que dirige nuestro sitio web, 62 00:04:04,580 --> 00:04:07,125 ¿en cuál carpeta o archivos está lo que conocemos como vistas? 63 00:04:07,125 --> 00:04:10,560 64 00:04:10,560 --> 00:04:11,060 ¿Díganlo de nuevo? 65 00:04:11,060 --> 00:04:11,730 PÚBLICO: ¿En HTML? 66 00:04:11,730 --> 00:04:13,230 DAVID: Sí, en el archivo HTML. 67 00:04:13,230 --> 00:04:16,182 En el subdirectorio de formatos, que también es parte de Flask, 68 00:04:16,182 --> 00:04:17,890 tenemos un montón de archivos HTML, que son 69 00:04:17,890 --> 00:04:20,829 las vistas, la estética o la presentación de la información de nuestro 70 00:04:20,829 --> 00:04:21,740 programa. 71 00:04:21,740 --> 00:04:25,750 La semana pasada, al final les presentamos el modelo, la M en MVC, 72 00:04:25,750 --> 00:04:27,730 que representa los datos, a nuestra base de datos, 73 00:04:27,730 --> 00:04:31,920 tal vez sea un archivo csv, api o para obtener cotizaciones de la bolsa, 74 00:04:31,920 --> 00:04:35,320 tal vez es una base de datos continua, en la que almacenemos a los usuarios, 75 00:04:35,320 --> 00:04:36,940 carteras de acciones y más. 76 00:04:36,940 --> 00:04:39,430 Juntas, estas tres entidades conforman 77 00:04:39,430 --> 00:04:43,270 una aplicación bastante interesante, ya sea para Pset 6, Pset 7 78 00:04:43,270 --> 00:04:44,440 o alguna posterior. 79 00:04:44,440 --> 00:04:49,019 Pero hoy, les presentaremos una pieza más y otro lenguaje. 80 00:04:49,019 --> 00:04:51,310 Sé que hemos descubierto bastantes lenguajes hasta ahora, 81 00:04:51,310 --> 00:04:55,810 Scratch, C, Python y SQL, sin mencionar el HTML y el CSS. 82 00:04:55,810 --> 00:04:59,950 Pero hoy, presentaremos el último de nuestros lenguaje en CS50, JavaScript. 83 00:04:59,950 --> 00:05:03,220 Veremos que JavaScript es la última de las tecnologías de apoyo que 84 00:05:03,220 --> 00:05:07,570 nos permitirá construir funciones y herramientas que conocemos muy bien 85 00:05:07,570 --> 00:05:10,450 en estos tiempos, en nuestros teléfonos y laptops. 86 00:05:10,450 --> 00:05:13,840 Pero antes de hacer eso, nos detendremos en 87 00:05:13,840 --> 00:05:16,660 un ejemplo, por medio del cual conectaremos la semana pasada 88 00:05:16,660 --> 00:05:23,500 con esta, en una última mirada al sitio web de Frosh IMs de antaño. 89 00:05:23,500 --> 00:05:27,550 Para continuar ejecutaré este programa de la siguiente manera. 90 00:05:27,550 --> 00:05:28,900 flask run. 91 00:05:28,900 --> 00:05:32,070 Este es froshims4, está disponible en el código de distribución de hoy. 92 00:05:32,070 --> 00:05:35,189 Para continuar, si abro esta URL, es un programa muy simple, 93 00:05:35,189 --> 00:05:37,480 le hare un acercamiento, que le da a los usuarios la habilidad 94 00:05:37,480 --> 00:05:42,020 para registrarse, ver quién se registró y anular su registro ellos mismos. 95 00:05:42,020 --> 00:05:44,260 Si quiero continuar aquí y registrarme, 96 00:05:44,260 --> 00:05:47,710 veré un formulario como este y puedo elegir del menú desplegable 97 00:05:47,710 --> 00:05:50,350 mi dormitorio de Harvard y después registrar mi nombre. 98 00:05:50,350 --> 00:05:54,160 En la primera versión, hace algunas semanas, este programa no hizo nada. 99 00:05:54,160 --> 00:05:55,641 Solamente desechamos la información 100 00:05:55,641 --> 00:05:57,640 entonces hicimos algo un poco más interesante, 101 00:05:57,640 --> 00:06:00,790 guardamos los datos en el correo electrónico de alguien más, 102 00:06:00,790 --> 00:06:04,930 con solo enviarle un correo y añadimos los archivos csv, que no estuvieron mal, 103 00:06:04,930 --> 00:06:08,960 pero ¿cuáles son los inconvenientes de usar solamente archivos de texto csv? 104 00:06:08,960 --> 00:06:10,710 PÚBLICO: Toma mucho tiempo buscarlos. 105 00:06:10,710 --> 00:06:13,982 DAVID: Sí, puede tomar mucho tiempo buscarlos, 106 00:06:13,982 --> 00:06:16,940 porque, en especial, a medida que crecen más y más, lo mejor que podemos hacer 107 00:06:16,940 --> 00:06:17,600 es de tipo lineal, 108 00:06:17,600 --> 00:06:20,467 tenemos que buscar en todo archivo solo para encontrar un valor 109 00:06:20,467 --> 00:06:22,550 porque no existe una estructura en los datos, 110 00:06:22,550 --> 00:06:26,270 son como un arreglo de líneas, por así decirlo, una lista de texto 111 00:06:26,270 --> 00:06:27,560 que tenemos que buscar. 112 00:06:27,560 --> 00:06:31,970 Tampoco tenemos funciones como seleccionar, insertar y eliminar, 113 00:06:31,970 --> 00:06:35,120 estos verbos u operadores que obtuvimos de una base de datos 114 00:06:35,120 --> 00:06:39,290 la semana pasada, que nos permiten trabajar más y más fácilmente, sin tener 115 00:06:39,290 --> 00:06:40,340 que escribir tanto del código. 116 00:06:40,340 --> 00:06:42,230 Podemos únicamente ejecutar un comando de SQL, 117 00:06:42,230 --> 00:06:45,660 como seleccionar, insertar, eliminar, actualizar o algo así. 118 00:06:45,660 --> 00:06:48,380 ¿Cómo construimos una pieza como esta? 119 00:06:48,380 --> 00:06:54,530 Bueno, recordemos que si entramos en el código fuente de Frosh IMs 4, 120 00:06:54,530 --> 00:06:57,560 tendríamos algún punto de entrada, como application.pi, 121 00:06:57,560 --> 00:06:58,940 y algunas rutas diferentes. 122 00:06:58,940 --> 00:07:02,210 Esto nos resultaría conocido si nos sumergimos antes en finanzas CS50, 123 00:07:02,210 --> 00:07:05,797 la primera de estas rutas, hasta arriba, renders index. HTML, 124 00:07:05,797 --> 00:07:07,130 allí es donde veo el menú. 125 00:07:07,130 --> 00:07:10,040 Y las posibilidades son, un index. HTML es esa lista con viñetas 126 00:07:10,040 --> 00:07:12,980 de tres opciones, cada una de las cuales enlaza una ruta diferente. 127 00:07:12,980 --> 00:07:15,710 Entonces las rutas comienzan a volverse un poco más interesantes. 128 00:07:15,710 --> 00:07:19,400 En la pantalla aquí, de la línea 13 hacia abajo, 129 00:07:19,400 --> 00:07:22,580 está la lógica, mi código controlador, por así decirlo, 130 00:07:22,580 --> 00:07:26,146 este me permite insertar un usuario en mi base de datos. 131 00:07:26,146 --> 00:07:27,020 ¿Y cómo lo hago? 132 00:07:27,020 --> 00:07:29,000 Bueno, en las líneas 15 y 16 hago la siguiente pregunta, 133 00:07:29,000 --> 00:07:33,200 Si el método de solicitudes y que para entrar es get ¿qué es lo que hago? 134 00:07:33,200 --> 00:07:33,710 ¿En inglés? 135 00:07:33,710 --> 00:07:37,290 136 00:07:37,290 --> 00:07:38,700 Coloco el formato de registro. 137 00:07:38,700 --> 00:07:42,840 Le muestro al usuario register.HTML, uso 138 00:07:42,840 --> 00:07:44,550 la función render_template, que antes 139 00:07:44,550 --> 00:07:46,580 utilizamos para generar los archivos HTML. 140 00:07:46,580 --> 00:07:49,290 De lo contrario, si el usuario utilizó la publicación, es decir, 141 00:07:49,290 --> 00:07:53,490 al parecer hizo clic en un botón, y lo envió al mismo punto de 142 00:07:53,490 --> 00:07:55,380 término, solo vamos a distinguir el comportamiento. 143 00:07:55,380 --> 00:07:56,505 Si enviaron un formulario 144 00:07:56,505 --> 00:08:00,360 mediante una publicación, seguimos y ejecutamos estas cinco líneas de aquí. 145 00:08:00,360 --> 00:08:04,765 Y esta línea, la 18, si no se solicita, o si no se le solicita el name y el dorm, 146 00:08:04,765 --> 00:08:07,890 esa era una manera de indicar si el usuario olvidó darnos su dormitorio 147 00:08:07,890 --> 00:08:13,110 o su nombre y emite un mensaje de error como este failure.HTML. 148 00:08:13,110 --> 00:08:15,870 De lo contrario, si el usuario nos dio la información, 149 00:08:15,870 --> 00:08:20,580 podemos usar el método de ejecución de CS50 en la variable db que declaramos aquí 150 00:08:20,580 --> 00:08:24,150 podemos insertar en into registrants un name y un dorm, estos dos valores 151 00:08:24,150 --> 00:08:27,970 en específico y recordemos que esta sintaxis con dos puntos es nueva, 152 00:08:27,970 --> 00:08:30,330 en gran parte del mundo de SQLs es una convención 153 00:08:30,330 --> 00:08:32,309 que cuando queremos conectar los valores, en lugar de 154 00:08:32,309 --> 00:08:37,350 usar %s, como en nuestros días en C o de usar las llaves 155 00:08:37,350 --> 00:08:42,120 de nuestros días con Python y los stringf, en su lugar 156 00:08:42,120 --> 00:08:46,110 solo pasamos dos valores por medio de nombres como name y dorm. 157 00:08:46,110 --> 00:08:48,270 Luego, ¿qué pasa aquí, exactamente? 158 00:08:48,270 --> 00:08:51,540 Si entro en este sitio web y registro David 159 00:08:51,540 --> 00:08:55,440 de St. Matthews, hago clic en Register, porque la aplicación se 160 00:08:55,440 --> 00:08:58,020 ejecuta con Flask, me dice que estoy registrado. 161 00:08:58,020 --> 00:08:59,300 ¿Cómo puedo demostrarlo? 162 00:08:59,300 --> 00:09:01,650 Bueno, a continuación abriré otra terminal, 163 00:09:01,650 --> 00:09:06,810 entraré en el código fuente de hoy, froshims4 y si luego escribo ls, 164 00:09:06,810 --> 00:09:09,330 noten que esto es lo que conforma esta aplicación. 165 00:09:09,330 --> 00:09:13,560 Uno de estos archivos es froshims.db, si sigo y ejecuto esta herramienta de la 166 00:09:13,560 --> 00:09:16,501 línea de comando, sqlite3 en froshims4.db 167 00:09:16,501 --> 00:09:18,000 Obtuve una interfaz de línea de comando. 168 00:09:18,000 --> 00:09:20,875 Tal vez no estemos cómodos con este enfoque y eso está bien, 169 00:09:20,875 --> 00:09:24,870 pero nos permite hacer cosas muy simples como mostrarme mi esquema 170 00:09:24,870 --> 00:09:28,050 y desde esta interface textual puedo ver cuál es el formato 171 00:09:28,050 --> 00:09:31,080 de esa base de datos, solo tiene una tabla que se llama registrants 172 00:09:31,080 --> 00:09:33,090 y luego, si quisiera ver quién está registrado 173 00:09:33,090 --> 00:09:38,590 tal vez además de mí, ¿qué puedo escribir en esta interfaz de línea de comandos? 174 00:09:38,590 --> 00:09:41,710 ¿Qué puedo escribir aquí? 175 00:09:41,710 --> 00:09:42,310 ¿Sí? 176 00:09:42,310 --> 00:09:44,070 PÚBLICO: Select * from registrants. 177 00:09:44,070 --> 00:09:46,760 DAVID: Sí, select * from registrants 178 00:09:46,760 --> 00:09:49,574 punto y coma, y ​​veo una tabla que se basa mucho en el texto 179 00:09:49,574 --> 00:09:50,990 que me muestra quién está en la base de datos. 180 00:09:50,990 --> 00:09:52,430 Hasta ahora, solo soy yo. 181 00:09:52,430 --> 00:09:54,471 Podría jugar con esto en la línea de comandos, 182 00:09:54,471 --> 00:09:57,800 como actualizarlo, eliminarlo y demás, pero la clave de la última vez, 183 00:09:57,800 --> 00:10:00,980 fue que una vez que estemos más cómodos con el SQL, 184 00:10:00,980 --> 00:10:05,510 comenzaremos a usar declaraciones en SQL, las ponemos 185 00:10:05,510 --> 00:10:09,500 entre comillas dobles en Python y hacemos que Python ejecute estas consultas 186 00:10:09,500 --> 00:10:12,410 en SQL para nosotros, en nuestra base de datos. 187 00:10:12,410 --> 00:10:15,380 Mientras tanto, démosle un vistazo a otra función aquí. 188 00:10:15,380 --> 00:10:18,350 Antes de registrarme hace un momento, tenía este menú desplegable, 189 00:10:18,350 --> 00:10:22,410 podría haber codificado esto, lo cual sin duda estaría bien. 190 00:10:22,410 --> 00:10:26,360 Pero si quisiera eliminar un usuario y permítanme 191 00:10:26,360 --> 00:10:27,570 mostrarles esto aquí. 192 00:10:27,570 --> 00:10:33,140 Si entro, ¿qué archivos son esos? eso está en mi directorio de formatos. 193 00:10:33,140 --> 00:10:36,770 Si voy a register.HTML aquí, codifiqué 194 00:10:36,770 --> 00:10:40,070 todos esos dormitorios, disponibles para que los estudiantes de Harvard 195 00:10:40,070 --> 00:10:41,270 se registren en ellos. 196 00:10:41,270 --> 00:10:43,310 Pero ¿qué pasa con mi página para anular el registro? 197 00:10:43,310 --> 00:10:45,770 Déjenme regresar, hare clic en anular el registro 198 00:10:45,770 --> 00:10:48,950 y lo que veremos aquí, veo un menú más bonito 199 00:10:48,950 --> 00:10:52,040 que tiene el nombre de la persona, su dormitorio y si se registró. 200 00:10:52,040 --> 00:10:54,870 Pero quiero anular, de alguna manera, el registro del usuario 201 00:10:54,870 --> 00:10:58,670 Bueno, si continúo y envío este formato, ¿cuál valor podría 202 00:10:58,670 --> 00:11:03,200 querer el navegador para enviarlo desde el navegador al servidor? 203 00:11:03,200 --> 00:11:04,160 ¿David? 204 00:11:04,160 --> 00:11:04,970 ¿Matthews? 205 00:11:04,970 --> 00:11:06,230 ¿David from Matthews? 206 00:11:06,230 --> 00:11:07,800 ¿Algún otro? 207 00:11:07,800 --> 00:11:11,032 ¿Qué dice nuestro instinto cuando enviamos algo desde un formato 208 00:11:11,032 --> 00:11:12,990 a un servidor, cuando quiero hacer algo con esos datos, 209 00:11:12,990 --> 00:11:14,850 como en este caso, como anular el registro del usuario? 210 00:11:14,850 --> 00:11:17,490 211 00:11:17,490 --> 00:11:18,336 ¿Qué es lo que piensan? 212 00:11:18,336 --> 00:11:19,050 PÚBLICO: ¿El número ID? 213 00:11:19,050 --> 00:11:20,883 DAVID: Sí, tal vez su número ID. 214 00:11:20,883 --> 00:11:21,450 Pero, ¿por qué? 215 00:11:21,450 --> 00:11:23,922 Tengo esta cadena, David from Matthews, ¿por qué no 216 00:11:23,922 --> 00:11:26,880 envío la cadena, la busco en mi base de datos 217 00:11:26,880 --> 00:11:28,700 y luego elimino a David from Matthews? 218 00:11:28,700 --> 00:11:30,065 PÚBLICO: Podría haber otros David from Matthew. 219 00:11:30,065 --> 00:11:32,273 DAVID: Sí, potencialmente podría haber una equivocación. 220 00:11:32,273 --> 00:11:34,450 Si hay por alguna coincidencia hay un par o más de David from Matthew, 221 00:11:34,450 --> 00:11:37,199 podríamos anular el registro de todos ellos, 222 00:11:37,199 --> 00:11:38,990 de ambos, por muchos que tengamos. 223 00:11:38,990 --> 00:11:43,010 Entonces queremos algo prioritario para identificar a los usuarios. 224 00:11:43,010 --> 00:11:46,120 Y prioritario hace alusión a las claves primarias, que la última vez dijimos, 225 00:11:46,120 --> 00:11:50,080 por lo general, son un número, como el número uno que vimos hace un momento, 226 00:11:50,080 --> 00:11:54,350 cuando miré en el contenido de esta base de datos hace solo un momento, 227 00:11:54,350 --> 00:11:58,322 noten que David sí tenía, tiene un ID único, uno, o al menos 228 00:11:58,322 --> 00:12:00,280 veríamos que es único si añadimos 229 00:12:00,280 --> 00:12:01,990 cada vez más usuarios a la base de datos. 230 00:12:01,990 --> 00:12:04,210 ¿Y cómo le hice para generar esto? 231 00:12:04,210 --> 00:12:08,140 Bueno, si voy a unregister. HTML, observen que 232 00:12:08,140 --> 00:12:10,510 tengo que usar algo de otro lenguaje, 233 00:12:10,510 --> 00:12:12,940 no es particularmente un lenguaje elegante, pero se 234 00:12:12,940 --> 00:12:15,250 llama Jinja, el lenguaje de los formatos. 235 00:12:15,250 --> 00:12:16,550 Noten lo que hice aquí, 236 00:12:16,550 --> 00:12:19,480 Este es el formato, unregister.HTML, que el usuario ve 237 00:12:19,480 --> 00:12:21,280 cuando intento anular el registro de alguien. 238 00:12:21,280 --> 00:12:25,750 Tengo un formato cuya acción es unregister, el método aquí es publicarlo, 239 00:12:25,750 --> 00:12:27,410 y luego tengo el menú de selección 240 00:12:27,410 --> 00:12:29,565 00:31:46,040 el elegante texto gris, será:"Name", 662 00:31:46,040 --> 00:31:48,680 y que será: type="text"/> 663 00:31:48,680 --> 00:31:53,930 Y me daré a mí mismo el botón de enviar: 664 00:31:53,930 --> 00:31:57,860 Aquí tengo, una vez que guardé eso, una página web bastante simple que 665 00:31:57,860 --> 00:32:00,710 solo tiene una forma HTML muy simple. 666 00:32:00,710 --> 00:32:02,720 Para continuar, ejecutaré esto. 667 00:32:02,720 --> 00:32:08,270 Para continuar, haré esto simplemente al servir. 668 00:32:08,270 --> 00:32:11,420 Al hacer clic derecho o control en mi espacio de trabajo y en el servidor, 669 00:32:11,420 --> 00:32:14,840 se verá bastante simple y feo el servidor web, cuyo único propósito en la vida 670 00:32:14,840 --> 00:32:17,150 es servir los archivos HTML que escribí. 671 00:32:17,150 --> 00:32:19,430 A continuación, haré clic en dom0.html. 672 00:32:19,430 --> 00:32:22,280 Este es el archivo muy sencillo, que hice de improviso 673 00:32:22,280 --> 00:32:24,200 Si escribo algo, y presiono enviar, ¿qué 674 00:32:24,200 --> 00:32:27,570 pasará con la información? 675 00:32:27,570 --> 00:32:28,259 En realidad, nada. 676 00:32:28,259 --> 00:32:29,550 No lo conecté a nada. 677 00:32:29,550 --> 00:32:32,694 No tuve una acción, o un atributo de método en el formato. 678 00:32:32,694 --> 00:32:34,360 Todavía no termino de escribir este programa. 679 00:32:34,360 --> 00:32:37,440 ¿Qué quiero hacer para que esto suceda? 680 00:32:37,440 --> 00:32:39,680 Para continuar, haré esto. 681 00:32:39,680 --> 00:32:43,860 Primero, proseguiré al titular de mi página web 682 00:32:43,860 --> 00:32:47,795 y en lugar de, solo tener un título, introduciré una nueva etiqueta del script. 683 00:32:47,795 --> 00:32:49,670 como su nombre lo indica, aquí viene un script. 684 00:32:49,670 --> 00:32:53,160 Un script en general es sinónimo de un programa corto similar. 685 00:32:53,160 --> 00:32:56,310 En estos días, los programas en una página web se pueden escribir 686 00:32:56,310 --> 00:32:57,742 prácticamente solo en JavaScript. 687 00:32:57,742 --> 00:32:59,700 De vuelta en el día, nosotros podríamos usar otros lenguajes, 688 00:32:59,700 --> 00:33:01,074 en especial en los navegadores de Microsoft. 689 00:33:01,074 --> 00:33:04,860 Pero en su mayor parte, el mundo solo usa JavaScript en este contexto. 690 00:33:04,860 --> 00:33:08,040 Dentro del script, puedo comenzar a escribir el código. 691 00:33:08,040 --> 00:33:16,860 En particular, puedo hacer algo así: alert ("hello, world"); 692 00:33:16,860 --> 00:33:21,900 Alert es bastante patética, pero una utilidad de la función en JavaScript 693 00:33:21,900 --> 00:33:24,460 es que imprimirá una molesta ventana emergente. 694 00:33:24,460 --> 00:33:26,850 A continuación, guardaré la página, regresaré 695 00:33:26,850 --> 00:33:32,460 a mi navegador, lo volveré a cargar, y ahí vamos, mi primer página web 696 00:33:32,460 --> 00:33:33,660 de tipo interactiva. 697 00:33:33,660 --> 00:33:35,520 Hace esto, que en realidad es feo. 698 00:33:35,520 --> 00:33:36,660 Solo dice, hello, world. 699 00:33:36,660 --> 00:33:39,476 Y digo fea porque muestra mi nombre de dominio y mi puerto. 700 00:33:39,476 --> 00:33:41,100 Eso es un poco patético y desordenado. 701 00:33:41,100 --> 00:33:44,110 Al menos, transmito algo de información para el usuario. 702 00:33:44,110 --> 00:33:46,650 Parece que, lo que un navegador hace es, 703 00:33:46,650 --> 00:33:51,510 de hecho, que cuando recibe una solicitud HTTP se envía este archivo. 704 00:33:51,510 --> 00:33:54,880 Y cuando nuestro navegador recibe ese archivo, lo lee de arriba a abajo, 705 00:33:54,880 --> 00:33:58,457 de izquierda a derecha, y lo ejecuta o interpreta cada línea de código. 706 00:33:58,457 --> 00:34:01,290 No solo hace que nos enfrentemos a las cosas de manera audaz, centrada y demás. 707 00:34:01,290 --> 00:34:05,880 En realidad, ejecutará líneas de código dentro de las etiquetas del script. 708 00:34:05,880 --> 00:34:09,000 Ahora, hagamos esto, un poco más interactivo. 709 00:34:09,000 --> 00:34:13,139 En lugar de llamar alerta de esa manera, pongámosla en una función, 710 00:34:13,139 --> 00:34:14,880 Llamémosla: function greet( ). 711 00:34:14,880 --> 00:34:17,580 Aquí están de vuelta mis llaves, como en nuestros días de C. 712 00:34:17,580 --> 00:34:21,840 A continuación, ahora diré: alert ("hello, world"); 713 00:34:21,840 --> 00:34:26,076 Si vuelvo a cargar esta página, ¿veré o no la alerta? 714 00:34:26,076 --> 00:34:27,270 PÚBLICO: No la vemos. 715 00:34:27,270 --> 00:34:30,929 DAVID: Probablemente no la vemos, a menos que, por alguna razón, 716 00:34:30,929 --> 00:34:33,330 el navegador ejecute la función greet, de manera automática. 717 00:34:33,330 --> 00:34:34,180 Y no es así, 718 00:34:34,180 --> 00:34:34,679 no lo es. 719 00:34:34,679 --> 00:34:37,199 No hay equivalente de main en JavaScript. 720 00:34:37,199 --> 00:34:39,239 Y ciertamente no significa greet. 721 00:34:39,239 --> 00:34:40,270 No sucede nada, 722 00:34:40,270 --> 00:34:41,550 pero está ahí. 723 00:34:41,550 --> 00:34:44,850 Supongamos que ahora quiero conectar estas cosas de alguna manera. 724 00:34:44,850 --> 00:34:46,199 ¿Qué podríamos hacer? 725 00:34:46,199 --> 00:34:51,090 En mi formato, ¿saben qué?, en lugar de enviarlo a algún punto final, 726 00:34:51,090 --> 00:34:55,949 la acción debe ser: action="/register">, o algo parecido, 727 00:34:55,949 --> 00:34:57,510 para continuar, diré esto: 728 00:34:57,510 --> 00:35:05,192 onsubmit="greet( );"> 729 00:35:05,192 --> 00:35:06,150 Es un poco desordenado, 730 00:35:06,150 --> 00:35:07,525 y limpiaremos esto. 731 00:35:07,525 --> 00:35:10,650 Pero introduje un nuevo atributo de HTML que literalmente hace lo que dice. 732 00:35:10,650 --> 00:35:14,710 Al enviar este formato, llama a este código, ejecútalo. 733 00:35:14,710 --> 00:35:17,260 Y ese código, que definimos arriba, saludará al usuario. 734 00:35:17,260 --> 00:35:17,940 Veamos. 735 00:35:17,940 --> 00:35:19,380 Déjenme ir a esta página web, 736 00:35:19,380 --> 00:35:22,770 como siempre, volveré a cargar la página para la veamos actualizada. 737 00:35:22,770 --> 00:35:26,560 A continuación, escribiré mi nombre y lo enviaré. 738 00:35:26,560 --> 00:35:28,810 Ahí vamos, hello, world. 739 00:35:28,810 --> 00:35:30,850 Y de repente, la página se restablece. 740 00:35:30,850 --> 00:35:32,294 En realidad, se recargó a sí misma. 741 00:35:32,294 --> 00:35:34,210 Para continuar, limpiaré esto un poco. 742 00:35:34,210 --> 00:35:37,150 Después de llamar a greet, haré: return false; 743 00:35:37,150 --> 00:35:41,080 Porque no tengo ningún lugar al que el nombre de los usuarios pueda ir, 744 00:35:41,080 --> 00:35:42,190 no hay ningún servidor. 745 00:35:42,190 --> 00:35:46,540 Quiero asegurarme de que desactivé la funcionalidad incorporada 746 00:35:46,540 --> 00:35:47,620 a este navegador. 747 00:35:47,620 --> 00:35:50,380 Ahora, cuando escribo mi nombre y hago clic en enviar, 748 00:35:50,380 --> 00:35:52,220 todavía funciona como antes. 749 00:35:52,220 --> 00:35:54,200 Pero, noten que la página web es la misma, 750 00:35:54,200 --> 00:35:54,940 no se recargó, 751 00:35:54,940 --> 00:35:56,106 no me llevó a otro sitio, 752 00:35:56,106 --> 00:35:57,280 solo se quedó ahí. 753 00:35:57,280 --> 00:36:02,020 Ahora, uso el formato HTML como una aplicación local 754 00:36:02,020 --> 00:36:04,430 y no lo conecta con nada en el servidor. 755 00:36:04,430 --> 00:36:05,290 Pero esto es un poco molesto. 756 00:36:05,290 --> 00:36:07,390 Es posible que nos preguntemos, por qué esto hace esto. 757 00:36:07,390 --> 00:36:08,994 La mayoría de los navegadores lo hacen. 758 00:36:08,994 --> 00:36:10,660 Finalmente, esto se volverá un poco desordenado. 759 00:36:10,660 --> 00:36:14,080 Es algo un poco comprometedor con la privacidad de nuestros formatos. 760 00:36:14,080 --> 00:36:18,430 ¿Cómo puedo desactivar esta función para que no recuerden los nombres de los 761 00:36:18,430 --> 00:36:19,705 usuarios en los cuadros de texto? 762 00:36:19,705 --> 00:36:23,760 763 00:36:23,760 --> 00:36:29,700 Si nunca lo supieron, simplemente se hace autocompletar = "apagado". 764 00:36:29,700 --> 00:36:31,980 Ya pudieron ver esto en PSet 7, 765 00:36:31,980 --> 00:36:34,050 o en otro lugar en la web, así es como hacemos eso. 766 00:36:34,050 --> 00:36:36,990 Iré directo y volveré a cargar la página. 767 00:36:36,990 --> 00:36:40,620 Noten eso, ¿cómo puedo interactuar con este formato? 768 00:36:40,620 --> 00:36:43,010 Al visitar la página, no puedo escribir mi nombre de manera predeterminada. 769 00:36:43,010 --> 00:36:44,640 ¿Por qué? 770 00:36:44,640 --> 00:36:48,520 Eso probablemente no fue bueno para mi teclado. 771 00:36:48,520 --> 00:36:52,066 ¿Ustedes que harían, en este caso, para resolver este estúpido problema? 772 00:36:52,066 --> 00:36:54,060 Sí, como hacer clic aquí. 773 00:36:54,060 --> 00:36:56,870 Ahora, esto es un ejemplo, aunque sea pequeño, 774 00:36:56,870 --> 00:37:00,660 de la experiencia del usuario del bueno contra el malo o UX. 775 00:37:00,660 --> 00:37:03,060 Si el único propósito de nuestra página web es que el usuario 776 00:37:03,060 --> 00:37:07,060 escriba su nombre, entonces ¿por qué duplicamos el número de pasos 777 00:37:07,060 --> 00:37:10,890 para que el usuario haga clic primero aquí y después, 778 00:37:10,890 --> 00:37:12,420 el o ella, escriban su nombre? 779 00:37:12,420 --> 00:37:15,570 ¿Por qué no centrarse en el texto de manera automática? 780 00:37:15,570 --> 00:37:21,090 Es una operación en un navegador para enfocar un formato de campo. 781 00:37:21,090 --> 00:37:24,230 Entonces, de hecho, si regreso a mi código y agrego 782 00:37:24,230 --> 00:37:27,600 autofocus y solo como un atributo. 783 00:37:27,600 --> 00:37:31,480 No necesita estrictamente un valor entre comillas o con un signo igual. 784 00:37:31,480 --> 00:37:35,550 Ahora, si recargo la página con Comand+r o Ctrl+r, noten que ahora, 785 00:37:35,550 --> 00:37:36,780 el cursor está parpadeando. 786 00:37:36,780 --> 00:37:39,420 El cuadro de texto es azul en Mac OS, 787 00:37:39,420 --> 00:37:41,869 y está listo para tomar mi nombre de inmediato. 788 00:37:41,869 --> 00:37:44,160 Así que, empiecen a pensar en dos de estas pequeñas sutilezas, 789 00:37:44,160 --> 00:37:46,230 no solo técnicamente cómo trabajan, o cómo hacerlos, 790 00:37:46,230 --> 00:37:47,550 también por qué haríamos esto. 791 00:37:47,550 --> 00:37:50,842 Como mi discurso del otro día sobre por qué un sitio web no puede aceptar 792 00:37:50,842 --> 00:37:52,300 números de teléfono en diferentes formatos. 793 00:37:52,300 --> 00:37:56,370 Estas son las pequeñas cosas que comienzan para distinguir buen código de un mal código. 794 00:37:56,370 --> 00:37:58,030 El enfoque también tiene otro detalle. 795 00:37:58,030 --> 00:38:00,900 Si presiono tab, es muy común, especialmente en Mac OS, 796 00:38:00,900 --> 00:38:03,570 es muy obvio, donde las cosas comienzan a destacarse en azul. 797 00:38:03,570 --> 00:38:06,060 Podemos presionar tab alrededor de la interfaz del usuario 798 00:38:06,060 --> 00:38:07,930 que es importante, en especial, para la accesibilidad. 799 00:38:07,930 --> 00:38:10,320 Si alguien usa un lector de pantalla porque el usuario no puede 800 00:38:10,320 --> 00:38:12,810 ver las palabras en la pantalla, y mucho menos la interfaz, 801 00:38:12,810 --> 00:38:16,590 usando tab y un lector de pantalla puede que le digan lo que está en la pantalla. 802 00:38:16,590 --> 00:38:18,840 A ese resaltado, se le denomina foco, 803 00:38:18,840 --> 00:38:21,450 tiene un verdadero valor funcional, tal que 804 00:38:21,450 --> 00:38:26,250 conoce exactamente lo que sucederá si comienza a interactuar con el sitio web. 805 00:38:26,250 --> 00:38:27,570 ¿Se hará clic en el botón? 806 00:38:27,570 --> 00:38:28,830 ¿El texto terminará en la caja? 807 00:38:28,830 --> 00:38:30,330 Depende de lo que tenga enfoque. 808 00:38:30,330 --> 00:38:34,740 Solo una cosa tendría enfoque a la vez, por esos cuadros azules. 809 00:38:34,740 --> 00:38:39,870 De acuerdo, con lo que se dijo, esto no es tan elegante en este momento. 810 00:38:39,870 --> 00:38:42,150 No soy del tipo que practique lo que pregoné 811 00:38:42,150 --> 00:38:45,784 por tanto tiempo sobre combinar un lenguaje dentro de otro. 812 00:38:45,784 --> 00:38:47,700 Empezamos a bajar este camino hace algún tiempo. 813 00:38:47,700 --> 00:38:50,700 Empecé a poner CSS en mis atributos de estilo. 814 00:38:50,700 --> 00:38:51,940 Y luego lo puse aquí. 815 00:38:51,940 --> 00:38:54,970 Finalmente, lo saqué de ahí y lo puse en un archivo separado. 816 00:38:54,970 --> 00:38:57,870 Así que aquí también, estaremos en esa misma trayectoria. 817 00:38:57,870 --> 00:39:02,910 Haré las cosas un poco diferentes, como se indica a continuación. 818 00:39:02,910 --> 00:39:07,740 Al poner el código dentro de las etiquetas de un script como este, 819 00:39:07,740 --> 00:39:10,350 no es necesaria la mejor práctica. 820 00:39:10,350 --> 00:39:15,090 Podemos, porque se requiere hacer esto. 821 00:39:15,090 --> 00:39:16,997 Esta es la parte más fea del código. 822 00:39:16,997 --> 00:39:18,330 Puede ser que ahora no sea obvio, 823 00:39:18,330 --> 00:39:22,800 pero no se recomienda, poner comillas dentro del código en HTML. 824 00:39:22,800 --> 00:39:25,144 Porque una vez más, tenemos un lenguaje dentro de otro, 825 00:39:25,144 --> 00:39:27,060 y no es obvio lo que esta página hará 826 00:39:27,060 --> 00:39:28,830 cuando se mire a primera vista. 827 00:39:28,830 --> 00:39:30,420 Si estamos colaborando con alguien, tal vez estamos 828 00:39:30,420 --> 00:39:32,160 de frente al diseñador de la interfaz del usuario. 829 00:39:32,160 --> 00:39:33,840 Y somos muy buenos con el diseño y el arte, 830 00:39:33,840 --> 00:39:35,256 entonces haremos la interfaz. 831 00:39:35,256 --> 00:39:37,789 Y alguien más escribe el código y la lógica, 832 00:39:37,789 --> 00:39:40,080 porque les gusta más hacer las funciones auxiliares. 833 00:39:40,080 --> 00:39:43,380 No es posible que nos ocupemos en ambos eficazmente, si todo nuestro trabajo 834 00:39:43,380 --> 00:39:44,790 se mezcla en el mismo archivo. 835 00:39:44,790 --> 00:39:47,290 Lo que queremos es sacar esto de ahí. 836 00:39:47,290 --> 00:39:49,230 Entonces, ¿cómo damos un paso hacia eso? 837 00:39:49,230 --> 00:39:52,510 Para continuar, crearé un archivo nuevo 838 00:39:52,510 --> 00:39:54,450 al que llamaré dom1.html. 839 00:39:54,450 --> 00:39:56,207 Iniciaré en el mismo lugar, 840 00:39:56,207 --> 00:39:57,790 pero continuaré al hacer esto. 841 00:39:57,790 --> 00:40:01,530 Me desharé de este controlador de eventos, 842 00:40:01,530 --> 00:40:04,230 y dejaré de usar ese atributo por completo. 843 00:40:04,230 --> 00:40:06,550 También, proseguiré al hacer esto. 844 00:40:06,550 --> 00:40:08,370 Me desharé de mi código de saludo. 845 00:40:08,370 --> 00:40:11,010 Continuaré y me desharé de esta etiqueta del script. 846 00:40:11,010 --> 00:40:13,010 Por ahora, temporalmente, 847 00:40:13,010 --> 00:40:16,870 pondré el script en la parte inferior de la página por razones que pronto veremos. 848 00:40:16,870 --> 00:40:22,060 En la parte inferior de la página, podría hacer: alert ("hello, world"); 849 00:40:22,060 --> 00:40:24,780 Desde luego, recrea el mismo problema que antes. 850 00:40:24,780 --> 00:40:27,090 No quiero que ocurra siempre. 851 00:40:27,090 --> 00:40:30,070 Quiero que suceda solo cuando se envía el formato. 852 00:40:30,070 --> 00:40:35,400 ¿Cómo haría eso si trato de evitar este desorden, esta mezcla 853 00:40:35,400 --> 00:40:37,470 de código y HTML? 854 00:40:37,470 --> 00:40:40,140 Bien, hay una manera de decirle al navegador 855 00:40:40,140 --> 00:40:42,660 haz algo cuando algo suceda. 856 00:40:42,660 --> 00:40:45,540 En específico, puedo hacer esto: document. 857 00:40:45,540 --> 00:40:48,810 Y el documento será una variable global especial que 858 00:40:48,810 --> 00:40:51,630 se refiere a mi página web, el documento que escribo actualmente. 859 00:40:51,630 --> 00:40:56,550 document.getElementById (), que es una función larga cuyo nombre 860 00:40:56,550 --> 00:40:58,020 existe en JavaScript. 861 00:40:58,020 --> 00:41:01,830 Noten que las letras E, B e I están en mayúscula, 862 00:41:01,830 --> 00:41:02,786 pero la g inicial es minúscula. 863 00:41:02,786 --> 00:41:03,660 Esto es convencional. 864 00:41:03,660 --> 00:41:06,030 En muchos lenguajes, no utilizamos mayúsculas 865 00:41:06,030 --> 00:41:08,130 en la primera letra de nuestra función, pero 866 00:41:08,130 --> 00:41:10,642 después de cada palabra pondremos una mayúscula. 867 00:41:10,642 --> 00:41:13,350 Es algo llamado letra de camello, que es como subir y bajar 868 00:41:13,350 --> 00:41:13,800 subir y bajar. 869 00:41:13,800 --> 00:41:16,140 Porque, es un poco más legible que todas las letras sean minúsculas 870 00:41:16,140 --> 00:41:17,670 y ciertas letras sean mayúsculas. 871 00:41:17,670 --> 00:41:19,860 ¿Qué ID quiero obtener? 872 00:41:19,860 --> 00:41:21,901 A continuación, obtendré la ID: demo. 873 00:41:21,901 --> 00:41:23,650 Veremos qué eso significa, en un momento. 874 00:41:23,650 --> 00:41:26,900 Registraré un gestor de eventos de la siguiente manera. 875 00:41:26,900 --> 00:41:30,190 Terminaremos esta idea en un momento. 876 00:41:30,190 --> 00:41:33,160 ¿De dónde proviene demo? 877 00:41:33,160 --> 00:41:35,000 ¿Dónde vimos eso antes? 878 00:41:35,000 --> 00:41:36,450 Sí, en algunas líneas antes. 879 00:41:36,450 --> 00:41:40,707 Acabo de dar mi manera arbitraria, pero muy particular, de la ID de demo. 880 00:41:40,707 --> 00:41:42,040 La pude llamar de cualquier manera. 881 00:41:42,040 --> 00:41:44,100 También, pude hacer esto de diferentes maneras. 882 00:41:44,100 --> 00:41:45,720 Pero esto es muy explícito. 883 00:41:45,720 --> 00:41:48,030 Inclusive, si nunca hemos visto JavaScript antes, 884 00:41:48,030 --> 00:41:52,110 podemos comenzar a inferir que esto dice: hey documento, hey página web, 885 00:41:52,110 --> 00:41:55,440 dame el elemento ById("demo"). 886 00:41:55,440 --> 00:41:57,450 De una manera u otra, esta es una función que 887 00:41:57,450 --> 00:42:02,040 tomará de la memoria del navegador el cuadrado o el rectángulo 888 00:42:02,040 --> 00:42:03,060 que dibujé antes. 889 00:42:03,060 --> 00:42:06,540 La razón por la que DOM o el objeto modelo del documento es interesante, 890 00:42:06,540 --> 00:42:10,800 es que teóricamente con: document.getElementById, 891 00:42:10,800 --> 00:42:14,760 tenemos la capacidad de tomar uno de estos nodos en el árbol 892 00:42:14,760 --> 00:42:18,662 o una de estas estructuras de datos en la memoria y hacer algo con eso. 893 00:42:18,662 --> 00:42:19,870 Ahora, ¿qué haremos? 894 00:42:19,870 --> 00:42:21,540 Estamos a punto de ver. 895 00:42:21,540 --> 00:42:24,750 Cuando tengo acceso a este formato, 896 00:42:24,750 --> 00:42:28,800 sucede que los formatos, para el manual para HTML, por así decirlo, 897 00:42:28,800 --> 00:42:31,410 tienen diferentes gestores de eventos en el envío, 898 00:42:31,410 --> 00:42:34,587 tal vez hacer clic, mover el mouse, arrastrar el mouse, 899 00:42:34,587 --> 00:42:35,670 depende del elemento. 900 00:42:35,670 --> 00:42:38,340 Pero los formatos pueden, desde luego, enviarse. 901 00:42:38,340 --> 00:42:44,670 Así que, al decir: .onsubmit, es el equivalente de decir: call this 902 00:42:44,670 --> 00:42:45,540 function. 903 00:42:45,540 --> 00:42:47,430 Esto es un pseudocódigo, 904 00:42:47,430 --> 00:42:49,080 necesito darle una función. 905 00:42:49,080 --> 00:42:51,460 Puedo hacer esto en un par de formas, 906 00:42:51,460 --> 00:42:52,980 puedo hacerlo así. 907 00:42:52,980 --> 00:43:00,150 Así que, function greet es una función que solo dice, hello, world. 908 00:43:00,150 --> 00:43:04,320 En este punto de la historia, definí una función aquí 909 00:43:04,320 --> 00:43:05,790 y le di un nombre. 910 00:43:05,790 --> 00:43:10,890 Aquí dice: en envío del formato demo, llame a esta función. 911 00:43:10,890 --> 00:43:12,240 Pero, notemos la diferencia, 912 00:43:12,240 --> 00:43:13,890 es sutil. 913 00:43:13,890 --> 00:43:16,410 No hice esto, que es lo normal. 914 00:43:16,410 --> 00:43:18,810 En cambio, hice esto. 915 00:43:18,810 --> 00:43:22,350 Por qué, aunque sutil, ¿es probable que sea importante 916 00:43:22,350 --> 00:43:25,950 que omitamos el paréntesis? 917 00:43:25,950 --> 00:43:29,032 ¿Qué es lo que piensan sobre esto? 918 00:43:29,032 --> 00:43:31,530 PÚBLICO: Porque no acepta cualquier argumento. 919 00:43:31,530 --> 00:43:33,530 DAVID: No acepta cualquier argumento. 920 00:43:33,530 --> 00:43:36,480 Eso es cierto, pero no es la razón para hacer esto. 921 00:43:36,480 --> 00:43:37,360 Buena idea, sin embargo. 922 00:43:37,360 --> 00:43:37,860 Sí. 923 00:43:37,860 --> 00:43:40,057 PÚBLICO: Tal vez nadie puede cambiarlo. 924 00:43:40,057 --> 00:43:42,390 DAVID: Nadie puede cambiarlo. No, también ahí. 925 00:43:42,390 --> 00:43:46,200 Creo que cualquiera que tenga acceso al archivo sin duda puede cambiar mi código. 926 00:43:46,200 --> 00:43:49,195 No es eso. 927 00:43:49,195 --> 00:43:52,302 PÚBLICO: ¿Por qué tratas de enviarlo a la salida? 928 00:43:52,302 --> 00:43:53,260 DAVID: Muy cerca. 929 00:43:53,260 --> 00:43:54,560 Trato de enviarlo a la salida. 930 00:43:54,560 --> 00:43:56,170 No del todo, pero creo estamos en el camino correcto. 931 00:43:56,170 --> 00:43:57,630 PÚBLICO: Entonces, no lo quieres llamar de inmediato. 932 00:43:57,630 --> 00:43:58,463 DAVID: Sí. 933 00:43:58,463 --> 00:44:00,360 Para que no lo llame de inmediato. 934 00:44:00,360 --> 00:44:03,990 Desde la semana uno de CS50, cada vez que vimos el nombre de una función, 935 00:44:03,990 --> 00:44:08,730 seguido de abrir y cerrar paréntesis, tal vez con algunos argumentos dentro, 936 00:44:08,730 --> 00:44:12,510 significó llamar a esta función y tal vez pasar en estos inputs. 937 00:44:12,510 --> 00:44:15,980 Eso no es lo que quiero en esta línea de código. 938 00:44:15,980 --> 00:44:21,090 En esta línea de código, queremos que el navegador sepa qué función llamar, 939 00:44:21,090 --> 00:44:23,679 no llamarla en ese mismo momento. 940 00:44:23,679 --> 00:44:25,470 No queremos que esa función sea llamada 941 00:44:25,470 --> 00:44:27,090 tan pronto como tomemos esta línea de código. 942 00:44:27,090 --> 00:44:29,756 Porque de lo contrario, veremos la alerta, no importa qué, 943 00:44:29,756 --> 00:44:32,400 en el momento en que el navegador lea esa línea de código en la pantalla. 944 00:44:32,400 --> 00:44:34,720 En cambio, solo queremos decirle al navegador, hey, 945 00:44:34,720 --> 00:44:37,620 para que lo sepas en el futuro, cuando se envíe el formato, 946 00:44:37,620 --> 00:44:40,770 aquí está solo el nombre de la funcionar que llamarás. 947 00:44:40,770 --> 00:44:41,790 Pero no la llames ahora. 948 00:44:41,790 --> 00:44:46,740 Entonces, esa estúpida y simple diferencia, hace toda la diferencia 949 00:44:46,740 --> 00:44:48,280 funcionalmente, en este caso. 950 00:44:48,280 --> 00:44:50,290 Proseguiré a deshacerme de esto, 951 00:44:50,290 --> 00:44:51,900 y abandonar el programa de la siguiente manera. 952 00:44:51,900 --> 00:44:57,009 Regresaré a la página web, volveré a cargarla y haré clic en enviar. 953 00:44:57,009 --> 00:44:58,050 Y vemos, hello, world. 954 00:44:58,050 --> 00:45:00,340 La funcionalidad realmente no cambió. 955 00:45:00,340 --> 00:45:01,950 Pero al menos, progresamos un poco. 956 00:45:01,950 --> 00:45:04,980 No hice tanto como sería lo ideal. 957 00:45:04,980 --> 00:45:07,930 Creo que sería mucho mejor hacer dos cosas. 958 00:45:07,930 --> 00:45:10,290 Una, esto es un poco patética. 959 00:45:10,290 --> 00:45:12,640 Definí una función llamada saludar (greet). 960 00:45:12,640 --> 00:45:16,560 Después, usé el nombre de la función en un solo lugar. 961 00:45:16,560 --> 00:45:20,107 Lo que sugiere que nunca necesité esta palabra greet en el primer lugar. 962 00:45:20,107 --> 00:45:20,940 Lo sabemos, está bien, 963 00:45:20,940 --> 00:45:21,439 está claro, 964 00:45:21,439 --> 00:45:22,041 es correcto. 965 00:45:22,041 --> 00:45:23,790 Sabemos que yo recuerdo de antes 966 00:45:23,790 --> 00:45:27,420 que JavaScript admite funciones anónimas, que no tienen nombres. 967 00:45:27,420 --> 00:45:28,870 ¿Cómo podría hacer esto? 968 00:45:28,870 --> 00:45:34,740 Bueno, podemos hacerlo de una sola vez. 969 00:45:34,740 --> 00:45:38,460 Para continuar, cortaré, pegaré y me desharé del exceso de espacio en blanco, 970 00:45:38,460 --> 00:45:43,650 ahora, me desharé de la función greet, y solo haré esto. 971 00:45:43,650 --> 00:45:46,650 Solo por claridad, pondré la llave en la misma línea, 972 00:45:46,650 --> 00:45:48,420 a pesar de que estrictamente no importa. 973 00:45:48,420 --> 00:45:50,880 Esto sería estilísticamente más común. 974 00:45:50,880 --> 00:45:52,020 ¿Que estoy haciendo? 975 00:45:52,020 --> 00:45:54,870 Ahora esto dice, hey JavaScript, obtén el elemento 976 00:45:54,870 --> 00:45:58,710 llamado demo o con una ID de demo y cuando se envíe, 977 00:45:58,710 --> 00:46:00,840 llama a esta función. 978 00:46:00,840 --> 00:46:02,790 Aquí hay una diferencia sutil, de nuevo. 979 00:46:02,790 --> 00:46:05,670 Abre y cierra paréntesis, lo que no significa llamar a la función. 980 00:46:05,670 --> 00:46:08,670 Inmediatamente le siguen las llaves, lo que significa que 981 00:46:08,670 --> 00:46:13,480 viene el código que se debe ejecutar cuando se llama a esta función. 982 00:46:13,480 --> 00:46:16,500 Termina con un punto y coma, no porque las funciones, por sí mismas 983 00:46:16,500 --> 00:46:20,250 necesiten terminar con punto y coma, todo esto es una larga línea de código 984 00:46:20,250 --> 00:46:21,862 a la que le puse sangría. 985 00:46:21,862 --> 00:46:24,570 Porque estamos declarando una función y asignándolo de derecha a 986 00:46:24,570 --> 00:46:26,370 a la izquierda a la vez. 987 00:46:26,370 --> 00:46:27,870 Aquí hay un enorme trabalenguas. 988 00:46:27,870 --> 00:46:30,540 De nuevo, ninguna de las ideas son nuevas, excepto por el hecho 989 00:46:30,540 --> 00:46:34,890 de que funciones pueden ser anónimas, sin nombre. 990 00:46:34,890 --> 00:46:42,750 Podemos pasar funciones alrededor, y llamarlas más tarde. 991 00:46:42,750 --> 00:46:43,820 ¿Alguna pregunta sobre esto? 992 00:46:43,820 --> 00:46:44,889 Sí. 993 00:46:44,889 --> 00:46:46,930 PÚBLICO: Entonces, ¿puedes eliminar funciones, y en su lugar 994 00:46:46,930 --> 00:46:49,720 solo poner: = alert ("hello, world")? 995 00:46:49,720 --> 00:46:50,970 DAVID: Buena pregunta. 996 00:46:50,970 --> 00:46:53,390 ¿Puedo deshacerme de la función y simplemente hacer esto? 997 00:46:53,390 --> 00:46:54,920 Respuesta corta, no. 998 00:46:54,920 --> 00:47:00,140 Porque, si hago esto, esto será igual que en C, 999 00:47:00,140 --> 00:47:04,180 llamará a esta función, que visualizará esa alert. 1000 00:47:04,180 --> 00:47:07,430 Después, asignará el valor de retorno de esa función, que yo no 1001 00:47:07,430 --> 00:47:10,340 creo que tenga en absoluto, para enviar. 1002 00:47:10,340 --> 00:47:12,844 Esto llama a la función, asigna su valor de retorno, 1003 00:47:12,844 --> 00:47:14,510 que técnicamente no está definida, a esto. 1004 00:47:14,510 --> 00:47:17,299 Entonces, nada sucederá si posteriormente se hace clic en enviar. 1005 00:47:17,299 --> 00:47:18,840 Será llamado prematuramente. 1006 00:47:18,840 --> 00:47:21,360 La manera de evitar esto es, de nuevo, definir una función, 1007 00:47:21,360 --> 00:47:23,540 y luego solo pasar por su nombre. 1008 00:47:23,540 --> 00:47:26,814 O declararla de manera anónima, por así decirlo, como esta. 1009 00:47:26,814 --> 00:47:29,230 Para que solo se le diga al navegador, en enviar, 1010 00:47:29,230 --> 00:47:32,240 llama a este fragmento de código en entre llaves. 1011 00:47:32,240 --> 00:47:34,200 Eso es todo. 1012 00:47:34,200 --> 00:47:34,700 OK. 1013 00:47:34,700 --> 00:47:36,207 Este todavía es el tonto demo, 1014 00:47:36,207 --> 00:47:37,790 porque continua diciendo: hello, world. 1015 00:47:37,790 --> 00:47:41,190 Sin embargo, tengo un formato con el cual el usuario puede escribir su nombre. 1016 00:47:41,190 --> 00:47:42,690 Entonces, ¿cómo consigo ese valor? 1017 00:47:42,690 --> 00:47:46,340 Bueno, en realidad, aquí es bastante sencillo, potencialmente. 1018 00:47:46,340 --> 00:47:47,570 A continuación, haré esto. 1019 00:47:47,570 --> 00:47:51,560 Hello, quiero que diga David, si soy yo el que escribe mi nombre. 1020 00:47:51,560 --> 00:47:53,540 Desde luego, yo no quiero codificar eso. 1021 00:47:53,540 --> 00:47:57,050 Quiero, de alguna manera, obtener el nombre del usuario e introducirlo aquí. 1022 00:47:57,050 --> 00:47:58,130 ¿Cómo puedo hacer eso? 1023 00:47:58,130 --> 00:48:01,568 Puedo decir: let name = document. 1024 00:48:01,568 --> 00:48:08,140 Solo para que veamos a dónde irá esto: getElementById, tal vez el name. 1025 00:48:08,140 --> 00:48:09,670 Porque, tengo otra ID. 1026 00:48:09,670 --> 00:48:13,750 Recuerden, tenía la expectativa de escribir antes esa línea de código. 1027 00:48:13,750 --> 00:48:14,830 Obtenga el nombre del usuario. 1028 00:48:14,830 --> 00:48:18,100 Nosotros solo sabemos esto porque lo vimos antes, en línea, 1029 00:48:18,100 --> 00:48:22,600 o en el curso, .value me dará el texto que el usuario tecleó, y después 1030 00:48:22,600 --> 00:48:23,950 punto y coma. 1031 00:48:23,950 --> 00:48:27,226 Ahora, al igual que en C y en Python, 1032 00:48:27,226 --> 00:48:28,600 No quiero hacer esto. 1033 00:48:28,600 --> 00:48:30,820 Porque eso dirá, hello, name. 1034 00:48:30,820 --> 00:48:31,990 Quiero introducirlo. 1035 00:48:31,990 --> 00:48:34,270 Puedo hacer esto de varias maneras. 1036 00:48:34,270 --> 00:48:38,410 Quizás la más evidente es esta. 1037 00:48:38,410 --> 00:48:40,720 Aquellos de ustedes que tomaron APCS o similares 1038 00:48:40,720 --> 00:48:42,760 podrían saber qué más significa en Java. 1039 00:48:42,760 --> 00:48:45,940 Esto es solo una coincidencia, que también funciona aquí. 1040 00:48:45,940 --> 00:48:48,520 ¿Qué es lo que significa el signo de más, en sistemas, además de sumar? 1041 00:48:48,520 --> 00:48:49,420 PÚBLICO: Concatenación. 1042 00:48:49,420 --> 00:48:50,670 DAVID: Concatenación. 1043 00:48:50,670 --> 00:48:53,516 En C, esto pudo ser un dolor en el cuello. 1044 00:48:53,516 --> 00:48:55,390 En C, esto es donde tenemos que sacar de repente 1045 00:48:55,390 --> 00:48:58,330 como malloc, o algunos grandes arreglos en los estantes 1046 00:48:58,330 --> 00:49:01,000 y como introducen un nombre dentro de otro. 1047 00:49:01,000 --> 00:49:04,540 En Python, también podemos concatenar cosas usando el signo de más. 1048 00:49:04,540 --> 00:49:06,760 O podemos usar f-strings o cadenas de formato. 1049 00:49:06,760 --> 00:49:09,010 En JavaScript, podemos hacer signos de más como este. 1050 00:49:09,010 --> 00:49:13,190 Esto concatenará "hello" con la palabra name y lo imprimirá. 1051 00:49:13,190 --> 00:49:14,680 Veamos lo qué sucede. 1052 00:49:14,680 --> 00:49:18,910 Si no cometí algún error, cuando recargue esta página, escriba mi nombre 1053 00:49:18,910 --> 00:49:24,230 y haga clic en enviar, hmm, ¿qué hice mal? 1054 00:49:24,230 --> 00:49:24,942 ¿Qué es eso? 1055 00:49:24,942 --> 00:49:25,900 Olvidé refrescarlo. 1056 00:49:25,900 --> 00:49:28,420 Me acabo de dar cuenta de que también olvidé cambiar la URL. 1057 00:49:28,420 --> 00:49:31,270 Ahora estamos en demo1.html. 1058 00:49:31,270 --> 00:49:33,781 Recargaremos, David, enviar. 1059 00:49:33,781 --> 00:49:34,780 Y ahí tenemos a David. 1060 00:49:34,780 --> 00:49:37,810 Y solo por si acaso, escribiré María, enviar. 1061 00:49:37,810 --> 00:49:41,020 Parece ser que cambió dinámicamente. 1062 00:49:41,020 --> 00:49:44,800 Esa es una buena mejora, ahora que hicimos eso. 1063 00:49:44,800 --> 00:49:46,480 ¿Estrictamente necesitamos esta variable? 1064 00:49:46,480 --> 00:49:49,150 No, pero si tenemos esta variable, notemos que también podemos hacer esto. 1065 00:49:49,150 --> 00:49:53,200 Solo vimos esto, en JavaScript, para bien o para mal, 1066 00:49:53,200 --> 00:49:56,470 tenemos esto llamado comillas invertidas, que son la clave en un teclado de EE. UU 1067 00:49:56,470 --> 00:49:59,150 en general está en la parte superior izquierda, debajo de la tecla Esc. 1068 00:49:59,150 --> 00:50:01,750 Si tengo acentos graves, ¿adivinen qué? 1069 00:50:01,750 --> 00:50:07,090 Podemos hacer esto, que es más feo que las f-strings de Python, 1070 00:50:07,090 --> 00:50:08,340 pero hace exactamente lo mismo. 1071 00:50:08,340 --> 00:50:10,090 De nuevo, este es el tipo de cosas donde 1072 00:50:10,090 --> 00:50:12,460 comenzaremos a entornar los ojos como aspirantes a programadores. 1073 00:50:12,460 --> 00:50:15,293 Donde, si un lenguaje hace algo un poco diferente, solo 1074 00:50:15,293 --> 00:50:17,679 tenemos que recordar constantemente, es la misma idea, 1075 00:50:17,679 --> 00:50:18,720 es exactamente la misma idea, 1076 00:50:18,720 --> 00:50:19,970 solo es una sintaxis diferente. 1077 00:50:19,970 --> 00:50:22,390 Esto introduciría el nombre en esos acentos graves. 1078 00:50:22,390 --> 00:50:24,971 Esto es llamado formato en JavaScript. 1079 00:50:24,971 --> 00:50:25,470 Muy bien. 1080 00:50:25,470 --> 00:50:29,320 ¿Alguna pregunta sobre eso hasta ahora? 1081 00:50:29,320 --> 00:50:34,340 Está bien, presentaré un último adelanto, como el siguiente. 1082 00:50:34,340 --> 00:50:39,370 Para continuar hoy, entraré en nuestro código de distribución 1083 00:50:39,370 --> 00:50:46,150 y abriré, digamos, en source 11, este directorio de aquí. 1084 00:50:46,150 --> 00:50:48,280 En un momento, veremos todos los archivos de aquí 1085 00:50:48,280 --> 00:50:50,570 y mostraré un par de ejemplos. 1086 00:50:50,570 --> 00:50:54,340 Uno es muy común, desde luego, para tener formatos basados ​​en la web 1087 00:50:54,340 --> 00:50:56,320 donde el usuario puede o no puede darnos, 1088 00:50:56,320 --> 00:50:58,090 lo que queremos que escriba. 1089 00:50:58,090 --> 00:51:00,130 Es bueno validar su entrada, 1090 00:51:00,130 --> 00:51:01,707 como lo hicimos en el servidor. 1091 00:51:01,707 --> 00:51:03,790 Si validamos la entrada del usuario y nos aseguramos de 1092 00:51:03,790 --> 00:51:06,998 que nos dieron un correo electrónico y dos contraseñas iguales 1093 00:51:06,998 --> 00:51:10,486 y verificó nuestros términos y condiciones de casilla de verificación y demás, 1094 00:51:10,486 --> 00:51:11,860 podemos hacer todo eso en Python. 1095 00:51:11,860 --> 00:51:16,520 Vimos cómo hacer eso en application.pi. 1096 00:51:16,520 --> 00:51:19,060 Es una mejor experiencia de usuario, UX, si 1097 00:51:19,060 --> 00:51:21,860 el usuario más inmediato da comentarios, tal vez comentarios más bonitos, 1098 00:51:21,860 --> 00:51:24,040 usa algunos colores y los destaca en la pantalla 1099 00:51:24,040 --> 00:51:26,110 llama nuestra atención a lo que está mal. 1100 00:51:26,110 --> 00:51:29,050 Con JavaScript, nosotros tenemos esa capacidad. 1101 00:51:29,050 --> 00:51:34,760 Además, en JavaScript, tenemos el capacidad para hacer algo como esto. 1102 00:51:34,760 --> 00:51:38,470 Si ejecuto el servidor web en el código de distribución de hoy 1103 00:51:38,470 --> 00:51:41,320 y abro esta URL, veré una lista de nuevo. 1104 00:51:41,320 --> 00:51:46,084 Proseguiré, subiré a donde dice ajax1.html. 1105 00:51:46,084 --> 00:51:48,250 Aquí tengo un formato web muy simple, no es diferente 1106 00:51:48,250 --> 00:51:50,350 en espíritu a lo que tenemos en finanzas de CS50. 1107 00:51:50,350 --> 00:51:53,230 Pero, si quiero ver cuál es la cotización de las acciones de Netflix, 1108 00:51:53,230 --> 00:51:58,960 Puedo escribir, después oprimo get quote, y lo obtengo solo para el cliente. 1109 00:51:58,960 --> 00:52:00,820 No lo necesito enviar a otra ruta. 1110 00:52:00,820 --> 00:52:03,940 No necesito usar Python, que parece interpretar un formato. 1111 00:52:03,940 --> 00:52:07,060 Puedo interactuar directamente con el formato y hacer esto. 1112 00:52:07,060 --> 00:52:11,800 Por último, solo un adelanto, podemos hacer algo como esto por lo cual, 1113 00:52:11,800 --> 00:52:12,790 si en realidad, 1114 00:52:12,790 --> 00:52:15,970 diablos, si en realidad configuramos las cosas correctamente, 1115 00:52:15,970 --> 00:52:19,300 nosotros mismos podemos conseguir un mapa completo usando JavaScript. 1116 00:52:19,300 --> 00:52:21,850 Al final, podamos usar JavaScript y comencemos 1117 00:52:21,850 --> 00:52:24,400 a hacer aplicaciones interactivas como esta, 1118 00:52:24,400 --> 00:52:27,724 que usen la API de Google Maps para que el usuario haga clic y arrastre 1119 00:52:27,724 --> 00:52:29,140 e interactúe con ella. 1120 00:52:29,140 --> 00:52:32,440 Al hacer clic en, por decir algo, Stanford, California, 1121 00:52:32,440 --> 00:52:36,462 y ver lo que pasa en las noticias en Stanford, California ahora mismo, 1122 00:52:36,462 --> 00:52:39,670 al escribir el código que se ejecuta en el navegador, que habla con otro servidor, 1123 00:52:39,670 --> 00:52:41,540 recupera los datos y los interpreta. 1124 00:52:41,540 --> 00:52:44,339 Comenzamos la introducción de JavaScript, para ver 1125 00:52:44,339 --> 00:52:45,880 la sintaxis con la que podemos hacer esto. 1126 00:52:45,880 --> 00:52:47,671 Tomemos nuestros 5 minutos de descanso y después 1127 00:52:47,671 --> 00:52:51,410 comenzaremos a construir algunas de estas cosas para ver cómo interactúan. 1128 00:52:51,410 --> 00:52:52,960 Muy bien. 1129 00:52:52,960 --> 00:52:54,280 Muy bien, estamos de vuelta. 1130 00:52:54,280 --> 00:52:59,550 Recordemos que el formato que creamos hace un momento solo se ve así. 1131 00:52:59,550 --> 00:53:01,300 Es el bastante simple, feo HTML. 1132 00:53:01,300 --> 00:53:02,230 No hay CSS. 1133 00:53:02,230 --> 00:53:04,300 Aquí, nos enfocamos en la funcionalidad. 1134 00:53:04,300 --> 00:53:06,540 Les di un enfoque automático hacia el campo del correo electrónico, 1135 00:53:06,540 --> 00:53:08,630 comenzaré a iniciar sesión de inmediato. 1136 00:53:08,630 --> 00:53:10,320 Quiero llevar a cabo este comportamiento. 1137 00:53:10,320 --> 00:53:12,320 Saben que, yo no quiero cooperar. 1138 00:53:12,320 --> 00:53:15,000 Solo quiero registrarme y miren lo que sucede. 1139 00:53:15,000 --> 00:53:16,950 Quiero validar este formato. 1140 00:53:16,950 --> 00:53:17,930 Aquí hay una manera. 1141 00:53:17,930 --> 00:53:21,200 Parece que usa el método de alerta y dice correo electrónico perdido. 1142 00:53:21,200 --> 00:53:23,180 No permito que el usuario se registre. 1143 00:53:23,180 --> 00:53:32,060 OK, cooperaré un poco, malan@harvard.edu, registrarse. 1144 00:53:32,060 --> 00:53:34,370 Ahora dice, falta la contraseña. 1145 00:53:34,370 --> 00:53:37,050 A continuación, le daré una contraseña. 1146 00:53:37,050 --> 00:53:39,830 Uno, dos, tres, cuatro, cinco, registrarse. 1147 00:53:39,830 --> 00:53:40,850 Las contraseñas no coinciden. 1148 00:53:40,850 --> 00:53:41,550 Desde luego que no, 1149 00:53:41,550 --> 00:53:42,716 porque no la escribí. 1150 00:53:42,716 --> 00:53:45,140 Uno, dos, tres, cuatro, cinco, registrarse. 1151 00:53:45,140 --> 00:53:48,380 Las contraseñas aún no coinciden porque accidentalmente escribí seis. 1152 00:53:48,380 --> 00:53:51,980 Registrarse, casilla de verificación está sin marcar, y así sucesivamente. 1153 00:53:51,980 --> 00:53:55,412 Una vez que verifique la casilla y haga clic en registrarse, 1154 00:53:55,412 --> 00:53:57,620 Quiero que el formato pase al servidor. 1155 00:53:57,620 --> 00:53:59,690 ¿Cómo comenzamos a imponer ese tipo de lógica? 1156 00:53:59,690 --> 00:54:03,882 Podríamos hacer lo que hacen en CS50 Finance, mediante el cual 1157 00:54:03,882 --> 00:54:06,590 verifican el servidor y se aseguran que el usuario les dio 1158 00:54:06,590 --> 00:54:08,860 correo electrónico, contraseña, confirmación y casilla de verificación. 1159 00:54:08,860 --> 00:54:11,450 Si no, se muestran con ellos como el gato gruñón y 1160 00:54:11,450 --> 00:54:13,190 se quejan de que no cooperaron. 1161 00:54:13,190 --> 00:54:15,090 Eso es todo lindo la primera vez, 1162 00:54:15,090 --> 00:54:16,820 pero no es la mejor experiencia de usuario. 1163 00:54:16,820 --> 00:54:19,460 Porque ahora el usuario tiene que hacer clic en el botón Atrás 1164 00:54:19,460 --> 00:54:22,004 y tiene que rellenar el formato y hacerlo de nuevo. 1165 00:54:22,004 --> 00:54:24,170 Sería bueno obtener comentarios más inmediatos 1166 00:54:24,170 --> 00:54:25,010 como los que llegan aquí. 1167 00:54:25,010 --> 00:54:26,930 Y no necesariamente tan fea como esta retroalimentación, 1168 00:54:26,930 --> 00:54:30,350 porque, yo diría, que esta alerta es solo para depuración. 1169 00:54:30,350 --> 00:54:31,760 Pero, al menos es rápida, 1170 00:54:31,760 --> 00:54:34,130 y no nos molestamos de hablar con el servidor. 1171 00:54:34,130 --> 00:54:38,570 Aquí está el HTML con el que podríamos crear ese formato. 1172 00:54:38,570 --> 00:54:40,820 Para la mayor parte de esto, está el cortador de galletas, 1173 00:54:40,820 --> 00:54:46,390 deshabilité la función de autocompletar, porque estaba demasiado celoso de ella. 1174 00:54:46,390 --> 00:54:48,140 No es estrictamente necesaria para contraseñas. 1175 00:54:48,140 --> 00:54:50,510 Porque los navegadores no hacen esto de manera predeterminada. 1176 00:54:50,510 --> 00:54:53,330 Solo quiero que se vea como este, que es incluso más pequeño. 1177 00:54:53,330 --> 00:54:57,830 Tengo un campo llamado email con formato text. 1178 00:54:57,830 --> 00:55:00,830 Tengo otro campo llamado password con formato password. 1179 00:55:00,830 --> 00:55:04,400 Tengo otro campo llamado confirmation también con formato password. 1180 00:55:04,400 --> 00:55:07,750 Tengo una entrada de formato checkbox llamada agreement 1181 00:55:07,750 --> 00:55:09,000 seguido por el botón de submit. 1182 00:55:09,000 --> 00:55:09,930 Eso es todo. 1183 00:55:09,930 --> 00:55:12,510 ¿Cómo comienzo a implementar algo de la lógica que acabamos de ver? 1184 00:55:12,510 --> 00:55:13,595 Bien, haré esto. 1185 00:55:13,595 --> 00:55:15,470 Aquí en la etiqueta del script, eventualmente 1186 00:55:15,470 --> 00:55:17,178 factorizaremos esto a otro archivo, 1187 00:55:17,178 --> 00:55:18,860 por aquí, haré esto. 1188 00:55:18,860 --> 00:55:21,770 Declararé una variable llamada form y 1189 00:55:21,770 --> 00:55:25,166 y obtendré por medio de: document.getElementById ("registration"). 1190 00:55:25,166 --> 00:55:28,880 1191 00:55:28,880 --> 00:55:29,810 ¿Por qué eso? 1192 00:55:29,810 --> 00:55:33,200 Bueno, noten que di un ID único a mi formato de registro 1193 00:55:33,200 --> 00:55:36,810 solo porque quiero acceder a él, como aquí. 1194 00:55:36,810 --> 00:55:41,390 Sé que los formatos tienen gestores de envío, puedo continuar y decir, 1195 00:55:41,390 --> 00:55:45,890 hey navegador, en el envío de este formato, ve directo y llama 1196 00:55:45,890 --> 00:55:49,890 la siguiente función, aunque sea una función anónima. 1197 00:55:49,890 --> 00:55:53,580 Todo lo que me queda por hacer es implementar esta función anónima. 1198 00:55:53,580 --> 00:55:56,180 Que es lo que quiero hacer cuando el usuario haga clic en el botón enviar. 1199 00:55:56,180 --> 00:55:59,070 Quiero validar su entrada de alguna manera. 1200 00:55:59,070 --> 00:56:01,940 Así que, lo haré de esta manera lógica. 1201 00:56:01,940 --> 00:56:06,950 Si este formato del campo email tiene un valor de formato del usuario que 1202 00:56:06,950 --> 00:56:10,430 solo es igual a apertura y cierre de comillas, para continuar 1203 00:56:10,430 --> 00:56:14,550 alertaré al usuario al decir: alert("missing email"); 1204 00:56:14,550 --> 00:56:15,800 a continuación devolveré falso. 1205 00:56:15,800 --> 00:56:16,760 Porque eso es todo. 1206 00:56:16,760 --> 00:56:18,230 No devolveré cierto. 1207 00:56:18,230 --> 00:56:20,570 Devolver verdadero, significaría que el usuario enviara el formato. 1208 00:56:20,570 --> 00:56:22,910 Devolver falso, significaría que se detendría el envío del formato. 1209 00:56:22,910 --> 00:56:24,650 El usuario lo intentará de nuevo. 1210 00:56:24,650 --> 00:56:27,320 Hagamos esto ahora para contraseñas. 1211 00:56:27,320 --> 00:56:32,810 ¿Qué tal si decimos? else if (form.password.value == "") 1212 00:56:32,810 --> 00:56:36,850 para continuar, alertaré al usuario 1213 00:56:36,850 --> 00:56:42,057 alert("missing password"); return false; 1214 00:56:42,057 --> 00:56:43,640 Lo que sigue es un poco más interesante, 1215 00:56:43,640 --> 00:56:48,879 porque ahora puedo decir: else if (form.password.value) 1216 00:56:48,879 --> 00:56:50,420 ¿Qué es lo que quiero decir aquí de manera lógica? 1217 00:56:50,420 --> 00:56:51,357 PÚBLICO: .length 1218 00:56:51,357 --> 00:56:53,190 DAVID: .lenght, podría hacer eso. 1219 00:56:53,190 --> 00:56:57,334 Esa no es una pista que vimos y que tengo en la interfaz de usuario. 1220 00:56:57,334 --> 00:56:59,707 PÚBLICO: ¿Nos encontraremos con algún tipo de confirmación? 1221 00:56:59,707 --> 00:57:01,290 DAVID: La confirmación, sí. 1222 00:57:01,290 --> 00:57:03,740 Resulta que la sintaxis es la misma que en C, 1223 00:57:03,740 --> 00:57:08,570 != form.confirmation.value 1224 00:57:08,570 --> 00:57:11,740 A continuación diré, creo que dije, 1225 00:57:11,740 --> 00:57:16,610 passwords, qué dije, alert ("passwords don´t match"); 1226 00:57:16,610 --> 00:57:18,215 y también: return false; 1227 00:57:18,215 --> 00:57:20,090 La casilla de verificación es un poco diferente. 1228 00:57:20,090 --> 00:57:27,447 Puedo decir: else if (! form.agreement.checked) 1229 00:57:27,447 --> 00:57:29,780 Eso es un booleano asociado a una casilla de verificación. 1230 00:57:29,780 --> 00:57:32,060 Solo podríamos saber esto por la documentación de JavaScript. 1231 00:57:32,060 --> 00:57:33,530 Pero no lo invierte. 1232 00:57:33,530 --> 00:57:36,590 Si no está marcado, alertaré al usuario 1233 00:57:36,590 --> 00:57:41,130 alert ("checkbox unchecked"); return false; 1234 00:57:41,130 --> 00:57:44,120 Si ninguna de esas condiciones se aplican y lo hacemos 1235 00:57:44,120 --> 00:57:46,112 a través de este guantelete de verificaciones de error, 1236 00:57:46,112 --> 00:57:47,570 Probablemente, ¿qué querré hacer aquí? 1237 00:57:47,570 --> 00:57:50,110 1238 00:57:50,110 --> 00:57:51,314 ¿Qué quiero devolver? 1239 00:57:51,314 --> 00:57:52,230 PÚBLICO: Devolver cierto. 1240 00:57:52,230 --> 00:57:52,930 DAVID: Sí, devuelve cierto. 1241 00:57:52,930 --> 00:57:56,110 Eso significa, hey navegador, haz lo que quieras hacer de manera predeterminada. 1242 00:57:56,110 --> 00:57:57,940 Terminé la verificación de errores del usuario. 1243 00:57:57,940 --> 00:58:00,400 Hay algunas oportunidades para el refinamiento aquí. 1244 00:58:00,400 --> 00:58:03,970 Podría decir, no necesito compararlo contra la cadena vacía. 1245 00:58:03,970 --> 00:58:08,470 Podría decir, si no hay un valor, lo cual es un poco más ajustado. 1246 00:58:08,470 --> 00:58:10,827 Y puedo decir, si no hay una contraseña, 1247 00:58:10,827 --> 00:58:12,160 podría limpiarlo de esa manera. 1248 00:58:12,160 --> 00:58:14,743 Podría usar la cadena length, que es una cosa. 1249 00:58:14,743 --> 00:58:17,690 Podría decir algo, si quisiera ser quisquilloso, 1250 00:58:17,690 --> 00:58:24,760 else if (form.password.value.length < 8) caracteres, 1251 00:58:24,760 --> 00:58:28,690 Puedo decir algo como: alert ("password too short"); 1252 00:58:28,690 --> 00:58:31,540 lo que sería una verificación agradable: return false; 1253 00:58:31,540 --> 00:58:35,277 Si quiero estar seguro, me aseguraré de que el usuario tenga un estilo aleatorio 1254 00:58:35,277 --> 00:58:38,110 que busque la contraseña, tal vez con algunos números o caracteres especiales 1255 00:58:38,110 --> 00:58:41,347 o algunas de esas, un tanto molestas, pero posiblemente buenas restricciones, 1256 00:58:41,347 --> 00:58:43,180 a menos que usemos un gestor de contraseñas. 1257 00:58:43,180 --> 00:58:46,090 Así es como exactamente lo hacen los sitios web. 1258 00:58:46,090 --> 00:58:50,260 Pero todavía hay una oportunidad de mejorar aquí en un par de maneras. 1259 00:58:50,260 --> 00:58:53,690 Este código está, otra vez, mezclado con mi HTML. 1260 00:58:53,690 --> 00:58:55,510 Esto es fácil de arreglar. 1261 00:58:55,510 --> 00:58:59,530 A continuación, copiaré todo este código o resaltaré todo este código, 1262 00:58:59,530 --> 00:59:02,260 que hace un momento escribimos, lo cortaré y 1263 00:59:02,260 --> 00:59:04,510 me desharé del conjunto de etiquetas del script. 1264 00:59:04,510 --> 00:59:07,630 En cambio, en la cabeza de mi página web, donde previamente 1265 00:59:07,630 --> 00:59:13,210 pusimos títulos y quizás algunas etiquetas de estilo o longitud de CSS, 1266 00:59:13,210 --> 00:59:16,540 Proseguiré a decir: