Hola.
Hoy revisaremos La implementación de ifTrue:ifFalse:
Si has estado atento y estoy seguro de que lo tienes,
seguramente te has dado cuenta que cuando sugerí ejemplos para No,
Dije que podrías implementar No, o y si es cierto:ifFalse:
Pero en la solución, Nunca mencioné si es cierto:ifFalse:
Solucionaremos este problema ahora.
En efecto, en Pharo, Las condiciones son mensajes.
Aquí hay un ejemplo.
Tenemos una clase de clima: "El clima está resonando".
Esto significa que si llueve ...
Si es verdad, tomaré mi paraguas.
Si es falso, tomaré mis gafas de sol.
Con ifTrue:ifFalse:
Ves los dos puntos? Esto significa que son mensajes de palabra clave.
El mensaje ifTrue:ifFalse: es un mensaje de palabra clave
y se envía a una instancia booleana.
En realidad, está muy optimizado por el compilador y no realmente enviado,
pero conceptualmente lo es.
Entonces, si quieres redefinir el método ifTrue:
iffalse:
Puedes hacer esto en Pharo.
Explicaré la técnica ahora.
El ifTrue:ifFalse: el método es tan importante
y lo necesitamos para ir tan rápido,
que la función en realidad no se invoca
El compilador hace saltos en línea en su lugar.
Pero para el propósito de esta clase, veremos cómo funciona.
te quiero para proponer una implementación.
Sabes sobre bloques
Sabes lo que hicimos Verdadero y falso,
y con Or y no.
Puedes hacerlo con ifTrue:ifFalse:
En resumen, si mi receptor es falso, Yo regreso 5
Y si mi receptor es cierto, Yo regreso 3
Una vez más, tenemos objetos, mensajes y bloques.
Es un poco repetitivo, pero así es como es.
Recuerda que los paréntesis ...
congelar la ejecución
de la expresión que contienen,
y ese "valor" patea la ejecución de un código congelado.
Con esto, y no y o,
deberías poder para implementar sus condiciones.
Del mismo modo, deberías ser capaz de implementar ifTrue:ifFalse:
Te daré unos segundos para pensar.
¿Cómo se implementa?
Exactamente de la misma manera como Or y no.
En la clase verdadera, Tengo un método llamado
ifTrue:ifFalse:y dos argumentos.
Un bloque para verdadero y un bloque para False.
¿Qué debo hacer?
Cuando estoy en el bloque True, Ejecuto cierto
Y cuando estoy en la clase Falsa,
Tengo el mismo método con los mismos dos argumentos,
pero como estoy en la clase Falsa, Ejecuto el bloque falso.
Tengo la implementación de los booleanos.
¿Como funciona?
Me gusta esto.
Cuando envío un mensaje a mi booleano,
que de hecho es cierto,
Envío si es verdad:hacer algo cierto o hacer algo falso.
Luego busco si es verdad:ifFalse: en la clase verdadera,
Esta aqui
Dice que para ejecutar el bloque verdadero, asi que lo hago
Ahora envío el mensaje "B es un booleano:falso".
Envío el mensaje y miro aquí. Encuentro ifTrue:ifFalse:
Dice para ejecutar el bloque falso, y eso es lo que hago
No puedes probar esto poniendo un punto de ruptura en ifTrue:ifFalse:
Está optimizado y el sistema no lo aceptará.
Pero lo que sí sugiero que intente, se implementa de la misma manera:
ifFalse:o si verdad:
ifTrue:un bloque 1,
y ifFalse:un bloque 2. Luego implementalas.
Use un punto de interrupción y experimente.
Entonces, ¿qué hemos mostrado? con este ejemplo
Vimos que enviar un mensaje selecciona el método correcto.
Aquí decidimos para que el receptor decida su comportamiento.
Y vimos que los paréntesis congelación de cómputo,
y ese "valor" obliga a la ejecución de un código congelado.