1 00:00:00,560 --> 00:00:04,240 En este curso, estudiaremos Booleanos y condiciones en Pharo. 2 00:00:04,960 --> 00:00:09,160 Hay dos objetos booleanos: verdadero y falso. 3 00:00:09,320 --> 00:00:12,480 true es la única instancia de la clase Verdadero. 4 00:00:12,640 --> 00:00:15,440 false es la única instancia de la clase Falso. 5 00:00:15,600 --> 00:00:20,640 Enviaremos mensajes a estos objetos. para establecer operaciones booleanas 6 00:00:20,800 --> 00:00:24,160 o estructuras alternativas como ifTrue:IfFalse:, etc. 7 00:00:24,320 --> 00:00:26,280 Estudiaremos esto. 8 00:00:26,920 --> 00:00:29,880 En el primer ejemplo de esta diapositiva, 9 00:00:30,040 --> 00:00:34,240 envias el mensaje & un operador binario, 10 00:00:34,400 --> 00:00:35,720 al objeto falso 11 00:00:35,880 --> 00:00:38,520 Le pasa un parámetro, que es todo esto 12 00:00:38,680 --> 00:00:42,320 Es una expresión entre paréntesis, (1 error:'crazy'). 13 00:00:42,480 --> 00:00:45,480 Esta expresión desencadena un error. 14 00:00:45,640 --> 00:00:50,280 Puede ver la evaluación de esto Toda la expresión desencadena un error. 15 00:00:50,440 --> 00:00:53,600 ¿Por qué? Porque el operando también ha sido evaluado 16 00:00:53,760 --> 00:00:56,280 en esta expresión booleana. 17 00:00:57,560 --> 00:01:01,000 El operando ha sido evaluado, de ahí el error. 18 00:01:01,160 --> 00:01:05,640 Si quiere obtener la versión perezosa de los operadores booleanos, 19 00:01:05,800 --> 00:01:10,960 debe usar el método and: de la clase booleana. 20 00:01:11,120 --> 00:01:13,440 Este método toma un bloque como un parámetro 21 00:01:13,600 --> 00:01:18,000 Los bloques comienzan con [ y terminan con ]. 22 00:01:18,160 --> 00:01:21,320 Contienen expresiones, pero la definición de un bloque 23 00:01:21,480 --> 00:01:24,800 no dispara la ejecución de sus expresiones. 24 00:01:24,960 --> 00:01:28,640 Por ahora, éstas expresiones no se evalúan 25 00:01:28,800 --> 00:01:31,600 Es solo si el primer operando es verdadero o falso 26 00:01:32,320 --> 00:01:35,600 que el bloque pasado como un parámetro es evaluado 27 00:01:35,760 --> 00:01:39,880 En el segundo ejemplo, Tiene false and: un bloque. 28 00:01:40,040 --> 00:01:45,440 Devuelve falso sin evaluar el bloque pasado como un parámetro. 29 00:01:45,960 --> 00:01:49,360 Es un operador perezoso típico pero construido usando bloques. 30 00:01:51,400 --> 00:01:55,160 En Pharo, los condicionales (if, false, while, etc.) 31 00:01:55,320 --> 00:01:59,160 son siempre mensajes enviados a booleanos o bloques. 32 00:02:00,080 --> 00:02:01,800 Tomemos otro ejemplo: 33 00:02:01,960 --> 00:02:06,960 el mensaje ifTrue:ifFalse:, la típica alternativa de cualquier lenguaje de programación. 34 00:02:07,120 --> 00:02:09,280 Pero en Pharo, en realidad es un mensaje: 35 00:02:09,440 --> 00:02:13,440 Puedo enviar el mensaje ifTrue:ifFalse a un objeto booleano 36 00:02:13,600 --> 00:02:16,480 Esta expresión devuelve un booleano. 37 00:02:17,840 --> 00:02:22,760 Paso dos bloques como parámetros de este mensaje: 38 00:02:22,920 --> 00:02:26,560 se evalúa un bloque si el receptor booleano es verdadero, 39 00:02:26,720 --> 00:02:29,480 el otro si el receptor es falso. 40 00:02:30,560 --> 00:02:33,200 Cuidado: el mensaje si es ifTrue:ifFalse: 41 00:02:33,360 --> 00:02:37,000 es muy utilizado por Pharo: está en el corazón del sistema. 42 00:02:37,160 --> 00:02:42,320 Es tan importante que ha sido muy optimizado 43 00:02:42,480 --> 00:02:46,480 para ser eficiente sin hacer lento a todo el sistema 44 00:02:47,800 --> 00:02:51,160 Hablemos de nuevo sobre la implementación booleana en Pharo: 45 00:02:51,320 --> 00:02:53,360 es extremadamente elegante 46 00:02:53,520 --> 00:02:59,000 los objetos true y false son ambos instancias de las clases True y False 47 00:02:59,160 --> 00:03:01,400 que heredan de la clase Boolean. 48 00:03:01,560 --> 00:03:04,760 Cada una de estas clases define un conjunto de métodos 49 00:03:04,920 --> 00:03:07,640 para devolver el comportamiento esperado. 50 00:03:07,800 --> 00:03:13,080 Le daremos más información sobre esta elegante implementación 51 00:03:13,240 --> 00:03:15,200 en una lección adicional. 52 00:03:16,640 --> 00:03:19,560 Regresando al mensaje ifTrue:ifFalse: 53 00:03:19,720 --> 00:03:23,200 hay diferentes versiones de estos mensajes 54 00:03:23,360 --> 00:03:28,040 Hay una versión con solo if True: con un bloque como parámetro 55 00:03:28,960 --> 00:03:31,760 para devolver solo la primera parte de la alternativa 56 00:03:31,920 --> 00:03:34,960 El mensaje ifTrue:ifFalse toma dos bloques 57 00:03:35,120 --> 00:03:39,480 para devolver una alternativa cuando el booleano es verdadero o falso. 58 00:03:40,520 --> 00:03:43,720 Hay varios ejemplos aquí. 59 00:03:43,880 --> 00:03:46,480 Este solo envía el mensaje ifTrue: 60 00:03:46,640 --> 00:03:49,960 con solo un bloque para ejecutar si la expresión es verdadera 61 00:03:50,120 --> 00:03:53,080 En este ejemplo, hay un bloque para ejecutar: 62 00:03:53,240 --> 00:03:55,920 este si el receptor booleano es verdadero, 63 00:03:56,080 --> 00:03:58,320 esa si es falso 64 00:04:00,960 --> 00:04:02,960 Hay dos mensajes diferentes. 65 00:04:03,120 --> 00:04:05,120 Es lo mismo con ifFalse: 66 00:04:05,280 --> 00:04:08,760 cuando se trata de las clases Boolean, True y False. 67 00:04:10,400 --> 00:04:15,560 Hay otros tipos de mensajes disponible para expresar las condiciones. 68 00:04:15,720 --> 00:04:18,360 Por ejemplo, hay ifEmpty:ifNotempty: 69 00:04:18,520 --> 00:04:20,600 que puedo enviar a una colección. 70 00:04:20,760 --> 00:04:23,920 Con ifEmpty : paso un bloque. 71 00:04:24,920 --> 00:04:29,200 El bloque se evalúa solo si el La colección del receptor está o no está vacía. 72 00:04:29,960 --> 00:04:34,480 ifNotEmpty:es la condición opuesta. 73 00:04:34,640 --> 00:04:38,240 Si la colección no está vacía, entonces ejecutas el bloque. 74 00:04:38,400 --> 00:04:40,920 Pero hay un problema adicional: 75 00:04:41,080 --> 00:04:45,080 este bloque toma un argumento como un parámetro 76 00:04:45,240 --> 00:04:47,680 que es la colección no vacía. 77 00:04:47,840 --> 00:04:51,880 La colección podría ser el resultado de un cálculo muy complejo. 78 00:04:52,040 --> 00:04:54,520 Puede consultar una vez más la coleccion 79 00:04:54,680 --> 00:04:58,600 Si la colección no está vacía, se pasa como parámetro del bloque. 80 00:04:58,760 --> 00:05:01,320 Puede ser usado en las expresiones del bloque. 81 00:05:02,160 --> 00:05:03,920 En esta sesión, 82 00:05:04,080 --> 00:05:06,800 vimos que los booleanos son objetos normales en Pharo 83 00:05:06,960 --> 00:05:10,800 y las instancias de las clases True y False que heredan de la clase Booleans. 84 00:05:10,960 --> 00:05:12,560 Puede enviarles mensajes. 85 00:05:12,720 --> 00:05:18,240 Estos mensajes definen todas las construcciones de alternativas 86 00:05:18,400 --> 00:05:21,520 o de posibles condiciones en Pharo. 87 00:05:21,680 --> 00:05:26,440 En otros idiomas, preferiría ser estructuras en el compilador.