En este curso, estudiaremos Booleanos y condiciones en Pharo.
Hay dos objetos booleanos: verdadero y falso.
true es la única instancia de la clase Verdadero.
false es la única instancia de la clase Falso.
Enviaremos mensajes a estos objetos. para establecer operaciones booleanas
o estructuras alternativas como ifTrue:IfFalse:, etc.
Estudiaremos esto.
En el primer ejemplo de esta diapositiva,
envias el mensaje & un operador binario,
al objeto falso
Le pasa un parámetro, que es todo esto
Es una expresión entre paréntesis, (1 error:'crazy').
Esta expresión desencadena un error.
Puede ver la evaluación de esto Toda la expresión desencadena un error.
¿Por qué? Porque el operando también ha sido evaluado
en esta expresión booleana.
El operando ha sido evaluado, de ahí el error.
Si quiere obtener la versión perezosa de los operadores booleanos,
debe usar el método and: de la clase booleana.
Este método toma un bloque como un parámetro
Los bloques comienzan con [ y terminan con ].
Contienen expresiones, pero la definición de un bloque
no dispara la ejecución de sus expresiones.
Por ahora, éstas expresiones no se evalúan
Es solo si el primer operando es verdadero o falso
que el bloque pasado como un parámetro es evaluado
En el segundo ejemplo, Tiene false and: un bloque.
Devuelve falso sin evaluar el bloque pasado como un parámetro.
Es un operador perezoso típico pero construido usando bloques.
En Pharo, los condicionales (if, false, while, etc.)
son siempre mensajes enviados a booleanos o bloques.
Tomemos otro ejemplo:
el mensaje ifTrue:ifFalse:, la típica alternativa de cualquier lenguaje de programación.
Pero en Pharo, en realidad es un mensaje:
Puedo enviar el mensaje ifTrue:ifFalse a un objeto booleano
Esta expresión devuelve un booleano.
Paso dos bloques como parámetros de este mensaje:
se evalúa un bloque si el receptor booleano es verdadero,
el otro si el receptor es falso.
Cuidado: el mensaje si es ifTrue:ifFalse:
es muy utilizado por Pharo: está en el corazón del sistema.
Es tan importante que ha sido muy optimizado
para ser eficiente sin hacer lento a todo el sistema
Hablemos de nuevo sobre la implementación booleana en Pharo:
es extremadamente elegante
los objetos true y false son ambos instancias de las clases True y False
que heredan de la clase Boolean.
Cada una de estas clases define un conjunto de métodos
para devolver el comportamiento esperado.
Le daremos más información sobre esta elegante implementación
en una lección adicional.
Regresando al mensaje ifTrue:ifFalse:
hay diferentes versiones de estos mensajes
Hay una versión con solo if True: con un bloque como parámetro
para devolver solo la primera parte de la alternativa
El mensaje ifTrue:ifFalse toma dos bloques
para devolver una alternativa cuando el booleano es verdadero o falso.
Hay varios ejemplos aquí.
Este solo envía el mensaje ifTrue:
con solo un bloque para ejecutar si la expresión es verdadera
En este ejemplo, hay un bloque para ejecutar:
este si el receptor booleano es verdadero,
esa si es falso
Hay dos mensajes diferentes.
Es lo mismo con ifFalse:
cuando se trata de las clases Boolean, True y False.
Hay otros tipos de mensajes disponible para expresar las condiciones.
Por ejemplo, hay ifEmpty:ifNotempty:
que puedo enviar a una colección.
Con ifEmpty : paso un bloque.
El bloque se evalúa solo si el La colección del receptor está o no está vacía.
ifNotEmpty:es la condición opuesta.
Si la colección no está vacía, entonces ejecutas el bloque.
Pero hay un problema adicional:
este bloque toma un argumento como un parámetro
que es la colección no vacía.
La colección podría ser el resultado de un cálculo muy complejo.
Puede consultar una vez más la coleccion
Si la colección no está vacía, se pasa como parámetro del bloque.
Puede ser usado en las expresiones del bloque.
En esta sesión,
vimos que los booleanos son objetos normales en Pharo
y las instancias de las clases True y False que heredan de la clase Booleans.
Puede enviarles mensajes.
Estos mensajes definen todas las construcciones de alternativas
o de posibles condiciones en Pharo.
En otros idiomas, preferiría ser estructuras en el compilador.