1 00:00:00,640 --> 00:00:03,600 En esta sesión, Hablaremos de ciclos en Pharo. 2 00:00:03,760 --> 00:00:08,320 En Pharo, los ciclos son mensajes enviado a los objetos 3 00:00:08,480 --> 00:00:10,680 Hay muchos tipos de ciclos. 4 00:00:11,320 --> 00:00:14,680 Son mensajes enviado a números, colecciones, 5 00:00:14,840 --> 00:00:16,360 o incluso a bloques. 6 00:00:16,520 --> 00:00:21,040 En algunos casos, son iteradores sobre los elementos de una colección. 7 00:00:22,080 --> 00:00:23,600 Esto es un ejemplo: 8 00:00:23,760 --> 00:00:27,240 Envío el mensaje timesRepeat: 9 00:00:27,400 --> 00:00:29,000 al entero 4. 10 00:00:29,160 --> 00:00:31,640 Le paso un bloque como parámetro. 11 00:00:31,800 --> 00:00:34,480 Estudiamos bloques en el curso anterior. 12 00:00:34,640 --> 00:00:38,400 Este bloque comienza aquí y termina allí. 13 00:00:39,080 --> 00:00:43,520 Este mensaje repite la evaluación de este bloque 14 00:00:44,120 --> 00:00:46,960 varias veces en este ejemplo, cuatro veces 15 00:00:47,120 --> 00:00:48,840 como el receptor es 4. 16 00:00:50,720 --> 00:00:54,080 Hay otros tipos de mensajes para crear ciclos. 17 00:00:54,240 --> 00:00:57,000 En este ejemplo, es el mensaje to:do:. 18 00:00:57,160 --> 00:01:00,360 El mensaje to:do: se define en la clase Número. 19 00:01:01,520 --> 00:01:04,360 También le pasaré un bloque como un parámetro, 20 00:01:04,520 --> 00:01:06,400 el último argumento del mensaje. 21 00:01:06,560 --> 00:01:09,440 Este bloque se ejecuta un número de veces 22 00:01:09,600 --> 00:01:13,640 con un cursor de ciclo que va desde el receptor 23 00:01:13,800 --> 00:01:16,320 al primer argumento del mensaje. 24 00:01:17,800 --> 00:01:19,960 Por ejemplo, 25 00:01:20,120 --> 00:01:23,080 con el mismo ejemplo: 26 00:01:23,240 --> 00:01:26,360 envío el mensaje to:do: al entero 1. 27 00:01:27,160 --> 00:01:31,840 En el bloque, usted muestra el parámetro del bloque, 28 00:01:32,000 --> 00:01:34,080 el parámetro i en cada ciclo. 29 00:01:34,240 --> 00:01:39,200 En el Transcript, tiene todos los enteros entre 1 y 100. 30 00:01:42,000 --> 00:01:47,120 Hay otros mensajes para crear ciclos. 31 00:01:47,280 --> 00:01:50,280 Por ejemplo, el mensaje to:by:do 32 00:01:50,440 --> 00:01:52,440 para incrementar en más de 1. 33 00:01:52,600 --> 00:01:55,680 Usted controla la escala del incremento. 34 00:01:55,840 --> 00:01:58,040 Puede incrementar en 3 en este ejemplo. 35 00:01:58,200 --> 00:02:02,160 Con cada ciclo, toma valores con incrementos de 3. 36 00:02:03,920 --> 00:02:08,080 Puede ver que pasa cuando ejecuta este segmento de código. 37 00:02:08,240 --> 00:02:12,040 Puede ver que fui de 1 a 100 38 00:02:12,200 --> 00:02:14,400 con un incremento de 3 cada vez. 39 00:02:15,880 --> 00:02:18,920 También hay iteradores para crear ciclos. 40 00:02:19,080 --> 00:02:23,360 Los iteradores son mensajes que debe enviarse a colecciones, 41 00:02:23,520 --> 00:02:25,000 a objetos de colección 42 00:02:25,160 --> 00:02:28,440 Hay muchos tipos como do:. 43 00:02:28,600 --> 00:02:31,880 do: itera sobre cada elemento de una colección. 44 00:02:32,040 --> 00:02:35,400 collect: itera sobre los elementos de una colección 45 00:02:35,560 --> 00:02:39,040 pero también recoge los resultados 46 00:02:39,200 --> 00:02:41,040 para ponerlos en una nueva colección. 47 00:02:41,200 --> 00:02:45,560 select: selecciona los elementos coincidentes en una colección: 48 00:02:45,720 --> 00:02:48,720 construye una nueva colección con los elementos seleccionados 49 00:02:48,880 --> 00:02:53,280 reject: rechaza los elementos de una colección que no desea. 50 00:02:53,440 --> 00:02:56,320 detect:​​ ayuda a determinar 51 00:02:56,480 --> 00:03:00,120 si existe un elemento en una colección dada, etc. 52 00:03:00,280 --> 00:03:03,360 Estudiaremos algunos de estos en las próximas diapositivas. 53 00:03:04,200 --> 00:03:08,440 do:, por ejemplo, es el mensaje más común. 54 00:03:08,600 --> 00:03:13,000 Envía el mensaje: a una colección y lo pasa a un bloque. 55 00:03:13,160 --> 00:03:16,240 Con cada ciclo, 56 00:03:16,400 --> 00:03:19,160 el parámetro del bloque :each, 57 00:03:19,320 --> 00:03:22,200 recibe el primer elemento de la colección, 58 00:03:22,360 --> 00:03:26,000 luego el segundo, hasta el elemento final de la colección 59 00:03:28,280 --> 00:03:31,680 Esto es un ejemplo; es una colección definida. 60 00:03:31,840 --> 00:03:34,200 Un recordatorio de la sintaxis: abrir con #( 61 00:03:34,360 --> 00:03:37,080 y cierra con ) para colecciones literales 62 00:03:37,240 --> 00:03:42,120 Esta colección contiene cuatro enteros: 15, 10, 19 y 68. 63 00:03:42,280 --> 00:03:46,320 Envía el mensaje: a la colección y lo pasa a un bloque. 64 00:03:46,480 --> 00:03:51,000 i, el parámetro del bloque, 65 00:03:51,160 --> 00:03:53,560 toma el valor 15 en el primer ciclo, 66 00:03:53,720 --> 00:03:56,120 luego 10, 19 y 68. 67 00:03:59,040 --> 00:04:01,680 Este es otro mensaje: whileTrue:. 68 00:04:01,840 --> 00:04:04,680 whileTrue: también puede crear ciclos, 69 00:04:04,840 --> 00:04:07,640 pero es un mensaje que se envía a un bloque. 70 00:04:07,800 --> 00:04:09,800 Se define en la clase Bloque. 71 00:04:09,960 --> 00:04:12,480 Este es el bloque receptor. 72 00:04:12,640 --> 00:04:14,720 Aquí hay un bloque de argumentos. 73 00:04:15,320 --> 00:04:19,320 Le doy un ejemplo concreto de la clase Color. 74 00:04:19,480 --> 00:04:22,120 Esto es whileTrue:. 75 00:04:22,760 --> 00:04:25,800 En el bloque receptor, hay una condición 76 00:04:25,960 --> 00:04:28,560 El bloque se evalúa como verdadero o falso. 77 00:04:28,720 --> 00:04:32,200 Dependiendo de la evaluación del primer bloque, el receptor, 78 00:04:32,360 --> 00:04:34,800 usted desencadena o no desencadena la ejecución 79 00:04:34,960 --> 00:04:38,600 del segundo bloque, que es el parámetro de whileTrue:. 80 00:04:39,520 --> 00:04:42,080 Hay otra versión de whileTrue:. 81 00:04:42,240 --> 00:04:46,480 Es el método whileTrue sin un parámetro 82 00:04:46,640 --> 00:04:50,280 Toma el bloque receptor y lo evalúa. 83 00:04:50,440 --> 00:04:52,920 Si devuelve verdadero o falso, 84 00:04:53,080 --> 00:04:55,800 se vuelve a evaluar una vez más, y así sucesivamente. 85 00:04:55,960 --> 00:04:59,240 Vuelva a evaluar el bloque siempre que su valor sea verdadero. 86 00:05:00,840 --> 00:05:04,960 Tienes los gemelos de whileTrue con los métodos whileFalse, 87 00:05:05,120 --> 00:05:07,440 con y sin parámetros 88 00:05:07,600 --> 00:05:12,120 Cada variación existe cuando se trata de clases y bloques. 89 00:05:14,160 --> 00:05:16,640 En resumen, en este curso, 90 00:05:16,800 --> 00:05:20,840 vimos que los ciclos se expresan como mensajes normales en Pharo. 91 00:05:21,000 --> 00:05:22,440 Se envían a los objetos 92 00:05:22,600 --> 00:05:27,560 (enteros, colecciones, bloques ...). 93 00:05:28,280 --> 00:05:32,400 Puede usarlos para construir muchos ciclos diferentes 94 00:05:32,560 --> 00:05:34,680 Incluso puede agregar algunos si lo desea.