miércoles, 18 de abril de 2012

Programando VI – ActionScript 3: Funciones

Si amigos y amigas, ya sabemos todas las sentencias necesarias para dirigir el flujo de nuestro programa. Ahora queremos que vaya por un lado, luego que se repita 3 veces, si se cumple una condición que no hagas eso… ¿Pero como organizamos más el código? ¿Cómo nos repartimos las tareas con otros programadores? Pues, antes de meternos en cosas más chungas como la Programación Orientada a Objetos (aunque ya vamos a tener que ir pegandonos con ella sin darnos cuenta), vamos a ver como partir nuestro programa en trozos más sencillos usando funciones.

Las funciones encierran el código que necesitemos en su interior y no se ejecutan hasta que son “llamadas”. Gracias a ellas, podemos tener una serie de instrucciones y que se ejecuten cuando, por ejemplo, pulsemos un botón. Así, asociamos ese código dentro de la función a las acciones del botón y la diferenciamos del resto del programa como un simple fragmento del mismo.

Veamos como funcionan:

Declarar una función se hace así:

function nombrefuncion (parametros){
     sentencias;
}


Los parámetros son “variables”que se pasan al llamar a la función para que puedan operarse con ellas o sus valores. Realmente no es necesario pasar parámetros en muchas ocasiones, pero aun así los parentesis siempre deben aparecer.

¿Cómo se llama a la función?

Con su nombre y los parámetros que esta pida.

nombrefuncion(parametros);

Vamos a ver un ejemplo de todo esto a ver si lo entendemos mejor:

var texto1:String="Hola"
var texto2:String=", "

encadena(texto1, texto2);

function encadena(texto1:String, texto2:String){
     var texto3:String="bienvenidos aprendices de AS3";
     trace (texto1+texto2+texto3);
}


La salida de este programa sería la siguiente:


Es decir, tenemos dos variables texto1 y texto2 de tipo String (cadenas de letras) y se las pasamos a la función encadena para que las junte con otra que tiene en su interior. Al ser llamada, el ordenador “empieza a leer” (no es exactamente así, pero es para que nos entendamos) dentro de la función y ejecuta las sentencias que allí va encontrando. Como el operador + “suma” las variables y estas son de tipo “texto” simplemente lo que hace es juntar unas cadenas con otras.

Pero ahora viene la parte dificil de verdad (para mí quiero decir) y es que hay que comprender algo muy importante sobre el paso de parámetros a una función. La diferencia entre pasar por valor y pasar por referencia.

Paso por valor: Es lo que ocurre en el ejemplo y consiste en que se pasa a la función, no las variables en sí, si no su valor, que se asocia luego a variables dentro de la propia función que son solo una copia. Es decir, las variables fuera de la función y las de dentro no son la misma, solo su valor al llamarse a la función. Si el valor de las variables dentro de la función cambiara, no lo haría el de las de fuera.

Lo entenderemos mejor si hacemos el mismo programa pero llamamos de forma distinta a las variables en la función y fuera.

var texto1:String="Hola"
var texto2:String=", "

encadena(texto1, texto2);

function encadena(tex1:String, tex2:String){
     var tex3:String="bienvenidos aprendices de AS3";
     trace (tex1+tex2+tex);
}


Y la salida del programa sería el mismo.

Paso por referencia: Esta vez no se copia, es realmente como si fueran las mismas variables las dos, ya que lo que se hace es apuntar a una dirección de memoria. Veamos, pensemos que tenemos un cajon en un mueble y en el hay un contenido, ponemos una variable que nos indica el contenido de ese cajón y a otra, le pasamos esta variable por referencia. Entonces esta nueva variable también indicará el contenido del cajón, por lo que si variamos ese contenido, varía en ambas variables. Ambas variables cambian su valor por que estan apuntando al contenido de la misma dirección de memoria (o el mismo cajón).

Este suele ser el caso cuando pasamos objetos o matrices. Pero todo esto ya lo veremos mejor más adelante. No preocuparse, que aún no sabemos lo que son ni los objetos ni las matrices… (Bueno yo si :P).

No hay comentarios:

Publicar un comentario