La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

IfTrue- ifFalse Sea el mensaje: ifTrue: bloque1 ifFalse: bloque2 enviado tanto para true como para false, donde las variables bloque1 y bloque2 son bloques.

Presentaciones similares


Presentación del tema: "IfTrue- ifFalse Sea el mensaje: ifTrue: bloque1 ifFalse: bloque2 enviado tanto para true como para false, donde las variables bloque1 y bloque2 son bloques."— Transcripción de la presentación:

1 ifTrue- ifFalse Sea el mensaje: ifTrue: bloque1 ifFalse: bloque2 enviado tanto para true como para false, donde las variables bloque1 y bloque2 son bloques. Cuando el objeto true recibe ese mensaje, le envía al primer argumento (bloque1) el mensaje value, provocando la ejecución de sus expresiones. Cuando false recibe ese mensaje, le envía el mensaje value al segundo argumento, provocando la ejecución de las expresiones de bloque2. Eso es posible, gracias al mecanismo de polimorfismo, donde el misma mensaje recebido por objetos de clases diferentes, puede provocar efectos diferentes.

2 ifTrue- ifFalse (número \\ 2) = 0 ifTrue: [paridad := 'par'] ifFalse:[paridad := 'impar'] paridad := número \\ 2 = 0 ifTrue: ['par'] ifFalse: ['impar']

3 ifTrue- ifFalse Cuando sólo se desea testear a veracidad o a falsedad de una condición, pueden ser usados los mensajes con un único argumento, ifTrue: o ifFalse:. El mensaje: ifTrue: Bloque es equivalente al mensaje ifTrue: Bloque ifFalse: [ ] De la misma forma, el mensaje: ifFalse: Bloque es equivalente al mensaje ifTrue: [ ] ifFalse: Bloque

4 timesRepeat Para repetir un número determinado de veces una secuencia de expresiones, el mecanismo usado en Smalltalk consiste en enviar a un entero, cuyo valor es el número deseado de repeticiones, el mensaje timesRepeat:, donde el argumento es un Bloque que contiene a secuencia de expresiones a repetir. Al recibir el mensaje, el entero responde enviando al Bloque un número de mensajes value sucesivos igual a su propio valor. Por ejemplo, la expresión siguiente:

5 timesRepeat 3 timesRepeat: [n := n * n] hace que el valor de n sea elevado a la cuarta potencia.

6 whileTrue - whileFalse Repetición condicional mediante el mensaje whileTrue: (o whileFalse:) a otro bloque, cuyo valor retornado debe ser un Booleano. El argumento del mensaje es el bloque que contiene a secuencia de expresiones a ser repetida. Cuando un bloque recibe el mensaje whileTrue:, se envía a sí mismo el mensaje value. En el caso que la respuesta sea true, se envía el mensaje value al Bloque argumento, y se vuelve a enviar a sí mismo el mensaje value, reiniciando el ciclo. En el caso que la respuesta sea false, el proceso termina.

7 whileTrue - whileFalse Por ejemplo, para hacer que todos los elementos de un Array de nombre lista, tengan el valor 0, puede ser usada la siguiente secuencia: i := 1. [i <= lista size] whileTrue: [lista at: i put: 0. i := i + 1] El mensaje whileFalse: produce el efecto inverso, haciendo que las expresiones del bloque argumento sean repetidas cuando el valor del receptor sea igual a false.

8 Ejemplo- Calcular Potencia potencia: exponente "responde con el valor del receptor elevado a la potencia dada por el exponente" |result| result := 1. exponente timesRepeat: [result := self * result]. ^ result Evaluación 5 potencia: 2 retornará el valor 25.

9 Métodos Recursivos factorial self = 0 ifTrue: [^1]. self < 0 ifTrue: [self error: 'receptor no debe ser negativo'] ifFalse: [^self * (self - 1) factorial]

10 Expresiones de Mensaje 15 + list size es equivalente a 15 + (list size) * 4 max:10 es equivalente a ( (3 + 2) * 4) max:10 r1 s1: a s2: b s3: c es interpretada como un mensaje del objeto r1 con seletor s1:s2:s3: y argumentos a, b y c.

11 Expresiones de Mensaje r1 s1: (a s2: b s3: c) es interpretada como un mensaje a r1 con seletor s1: y con argumento igual al objeto resultante del mensaje al objeto a con seletor s2:s3: y argumentos b y c. (r1 s1: a) s2: b s3: c es interpretada como un mensaje al objeto resultante del mensaje r1 s1: a, con seletor s2:s3: y argumentos b y c.

12 Expresiones de Mensaje list size + 5 * max: limite sqrt Equivalente a: ((((list size) + 5) * 10) - 50) max: (limite sqrt) (((3 + 5) * 10) - 50) max: (100 sqrt) (((3 + 5) * 10) - 50) max: 10 ((8 * 10) - 50) max: 10 ( )max: max: 10 30


Descargar ppt "IfTrue- ifFalse Sea el mensaje: ifTrue: bloque1 ifFalse: bloque2 enviado tanto para true como para false, donde las variables bloque1 y bloque2 son bloques."

Presentaciones similares


Anuncios Google