Hola a todos.
En esta clase, ilustraré Pharo
comparándolo con otro lenguaje OOP, Java.
En Pharo, solo manipula objetos.
Hace cosas gracias a los mensajes solamente
y al asignar valores a las variables.
Las siguientes diapositivas mostrarán algunas equivalencias entre Java y Pharo
para entender sus diferencias y similitudes.
Por ahí,
Java se usa para crear una nueva colección
que contiene cadenas.
Esta colección es asociada a variables llamadas cadenas.
En Pharo, es lo mismo.
La clase que maneja colecciones
se llama OrderedCollection, no ArrayList,
pero el comportamiento es el mismo.
Tiene que ser consciente de varias cosas:
primero, en Pharo, new es un mensaje enviado a una clase.
Se envía el mensaje new a la clase OrderedCollection
para crear una nueva instancia de la colección
En Java, new viene primero.
Esta colección sintáctica es específica
para la creacion de instancias en Java,
mientras que en Pharo es un envío de mensaje estándar.
No hay tipos estáticos en Pharo.
Muchas cosas que se necesitan en Java No se usan en Pharo.
No necesita especificar que la colección contiene cadenas.
Y las cadenas no son una colección.
Hay otra equivalencia cuando se trata de crear un proceso secundario.
Nos gustaría ejecutar este segmento de código
en otro proceso
En Java, debe crear
una nueva instancia de la clase Thread
dándole Runnable como un parámetro.
Escribe new Runnable().
Runnable es una clase abstracta, tienes que definir el método que falta.
Este método se llama run.
Contiene el codigo desea ejecutar en un proceso secundario:
this.doSomething().
El método doSomething pertenece a la misma clase
como aquel donde se encuentra el código.
En Pharo, la sintaxis es mucho más simple.
Lo que es equivalente a toda esa parte es esta parte
En el final,
este inicio ayuda a lanzar el proceso hijo
Puedes hacerlo gracias a "fork",
un mensaje que se envía al bloque.
Desde Java 8, la última versión de Java
La sintaxis de Java ha mejorado mucho.
Como puede ver, el código en Java es mucho más claro.
El equivalente de este bloque
es el cierre léxico ubicado aquí.
El resto es el mismo que en la diapositiva anterior.
En Pharo, hay tres tipos de mensajes:
mensajes unarios,
que son mensajes sin argumentos aplicado a un receptor,
como el método factorial que ya los estudiamos,
o como el método cr
que muestra una línea vacía en la consola.
Los mensajes binarios se aplican a un receptor
y toman un valor como argumento.
Por ejemplo, los operadores
tales como + que agrega tres y cuatro.
-> se usa para crear un par con una clave y un valor
5->10 crea el par 5 10.
El tercer tipo de mensajes está basado en palabras clave.
Pueden tomar uno, dos, tres, o más parámetros.
Están separados por dos puntos.
Aquí se muestra el mensaje de palabra clave show: Se envía al objeto Transcript.
y toma la cadena en la consola como un parámetro
En el segundo ejemplo, el mensaje es between:and:
Es un mensaje separados en dos palabras clave.
Toma dos argumentos y se aplica a un receptor.
El mensaje between:and: se aplica al objeto 2
y toma 0 y 5 como argumentos.
Para comparar con Java,
especialmente cuando se trata a los mensajes basados ​​en palabras clave,
ya que son muy diferentes comparado con Java:
En Java, tienes un receptor, un punto,
el nombre del mensaje enviado al objeto,
y los argumentos entre paréntesis separado por comas.
En Pharo, expresa lo mismo
separando las palabras clave desde el nombre del método
y al poner los argumentos en el medio.
Por ejemplo:
Envío el mensaje send a postman
para enviar correo a un destinatario.
Esta es la sintaxis de Java.
Lo descompondré gradualmente para terminar con la sintaxis Pharo.
Primer paso:
extraer las partes que pertenecen a la sintaxis de Java:
el período, los paréntesis, la coma y el punto y coma.
Vamos a eliminarlos
Terminas con: postman send mail recipient.
Si convierte esto en una oración para facilitar la lectura, en inglés,
obtiene: postman send mail to recipient. Es más fácil de leer.
Para obtener la sintaxis correcta de Pharo, agrega dos puntos.
Hay un mensaje, el mensaje postman send: mail to: recipient.
Se necesitan dos argumentos, el correo y el destinatario.
Condicionales tal como if y else,
y ciclos como do, for, etc.
Son palabras clave en Java. En Pharo, no lo son.
No son palabras específicas definidas por el idioma y el compilador.
Son solo métodos y mensajes. enviado a algunos tipos de objetos.
En Pharo, por ejemplo, para ejecutar if,
envía el mensaje ifTrue: ifFalse:.
Es un mensaje que le envía a un booleano.
Toma dos bloques como parámetros: uno se ejecuta si el booleano es verdadero,
el otro si el booleano es falso.
Del mismo modo, los ciclos son solo métodos. enviado a algunos tipos de objetos.
En el primer ejemplo,
el objeto 4 es un número.
Puedo enviar el mensaje TimesRepeat: con un bloque como parámetro.
El método subyacente ejecuta el bloque
tantas veces como lo indica el receptor.
4 timesRepeat: ejecuta algo cuatro veces.
Del mismo modo, el mensaje to: do: se envía a un número.
Toma un número y un bloque como parámetros
El valor i que es el parámetro del bloque
toma cada valor entre 0 y 100.
Igualmente,
el mensaje to: by: do:
selecciona los valores comprendidos entre 0 y 100
que son múltiplos de 3: 0, 3, 6, 9, etc.
Finalmente, el mensaje dice: enviado a una colección
es lo mismo que un ciclo foreach en Java.
Ejecuta el bloque para cada elemento de la colección.
La variable :each
primero toma el primer valor de la colección,
su primer elemento
El bloque se ejecuta usando este valor de :each.
Entonces :each toma El segundo elemento de la colección.
El bloque se ejecuta usando este valor hasta el final de la colección.
Para resumir, hay tres tipos de mensajes:
mensajes unarios, mensajes binarios, y palabras clave.
El orden de precedencia:
primero ejecuta lo que esté entre paréntesis,
luego mensajes unarios, luego mensajes binarios, luego palabras clave.
Condicionales y ciclos
son mensajes enviados a algunos tipos de objetos,
a diferencia de en otros lenguajes como Java,
donde palabras clave específicas del idioma
tienen instrucciones especificas con respecto al compilador.
En Pharo, son mensajes enviados a objetos específicos