WEBVTT

00:00:00.480 --> 00:00:03.680 align:middle
En esta sesión, revisaremos
la sintaxis Pharo.

00:00:03.840 --> 00:00:07.000 align:middle
La revisaremos por completo
usando un ejemplo concreto,

00:00:07.160 --> 00:00:11.480 align:middle
el ejemplo de un simple
aplicación HTTP desde el mundo real.

00:00:11.640 --> 00:00:15.960 align:middle
Analizaremos el código y revisaremos
la sintaxis de Pharo a través de él.

00:00:16.720 --> 00:00:20.240 align:middle
Esta aplicación
es una simple aplicación web

00:00:20.400 --> 00:00:23.160 align:middle
que muestra información sobre libros.

00:00:23.320 --> 00:00:26.840 align:middle
Le daré el primer ejemplo.
Utilizaré el framework Zinc,

00:00:27.000 --> 00:00:30.440 align:middle
un framework HTTP
que estudiaremos en otro curso.

00:00:30.600 --> 00:00:34.080 align:middle
Tiene dos partes:
cliente y servidor

00:00:34.240 --> 00:00:37.440 align:middle
Puede hacer solicitudes HTTP, etc.

00:00:37.600 --> 00:00:41.880 align:middle
Primero, podemos ver que ZnClient es una clase.

00:00:42.040 --> 00:00:45.280 align:middle
Pues comienza con la mayúscula Z
como vimos anteriormente.

00:00:45.440 --> 00:00:48.920 align:middle
Nombres de clase y variables globales.
Comienzan con mayúsculas.

00:00:49.080 --> 00:00:50.360 align:middle
ZnClient es una clase.

00:00:50.520 --> 00:00:53.680 align:middle
Si envia el mensaje "new"
a esta clase

00:00:53.840 --> 00:00:56.800 align:middle
creará
una nueva instancia de ZnClient.

00:00:56.960 --> 00:01:01.880 align:middle
A esta nueva instancia, le enviaremos
un primer mensaje "url:" que tiene un parámetro,

00:01:02.040 --> 00:01:03.880 align:middle
aqui una cadena de caracteres.

00:01:04.040 --> 00:01:06.760 align:middle
Luego usaremos la cascada.

00:01:06.920 --> 00:01:09.680 align:middle
Le recuerdo
ese ";" al final significa:

00:01:09.840 --> 00:01:13.520 align:middle
envía un nuevo mensaje
al mismo receptor

00:01:15.040 --> 00:01:20.000 align:middle
Este trozo de código simula
¿Lo qué haría su navegador?

00:01:20.160 --> 00:01:23.040 align:middle
cuando escribe una url
y presiona enter.

00:01:23.200 --> 00:01:25.760 align:middle
Si escribo una url y presiono enter,

00:01:25.920 --> 00:01:28.600 align:middle
contacto con el servidor
de esta aplicación web

00:01:28.760 --> 00:01:31.400 align:middle
que devuelve una respuesta HTTP:

00:01:31.560 --> 00:01:36.160 align:middle
en este caso, la información.
De un libro, el libro número 1.

00:01:38.240 --> 00:01:40.200 align:middle
Le daré otro ejemplo,

00:01:40.360 --> 00:01:43.480 align:middle
una segunda solicitud
construida con Pharo y ZnClient.

00:01:43.640 --> 00:01:47.360 align:middle
siempre igual:
instanciamos un objeto Znclient.

00:01:47.520 --> 00:01:50.560 align:middle
le envía mensajes mediante cascada.

00:01:50.720 --> 00:01:54.320 align:middle
Y luego, puede ver algo
que ya hemos estudiado

00:01:54.480 --> 00:01:56.920 align:middle
en Pharo, los mensajes de palabras clave,

00:01:57.080 --> 00:02:01.800 align:middle
que significa que el nombre del método
es "formAt: put:" 

00:02:01.960 --> 00:02:05.800 align:middle
Es el equivalente
en la sintaxis típica de Java

00:02:05.960 --> 00:02:08.960 align:middle
formAtPut
el nombre del método todo pegado.

00:02:09.120 --> 00:02:12.600 align:middle
Y todos los argumentos
entre paréntesis.

00:02:15.720 --> 00:02:17.880 align:middle
En esta diapositiva, me gustaría mostrarle

00:02:18.040 --> 00:02:21.160 align:middle
el código completo
de esta aplicación web

00:02:21.320 --> 00:02:23.200 align:middle
construida con zinc.

00:02:25.480 --> 00:02:29.200 align:middle
Le mostraré algunas partes
de este código, punto a punto.

00:02:29.360 --> 00:02:33.400 align:middle
En primer lugar, la primera parte corresponde
a la configuración del servidor.

00:02:33.560 --> 00:02:37.160 align:middle
En la primera línea,

00:02:37.320 --> 00:02:39.760 align:middle
hay declaraciones de variables locales.

00:02:39.920 --> 00:02:43.080 align:middle
Recuerde que comienzan con minúsculas.

00:02:43.240 --> 00:02:47.880 align:middle
books y teapot son dos variables locales.
situadas entre barras verticales.

00:02:48.040 --> 00:02:52.520 align:middle
Luego, hay asignaciones
Aquí está la primera.

00:02:52.680 --> 00:02:54.600 align:middle
Es ":=" en Pharo.

00:02:55.640 --> 00:02:57.480 align:middle
Puede tener símbolos.

00:02:57.640 --> 00:03:00.320 align:middle
En el punto numero tres hay "#port"

00:03:00.480 --> 00:03:03.320 align:middle
que se encuentra aquí en el código.

00:03:03.480 --> 00:03:06.520 align:middle
Se corresponde con un símbolo,
una cadena única.

00:03:06.680 --> 00:03:08.360 align:middle
Se creó solo una vez.

00:03:09.120 --> 00:03:12.560 align:middle
Hay mensajes enviados
a la clase Teapot.

00:03:12.720 --> 00:03:15.400 align:middle
Por ejemplo, la clase Teapot está aquí.

00:03:15.560 --> 00:03:17.960 align:middle
Y puedo enviar
el mensaje "configure:"

00:03:18.120 --> 00:03:19.320 align:middle
Mira "configure:"

00:03:19.480 --> 00:03:23.160 align:middle
Déjame recordarle que ":"
marca la presencia de un argumento

00:03:23.320 --> 00:03:26.520 align:middle
que envía a este método.

00:03:26.680 --> 00:03:31.240 align:middle
Aqui el argumento enpieza con una llave

00:03:31.400 --> 00:03:33.400 align:middle
y termina con otra llave.

00:03:33.560 --> 00:03:37.960 align:middle
Entonces, ¿qué se encuentra entre llaves?
es una tabla dinámica

00:03:38.120 --> 00:03:40.200 align:middle
Todo esto entre llaves.

00:03:40.360 --> 00:03:44.640 align:middle
Cada expresión separada por "."
será evaluada

00:03:44.800 --> 00:03:48.400 align:middle
y construiremos una tabla
con los resultados de cada expresión.

00:03:49.000 --> 00:03:51.880 align:middle
Solo hay un argumento
en el método configure:

00:03:52.040 --> 00:03:57.600 align:middle
Y dentro de esta tabla dinámica
entre llaves,

00:03:57.760 --> 00:04:03.720 align:middle
usará una flecha
para construir objetos Association.

00:04:03.880 --> 00:04:05.800 align:middle
Esto es, una clave, un valor.

00:04:10.440 --> 00:04:13.160 align:middle
Entonces, para que el servidor funcione,

00:04:13.320 --> 00:04:16.120 align:middle
no solo definirá
la configuración del servidor

00:04:16.280 --> 00:04:18.920 align:middle
sino también rutas.

00:04:19.080 --> 00:04:23.800 align:middle
Lo explicaré usando un ejemplo más pequeño:
Este es un trozo del código completo.

00:04:23.960 --> 00:04:27.600 align:middle
Si quiero que mi solicitud procese
una URL como esta,

00:04:28.960 --> 00:04:31.400 align:middle
que termina con libros/1,

00:04:31.560 --> 00:04:34.600 align:middle
si quiero la información
en el libro 1, por ejemplo,

00:04:34.760 --> 00:04:38.720 align:middle
Defino una ruta
en mi solicitud de Zinc.

00:04:38.880 --> 00:04:42.600 align:middle
Cuando recibo una solicitud
del tipo GET,

00:04:42.760 --> 00:04:47.680 align:middle
que comienza con / books /
y alguna cosa que és un entero,

00:04:47.840 --> 00:04:52.400 align:middle
puede verlo
Entonces ejecuta este bloque de código.

00:04:52.560 --> 00:04:57.600 align:middle
Recuerda que un bloque
comienza y termina en corchetes.

00:04:57.760 --> 00:05:00.840 align:middle
Es un método anónimo.
que puede tomar un parámetro:

00:05:01.000 --> 00:05:05.080 align:middle
en este caso,
el parámetro se llama ":request"

00:05:05.240 --> 00:05:08.280 align:middle
y está separado por una barra vertical.

00:05:09.000 --> 00:05:12.240 align:middle
Luego, el cuerpo del bloque se encuentra aquí.

00:05:12.400 --> 00:05:15.040 align:middle
Solo hay una expresión aquí,
ésta.

00:05:15.200 --> 00:05:19.480 align:middle
Entonces, se envía el mensaje "at:"
al objeto books.

00:05:23.600 --> 00:05:27.840 align:middle
¿Qué libro quieres?
en la colección de libros?

00:05:28.000 --> 00:05:31.640 align:middle
Queremos el libro cuya id.
se pasó como parámetro en la url.

00:05:31.800 --> 00:05:33.520 align:middle
Pediré la solicitud.

00:05:33.680 --> 00:05:38.440 align:middle
La variable aquí es el parámetro
del bloque definido al inicio.

00:05:38.600 --> 00:05:42.440 align:middle
Obtengo el elemento llamado id
en esta solicitud

00:05:42.600 --> 00:05:45.480 align:middle
Convierto este elemento
(recuerde que es un entero).

00:05:45.640 --> 00:05:47.360 align:middle
Lo convierto en una cadena.

00:05:47.520 --> 00:05:51.720 align:middle
Esto me permite obtener el libro 1.

00:05:52.600 --> 00:05:56.760 align:middle
Para concluir, hemos revisado
Toda la sintaxis Pharo

00:05:56.920 --> 00:05:58.320 align:middle
en esta clase.

00:05:58.480 --> 00:06:01.040 align:middle
El objetivo era interesarse
en la sintaxis,

00:06:01.200 --> 00:06:04.840 align:middle
pero también pudimos re-descubrir
la sintaxis a través de un paquete

00:06:05.000 --> 00:06:08.960 align:middle
que es bastante interesante
y divertido para programar, Teapot.

00:06:09.120 --> 00:06:12.920 align:middle
Descubrelo por ti mismo.
Puede descargarlo desde SmalltalkHub.

00:06:13.080 --> 00:06:17.400 align:middle
Puede construir
Aplicaciones HTTP muy fácilmente.

00:06:17.560 --> 00:06:21.920 align:middle
Además, es un paquete
construido a base de Zinc.

00:06:22.080 --> 00:06:26.720 align:middle
Zinc es una de las bibliotecas
solidas en Pharo

00:06:26.880 --> 00:06:29.240 align:middle
para hacer aplicaciones web más complejas,

00:06:29.400 --> 00:06:32.480 align:middle
como veremos
en los siguientes cursos.

