En esta sesión, Hablaremos de ciclos en Pharo.
En Pharo, los ciclos son mensajes enviado a los objetos
Hay muchos tipos de ciclos.
Son mensajes enviado a números, colecciones,
o incluso a bloques.
En algunos casos, son iteradores sobre los elementos de una colección.
Esto es un ejemplo:
Envío el mensaje timesRepeat:
al entero 4.
Le paso un bloque como parámetro.
Estudiamos bloques en el curso anterior.
Este bloque comienza aquí y termina allí.
Este mensaje repite la evaluación de este bloque
varias veces en este ejemplo, cuatro veces
como el receptor es 4.
Hay otros tipos de mensajes para crear ciclos.
En este ejemplo, es el mensaje to:do:.
El mensaje to:do: se define en la clase Número.
También le pasaré un bloque como un parámetro,
el último argumento del mensaje.
Este bloque se ejecuta un número de veces
con un cursor de ciclo que va desde el receptor
al primer argumento del mensaje.
Por ejemplo,
con el mismo ejemplo:
envío el mensaje to:do: al entero 1.
En el bloque, usted muestra el parámetro del bloque,
el parámetro i en cada ciclo.
En el Transcript, tiene todos los enteros entre 1 y 100.
Hay otros mensajes para crear ciclos.
Por ejemplo, el mensaje to:by:do
para incrementar en más de 1.
Usted controla la escala del incremento.
Puede incrementar en 3 en este ejemplo.
Con cada ciclo, toma valores con incrementos de 3.
Puede ver que pasa cuando ejecuta este segmento de código.
Puede ver que fui de 1 a 100
con un incremento de 3 cada vez.
También hay iteradores para crear ciclos.
Los iteradores son mensajes que debe enviarse a colecciones,
a objetos de colección
Hay muchos tipos como do:.
do: itera sobre cada elemento de una colección.
collect: itera sobre los elementos de una colección
pero también recoge los resultados
para ponerlos en una nueva colección.
select: selecciona los elementos coincidentes en una colección:
construye una nueva colección con los elementos seleccionados
reject: rechaza los elementos de una colección que no desea.
detect:​​ ayuda a determinar
si existe un elemento en una colección dada, etc.
Estudiaremos algunos de estos en las próximas diapositivas.
do:, por ejemplo, es el mensaje más común.
Envía el mensaje: a una colección y lo pasa a un bloque.
Con cada ciclo,
el parámetro del bloque :each,
recibe el primer elemento de la colección,
luego el segundo, hasta el elemento final de la colección
Esto es un ejemplo; es una colección definida.
Un recordatorio de la sintaxis: abrir con #(
y cierra con ) para colecciones literales
Esta colección contiene cuatro enteros: 15, 10, 19 y 68.
Envía el mensaje: a la colección y lo pasa a un bloque.
i, el parámetro del bloque,
toma el valor 15 en el primer ciclo,
luego 10, 19 y 68.
Este es otro mensaje: whileTrue:.
whileTrue: también puede crear ciclos,
pero es un mensaje que se envía a un bloque.
Se define en la clase Bloque.
Este es el bloque receptor.
Aquí hay un bloque de argumentos.
Le doy un ejemplo concreto de la clase Color.
Esto es whileTrue:.
En el bloque receptor, hay una condición
El bloque se evalúa como verdadero o falso.
Dependiendo de la evaluación del primer bloque, el receptor,
usted desencadena o no desencadena la ejecución
del segundo bloque, que es el parámetro de whileTrue:.
Hay otra versión de whileTrue:.
Es el método whileTrue sin un parámetro
Toma el bloque receptor y lo evalúa.
Si devuelve verdadero o falso,
se vuelve a evaluar una vez más, y así sucesivamente.
Vuelva a evaluar el bloque siempre que su valor sea verdadero.
Tienes los gemelos de whileTrue con los métodos whileFalse,
con y sin parámetros
Cada variación existe cuando se trata de clases y bloques.
En resumen, en este curso,
vimos que los ciclos se expresan como mensajes normales en Pharo.
Se envían a los objetos
(enteros, colecciones, bloques ...).
Puede usarlos para construir muchos ciclos diferentes
Incluso puede agregar algunos si lo desea.