¿Qué diablos es una función? ActionScript 3.0
Funciones
Las funciones en AS3.0 tienen nuevas características
importantes para la programación orientada a objetos. En general tenemos
en ActionScript tres tipos de funciones: Funciones globales, métodos (o
funciones relacionadas a un objeto) y funciones hechas por el usuario.
Las funciones las podríamos definir como grupos de
sentencias que tienen un fin específico. Pueden o no regresar un valor.
También podemos mandarles valores a las mismas (llamados argumentos o
parámetros), pero también tendremos funciones sin parámetros.
Funciones globales
Las funciones globales están incorporadas a Flash, y pueden
ser llamadas en cualquier parte del programa Por ejemplo, la función
trace(), se puede utilizar en cualquier sin definir un objeto y en
cualquier momento. Otras funciones globales son las puede consultar en
la ayuda del paquete.
Métodos
Los métodos son funciones que están asociadas a una clase.
Existen métodos, de las clases predefinidas, en que los utilizamos por
medio de la notación punto, por ejemplo:
Math.random()
En la programación orientada a objetos, y por lo tanto en
AS3.0, es muy común que el programador genere sus propios métodos,
añadiendo funciones a las clases hechas por el usuario. De hecho al
hacer un constructor, estamos escribiendo una función.
Funciones personalizadas
Aunque en AS3.0 los usuarios también hacen funciones dentro
de clases, llamaremos funciones personalizadas aquellas que se definen
fuera de la clase. Dentro del paquete las llaman
function clausures o
cierre de función.
Llamado o invocación de una función
Para llamar a una función se utiliza su identificador,
seguido de los paréntesis. Si la función requiere de parámetros o de
argumentos, estos van dentro de los paréntesis, divididos por comas. Por
ejemplo, nuestra ya conocida función global trace() requiere de un
parámetro:
trace(“Hola Mundo”);
Existen parámetros que son requeridos y otros que son
opcionales. Por ejemplo, si escribe una función trace() sin argumentos,
el compilador le enviará un mensaje de error.
Si la función no requiere parámetros, con escribir los
paréntesis vacíos es suficiente. De hecho, si una función global no
requiere argumentos, puede escribirla sin paréntesis, pero a esto se le
considera una mala práctica de programación.
Funciones de usuario
Existen dos formas de definir una función en ActionScript
3.0: por una sentencia de función o por una expresión de función. Las
características de las mismas se presentan a continuación:
Función tipo sentencia
Este estilo de codificar funciones (también conocido
extraoficialmente como codificación estilo Flash 5, porque en aquellos
lejanos tiempos era la única forma) son la forma más adecuada de definir
variables cuando se trabaja en con el compilador en modo estricto.
Este modo tiene la siguiente sintaxis:
function
nombreFuncion(arg1, arg2,…){
}
Primero va la palabra reservada
function, seguido
del identificador de la función. Entre paréntesis van los argumentos (si
existen), y después las llaves, que forman el cuerpo de la función.
Funciones tipo expresiones
También conocida como función literal o anónima.
Extraoficialmente se le conoce como tipo de codificación Flash MX,
porque en esta versión apareció.
Su sintaxis es:
var nombreFunción:Function = function (arg1, arg2,…){
}
Nota: En general debe considerarse usar las funciones de
sentencia, pues son más fáciles de leer y el compilador detecta de mejor
manera cualquier problema que se encuentre en ellas. Las funciones de
sentencia (tipo Flash 5) existen en todo el ámbito en que están
definidas. Las funciones de expresión deben ser definidas antes de ser
utilizadas.
Funciones que regresan valores
Para regresar un valor de una función, al igual que las versiones anteriores de AS, utilizamos la palabra reservada
return. Todas las sentencias que se encuentren debajo del
return
ya no son procesadas, pues con esta sentencia termina la función. En el
modo estricto del compilador, la función debe de regresar el mismo tipo
de dato con la cual fue definida, por ejemplo:
function cuadrado(num:int):int {
return num*num;
}
Para indicarle al compilador el tipo de dato de regreso, se
debe escribir el signo de dos puntos (:) entre el paréntesis que cierra
los argumentos y la llave que abre el cuerpo de la función. Los tipos
deben de ser los mismos que los tipos de datos ya revisados.
Si la función no regresa ningún valor, y quiere que el
compilador en modo estricto lo detecte, debe utilizar la palabra
reservada
void. A diferencia que en las versiones anteriores, la palabra
void se escribe toda en minúsculas.
Funciones anidadas
Es posible anidar funciones, es decir, poner una o más
funciones dentro de otra. Las funciones anidadas no van a poder ser
acezadas fuera de la función que las contiene, a menos que sean llamadas
por “referencia”, término que analizaremos más adelante.
Ejercicio
- Abra un archivo Flash ActionScript 3.0 y guárdelo como funciones.fla en su carpeta de trabajo.
- Abra un archivo ActionScript y guárdelo como Funciones.as en la carpeta misClases.
- Ligue a ambos archivos en el campo Document Class.
- Asegúrese de que se encuentra e modo estricto del compilador.
- En el archivo de clase escriba el siguiente guión:
package misClases{
import flash.display.Sprite;
public class Funciones extends Sprite {
public function Funciones() {
trace(junta("tuNombre","tuApellido"));
}
public function junta(arg1:String,arg2:String):String {
function nombre(arg3:String):String {
return arg3;
}
public apellido(arg4:String):String {
return arg4;
}
return nombre(arg1) +" "+apellido(arg2);
}
}
}
- Ahora intente llamar a la función apellido() desde la función constructora. El compilador deberá enviarle un mensaje de error.