Hola. Esta semana, llegaremos al meollo del asunto,
Sobre la sintaxis especialmente.
Esta clase será principalmente, acerca de tratar con los mensajes de la sintaxis de Pharo,
que es la mayor parte de Pharo.
En Pharo, hay tres cosas principales:
objetos, mensajes, y cierres llamados bloques.
Habrá un curso sobre bloques.
Puede cubrir casi toda la sintaxis de Pharo con esto.
La sintaxis de Pharo fue heredada de la de Smalltalk,
que fue diseñado para enseñar a los niños cómo programar.
Se trata de escribir programas que son como oraciones cortas
que un niño puede escribir.
También se trata de minimizar el número de paréntesis.
Veremos cómo funciona.
Por ejemplo, tomemos un recuadro en openstreetmap.
Quiero abrirla en una ventana gráfica.
Este es un ejemplo de la sintaxis.
Yo uso parentesis porque primero quiero obtener un archivo png.
Convierto el archivo png en un objeto gráfico Pharo
antes de abrirlo en una ventana hagalo con Pharo y obtendrás el resultado.
Probablemente sea agua ya que hay muchos recuadros de agua.
En la sintaxis de Pharo, hay tres tipos de mensajes
para minimizar el número de paréntesis.
Son: unarios, binarios, y mensajes de palabras clave.
Veamos sobre ellos.
Con mensajes unarios, tienen un receptor, luego el nombre del método.
Con mensajes binarios, un receptor, el selector, luego un argumento.
Con mensajes de palabras clave, un receptor, luego un argumento o argumentos.
Puede distinguirlos gracias a los dos puntos aquí.
Estudiaremos esto.
Cuál es el uso de estos tres tipos de mensajes?
Puede diferenciarlos.
Cambia la manera en que los programas se ejecutan.
Siempre ejecuta lo que está entre paréntesis primero;
luego mensajes unarios; luego binario; luego palabras clave
Cuando en el mismo nivel, use el mismo orden,
de izquierda a derecha.
Veamos sobre mensajes unarios:
Si le pido a un SmallInteger 1, ¿qué clase es, devolverá SmallInteger.
Esta será su tarea para la próxima semana:
si envío el mensaje not al booleano false, obtengo el booleano true.
Si pregunto a la clase Date por la fecha de hoy,
devolverá el 24 de mayo de 2009, por ejemplo, que es un objeto de fecha.
Si envío el mensaje pi a la clase Flot,
devolverá una representación del objeto pi.
No sé si ya lo notó,
pero envié mensajes a los objetos
así como mensajes a las clases exactamente de la misma manera.
No dije:"Es una clase. Cuidado, tienes que hacer algo ".
Envío el mensaje class a SmallInteger, devuelve la clase.
Envío el mensaje today a la clase Date, devuelve una fecha.
Nada sofisticado.
En Pharo, las clases también son objetos.
Los mensajes enviados a las clases se procesan. como mensajes a instancias
Lo que tiene total sentido.
Tengo un ejemplo para usted.
Este ejercicio no está relacionado con la sintaxis. Es solo para divertirse.
Pensé que sería divertido determinar cuales son todos los metodos
implementado en la clase Point. Es un mensaje unario. Puedo decir:
"Clase Point, devuelve todos tus métodos y los nombres de mensaje que entiendes ".
Volverá una larga lista. con todos los mensajes
¿Ve con qué facilidad puede construir herramientas?
Si pongo esto en una lista,
Obtendré una lista con todos los mensajes que la clase regresa.
Así funciona el navegador que usará.
Vamos a refinar esto: Me gustaría consultar el sistema
para todos los selectores unarios de la clase Punto.
Lo escribo así: "Clase Point, lista todos tus selectores".
Devolverá un arreglo, una colección.
Escribo qué quiero seleccionar ...
Este es un mensaje de palabras clave.
Quiero seleccionar entre los selectores. los que son unarios.
Hay una consulta llamada #isUnary.
Es un mensaje sobre nombres de métodos. que selecciona tales cosas.
Esta es una pequeña nota al pie en la sintaxis.
Aprenderá en el curso acerca de los iteradores, siendo select: uno de ellos.
Es muy elegante, puedo consultar el sistema en una línea.
Volviendo al tema que nos ocupa.
Hay mensajes binarios: Están compuestos por un objeto,
un selector binario y un argumento.
Los selectores binarios son una combinación de estas cosas incomprensibles:
%, | ...
Lo que no se puede entender es binario. Lo que parece matemáticas es binario.
Por ejemplo, envío el mensaje + al objeto 1
con el objeto 2 como argumento. Devuelve 3, lo cual es genial.
> es un mensaje binario.
@ es también un mensaje binario; crea puntos.
concatenación de cadenas con una coma es un mensaje binario
Escribo:'chocolate negro', 'es bueno'
Obtengo la cadena 'chocolate negro es bueno', lo cual es verdad.
Acerca de los mensajes de palabras clave ...
la gente a menudo los encuentra frustrantes
cuando estan acostumbrados a a una sintaxis similar a Java o C,
con un punto, paréntesis, y una coma en el medio.
Pero nosotros lo hacemos así:en el medio.
Lo que tiene que ver en este ejemplo es que el mensaje es:
keyword1:, keyword2:.
El mensaje está lleno. Se compone de dos partes.
Es hora de probarlo usted mismo. Le daré un par de segundos.
¿Qué son estos mensajes? ¿A qué tipos pertenecen?
El primero no tiene argumento debe ser unario.
El segundo también.
Hay dos puntos debe ser una palabra clave.
Hay algo con una coma, no lo entiendo, es binario.
Es raro, es binario. No hay argumento, es unario.
Hay dos puntos, es una palabra clave.
Puede parecer difícil, pero ...
Esta es la solucion
Por ejemplo,
imaginemos que quiero cambiar el valor x de un punto.
Este es un punto. Es un mensaje binario.
Escribo setX: con un argumento.
Devuelve un punto en el que 2 ha sido cambiado.
No se ve tan difícil, ¿verdad?
Ahora con el mensaje at:put: tengo un arreglo.
Contiene las cadenas: 'Calvin' 'hates' 'Suzie'.
Quiero cambiar el segundo elemento.
Escribo at: 2 put: 'loves'.
Esto es 2. Entonces 'loves' va aquí.
Acerca de los arreglos, puede ver
el método se llama at:put:.
Este método cambia el valor de una colección en un índice dado.
Como puede ver, las colecciones inician en 1 en Pharo, no en 0.
Quiero el segundo elemento, entonces cuento:1, 2.
No tiene que restar nada.
Daré otro ejemplo de mensajes de palabra clave:
cuando pregunto si 12, que es un entero,
está entre 10 y 20,
Es el mensaje between: and:.
En la sintaxis, sería lo mismo que: 12 entre
y 10,20.
Creo que me he centrado en esto lo suficiente.
Hay tres tipos de mensajes:
unario, binario y palabras clave.
Eso es todo.