Este será un resumen de la sintaxis
Le mostraremos la totalidad de la sintaxis ...
No se estrese si no la entiende por completo.
Repasaremos todo de nuevo.
La idea es mostrarle todo lo que hay en Pharo.
Vamos a ver los principales elementos sintácticos.
Veremos que hay 3 tipos de mensajes.
Y bueno, mire la sintaxis del bloque,
una parte esencial de Pharo.
No se preocupe si no entiende todo, repetiremos todos los puntos.
Solo para recordarle, Tiene toda la sintaxis en esta diapositiva.
Puedo entrar en los detalles un poco ahora.
Aquí hay una definición de método, exampleWithNumber.
Y tiene un argumento.
Tengo definiciones de variables locales con barras verticales.
Tengo el retorno, que me permite dar un valor.
Tengo ciclos, una afectación ...
El punto, por ejemplo ese es un separador de instrucciones.
Veremos todo esto.
Vamos a empezar con el tradicional hola mundo.
Aquí, si lo desea ...
Puede ejecutar todas las instrucciones en Pharo usted mismo
para ver cuál es el resultado.
Entonces aquí tengo una cadena,
que convierto en un morph, un elemento gráfico,
y lo pido abrirse en una ventana
Así que envío asMorph al objeto cadena.
Y envío openInWindow
al morph resultante.
Entonces tenemos dos envíos de mensajes y un objeto cadena.
Un ejemplo más complicado.
Imagine que quiere tomar el logo de Pharo desde la web.
Bueno, lo hace de esta manera.
Uno hace ZnEasy getPng: con una cadena que representa la URL
del recurso que desea leer.
Y una vez más lo convierte en un objeto gráfico
y le píde que se abra en una ventana.
Entonces vemos que ZnEasy es una clase
porque las clases comienzan con mayúscula.
Los dos puntos del mensaje getPng: significa que estoy esperando un argumento,
que es la cadena http://pharo.org
Esta cadena es el argumento del método getPng:
Los mensajes asMorph y openInWindow
se leen de izquierda a derecha.
Entonces puede cortar y pegar este código.
o vuelva a escribirlo en Pharo,
y obtendrá el logo de Pharo.
Entonces, ¿qué elementos sintácticos hay en Pharo?
Tiene comentarios, que comienzan con comillas dobles.
Ese es un comentario
Los caracteres siempre van precedidos por un signo de dólar
$A es el caracter A.
Las cadenas inician y terminan con una comilla simple.
Tiene símbolos, que son cadenas únicas.
Estos comienzan así, con el hashtag
#a es el símbolo a.
Hay arreglos literales.
Aquí tengo uno con 12, 23 y 36. Tres elementos
Los enteros tienen varias representaciones,
pero no nos detendremos en esto.
Por lo general usamos representaciones en la base 10
Pero si quieres uno en la base 2, está bien.
Tienes real Esto es lo mismo.
Puede encontrar la sintaxis si lo necesita.
Tienes booleanos, con verdadero y falso.
Tienes indefinido
El null de Java es nil en Pharo.
Es una instancia de la clase UndefinedObject.
Y tiene puntos.
Esto se describe en Pharo de la forma
10@200, por ejemplo.
Entonces estoy creando el punto 10, que es 10 en la x,
y 200 en la y.
Entonces, hemos visto los elementos esenciales de la sintaxis
Ahora tenemos los constructos de la lengua
Tienes declaración de variable temporal.
Es una barra vertical seguido de otra barra vertical.
Asignación Es un signo de dos puntos y un igual.
En la variable var pongo aValue.
Tengo mensajes en mi sistema.
¿Cómo los separo?
Con un punto
Cuando quiero una secuencia de mensajes.
Hay retorno,
donde una función o método da un valor
Yo uso el sombrero pequeño, que se llama caret en inglés.
Entonces tiene bloques,
que, técnicamente hablando, son cierres léxicos,
y que puedes tomar como métodos anónimos.
Le mostraré lo que es un bloque.
Se define con corchetes.
Y se ejecuta con el valor del mensaje.
Veremos esto.
Ahí tiene todas las construcciones.
Entonces, ¿cuál es la esencia de un programa en Pharo?
Esta creando objetos mediante el uso de mensajes,
enviando mensajes a estos objetos,
y, de vez en cuando, usando bloques o métodos anónimos.
Eso es todo.
Hay tres tipos de mensaje en Pharo. ¿Por qué?
Con el fin de minimizar El número de paréntesis utilizados.
Es bastante simple
Un mensaje unario es siempre un receptor y un selector.
Aquí, por ejemplo, he dicho que quiero 9 al cuadrado.
Quiero la fecha de hoy.
Envío el mensaje hoy a la clase Fecha.
No hay argumento
Luego está el mensaje binario,
que también toma la forma de un receptor, selector y argumento.
Pero el selector será
mas, menos, tilde, igual, diagonal ... Ese tipo de cosas.
Todos esos signos matemáticos son para mensajes binarios
Aquí vemos 1 + 2. Este es un mensaje.
Enviar el mensaje + al objeto 1 con argumento objeto 2.
@ para la creación de un punto También es un mensaje,
un mensaje binario
Aquí creo el punto 3@4
enviando el mensaje @.
Después tiene lo que llamamos mensajes de palabras clave.
Un mensaje de palabra clave toma la forma
de receptor: key1: arg1 key2: arg2.
Un ejemplo es ...
es 2 entre 10 y 20
Si lo escribió en Java o C Sería así ...
Escribiría betweenAnd ...
Luego, entre paréntesis, escribiría (10, 20).
En Pharo lo expresa en forma de clave y clave.
Volveremos a ver esto, pero le da una idea de la sintaxis.
Hay una precedencia entre mensajes,
el sistema ejecutará en prioridad los paréntesis,
después el unario, los mensajes binarios y de palabras clave.
¿Por qué?
Para evitar escribir demasiados paréntesis.
Podríamos haber tenido un sistema con paréntesis por todas partes,
pero el código sería ilegible.
Volveré sobre cada tipo de mensaje de una manera simple
Este mensaje único, 10000 factorial.
Pruébelo, es un número muy grande.
Envío el mensaje factorial al objeto 10000.
No hay argumento, Es un mensaje unario.
De forma similar, un mensaje binario. 1 + 3 es un mensaje, un mensaje binario.
El selector, El nombre del método es +.
Envío el mensaje + al objeto 1 con el objeto 3 como argumento.
Un mensaje de palabra clave, como expliqué antes ...
Se lo diré de nuevo; la enseñanza tiene que ver con la repetición.
Tengo un mensaje de palabra clave con palabra clave y palabra clave,
que es el mensaje, con los argumentos,
que flotan dentro del mensaje.
La idea es tener una sintaxis que los niños pueden usar
y tener algo similar a ingles
Entonces puede poner los argumentos dentro de sus mensajes
Como ejemplo, imagine que estoy enviando una solicitud HTTP.
ZnClient es un servidor HTTP para Pharo.
Entonces creo una instancia de servidor Zn.
Entonces new es un mensaje unario, No hay argumento, ni dos puntos.
url es un mensaje de palabras clave, hay dos puntos.
queryAt: put: es otro mensaje
Es otro mensaje de palabra clave.
Y get es un mensaje unario.
Lo que también podemos ver en estos ejemplo son puntos y comas
Llamamos a esto una cascada,
que envía todos los mensajes al mismo objeto
No necesita una variable temporal
Y puede escribir un código más compacto.
Tiene que entender que los mensajes están en todas partes
Condicionales, ciclos, iteradores y La concurrencia se expresa como mensajes.
Mi explicacion sobre esos tres mensajes
aplica en todos los ámbitos.
Es la piedra angular del sistema.
No hay nada mas que estos mensajes
Echemos un vistazo.
Me he tomado la tonta definición de factorial aquí.
¿Cómo lo defino?
Defino mi método factorial.
Puse un comentario para el método. Comillas dobles.
Y empiezo con self.
Si el objeto que obtiene el mensaje es cero,
entonces le daré 1.
Si self es positivo,
por ejemplo, factorial 6, self es igual a 6 ...
Si esto es cierto ¿Qué le daré?
6 multiplicado por 6 menos 1 factorial.
La definición recursiva que todos conocemos. Y eso es todo.
Y lo interesante a destacar aquí
es que ifTrue:, que es una condición,
También es un mensaje, un mensaje de palabra clave con dos puntos,
enviado a un booleano
También tienes ifFalse:ifTrue:, ifTrue:ifFalse:...
Todas estas condiciones son mensajes
que satisfacen las reglas,
y son mensajes de palabra clave como he presentado anteriormente.
Entonces las condiciones son mensajes.
Los ciclos también son mensajes.
Aquí haré un ciclo del 1 al 4.
Del 1 al 4, ¿qué hago?
Un bloque. Un método anónimo.
Aquí estoy diciendo que lo quiero para mostrar el valor de i,
y tomaré el valor de 1, 2, 3, 4 ...
Y allí puede ver eso to:do:
es un mensaje de palabras clave.
Es un mensaje que toma la forma de un ciclo.
Hay otros ciclos en Pharo : timesRepeat:, to:by:do: y así sucesivamente.
Los veremos a todos.
Pero, nuevamente, estos son mensajes ...
Entonces aquí, to:do: se envía al objeto 1 con 4 como parámetro y un bloque.
Veremos qué es un bloque muy pronto.
También tienes iteradores.
Los iteradores son diferentes.
Envío el mensaje do:
a la colección,
diciendo lo que quiero aplicar a cada uno de los elementos.
De manera que cada uno, el argumento de mi función,
tomará como valor 1, 2, -4 y -86.
Y lo que hago aquí es que para cada uno ...
aplico el valor absoluto y lo muestro
Una vez más, este será otro curso.
Explicaremos los iteradores.
Iteradores son algo que encuentra en Java 8
Y son parte del núcleo de Pharo.
Entonces, ¿qué es un bloque?
Los bloques parecen funciones.
Si en matemáticas escribe f (x) = x² + 3,
Lo escribiría así, literalmente.
Defino una variable en el que afecto un bloque.
Un bloque es algo dentro de corchetes.
Aquí, el bloque tiene un argumento que es x.
Y pongo el contenido, que es x + 3.
Y cuando quiero ejecutar este bloque ...
La aplicación de la función.
Esa es la definición de la función, ahora tengo la aplicación
Envío el mensaje value: al bloque. Si pongo value: 2.
x es 2, entonces mi bloqueo me dará 5.
¿OK?
Entonces, ¿qué es un bloque? Es un tipo de función anónima, no tiene nombre.
De hecho, es un cierre léxico.
Lo explicaremos
Los bloques son objetos reales.
Se pueden pasar como método argumentos, almacenados en variables,
devueltos ...
Entonces pueden ser usados como disparadores de botón,
como devolucion de llamada en aplicaciones web ... Estos pueden ser bloques.
Ya hemos visto el uso del bloque.
En iteradores tienes bloques.
Vimos que los bloques son usados en condiciones
Habrá un curso sobre bloques.
Es elegante, Fueron introducidos en Eiffel,
fueron introducido recientemente en Java 8,
hubo una primera versión en C# ...
Entonces es fundamental.
Los bloques son un elemento fundamental
de la sintaxis de Pharo y su modelo computacional.
¿Cómo definimos una clase en Pharo?
El navegador que ves aquí muestra paquetes.
Tiene las clases dentro.
Y le muestra una plantilla.
La plantilla dice que de forma predeterminada, hereda un objeto,
y el nombre de la clase.
Lo veremos para la clase Point, por ejemplo.
Entonces, la definición de la clase ...
Tengo el objeto de clase. ¡También es un mensaje!
La subclase del mensaje: InstanceVariableNames:
bla, bla, bla...
Con ...
Defino la clase Point,
y le doy las variables de instancia x e y.
Eso es solo para mostrar que la sintaxis siempre sigue el mismo modelo con mensajes.
Normalmente no lo escribo a mano.
La herramienta le da la plantilla y simplemente lo completa.
Entonces, ¿cómo definimos un método?
Como dije, los métodos son públicos y virtuales,
y de forma predeterminada, regresan self.
Entonces, cuando está en el navegador,
sugiere una plantilla,
el nombre del método potencial y un comentario ...
Somos amables y educados por lo que comentamos sobre nuestro código.
También podemos poner nombres de variables temporales y declaraciones.
¿Qué nos da esto? Hemos visto el método factorial.
Aquí estoy en la clase Integer.
Miro el método factorial, Tengo su codigo,
con el nombre del método, su comentario
y el contenido del método que he definido
Entonces, para resumir, ¿qué hemos visto?
Hay 3 tipos de mensajes: mensajes unarios, sin argumentos,
mensajes binarios donde los selectores son matemáticos,
y mensajes de palabras clave, donde puede haber varios argumentos.
Hay una prioridad: paréntesis primero,
luego unario, binario y palabra clave.
Y si hay mensajes del mismo nivel Es de izquierda a derecha.
¿Qué hemos visto? La sintaxis es muy compacta.
Hay pocas construcciones pero son realmente expresivas.
Son principalmente mensajes y cierres léxicos, o bloques.
Hay tres tipos de mensajes.
Haras un ejercicio para desarrollar un lenguaje
Así puede definir lo que llamamos Lenguaje de Dominio Específico.