Paso de mensajes y funciones

Tanto en MetaCard, como en Revolution, como ya habrá comprobado, las cosas no suceden hasta que llega un evento que las desencadene: bien sea del sistema (como una pulsación de un botón del ratón, una tecla que ha sido pulsada o liberada, redimensionar una ventana, que haya pasado una cantidad de tiempo, ...), bien sea uno que nos inventemos el nombre y que generemos con la orden send. En cualquier caso al objeto al que le llega este evento, reaccionará ante él si en su código está hacerlo, esto es, si dispone de un manejador para ese evento. Por ejemplo el ya consabido "cuando se pulse un botón del ratón" como se muestra a continuación:

on mouseUp quinPulsat
 put "S'ha pulsat el botó" && quinPulsat
end mouseUp
                     

En el ejemplo mostrado se puede ver que se ha dado nombre a un parámetro que recibe el manejador. Como no es obligatorio y generalmente no lo usuamos, igual no se había dado cuenta el lector de este hecho: se pueden pasar parámetros a un evento. También hemos hablado de la propagación de esos eventos que no son manejados: existe una jerarquía, un camino o unas reglas que regulan esta "circulación".

Si ha de utilizar un evento con más de un parámetro, habrá de pasar estos al manejador separados con comas, como se muestra en el ejemplo siguiente:

on concatenaCadenas a b
 put a & b
end concatenaCadenas

on mouseUp
 send concatenaCadenas && "cadena1" & "," & "cadena2" to me
end mouseUp
                   

A diferencia de aquellos, una función (function) tienen una sintáxis ligeramente diferente, pero sobre todo se diferencia en su semántica: se ejecuta y devuelve un valor; que se recoje si se quiere, claro. Así que apareceren en una evaluación o expresión, aunque podrían aparecer como una orden:

function calculaLaMedia x y
  return "((" & x & "*" & y & ") / 2)"
end factorial

on mouseUp
 put calculaLaMedia(2, 4)
end mouseUp
                     

El ejemplo anterior muestra un manejador del evento mouseUp que llama a una función. Esta, recibe dos parámetros numéricos y devuelve uno alfabético. Aunque no sea muy útil ese código de "calculaLaMmedia" quiere ilustrar las posibilidades de una función; y ahí tiene algunas.