En la lección 5 aprendiste que una función es código reutilizable que proporciona instrucciones para realizar una acción o para crear una salida basada en una entrada.
Para definir una función, necesitas tres partes fundamentales: un identificador único, el tipo de información que se espera como resultado y lo que hará la función cuando sea llamada.
Cómo definir una función
Firmas de la función
En la lección 3 aprendiste a declarar una variable o constante dándole un nombre y el tipo de valor que utilizará.
Una firma de función tiene un comportamiento de forma similar. La firma de función utiliza un identificador único para la función, junto con los parámetros que describen la entrada que necesitará y, por último, el tipo de retorno para el resultado (o salida).
Lo que hace realmente la función se define en el bloque de código.
Bloque de código
El bloque de código es el grupo de expresiones que va después de la firma de la función. Esta es la sintaxis de la función y su bloque de código:
name() : type =
codeblock
Hay varias formas de dar formato a un bloque de código. Una forma es sangrar las líneas de código después del identificador. Puedes verlo en la sintaxis de la función anterior. Más adelante aprenderás cómo configurar bloques de código, pero de momento puedes utilizar esto.
Las expresiones del bloque de código definen lo que hará realmente esa función cuando sea llamada.
Estas expresiones se ejecutarán solo cuando se llame a esa función. Cuando el programa llegue al final de ese bloque de código, estas expresiones habrán terminado (al menos hasta la próxima vez que se llame a esa función) y el programa ejecutará el siguiente trozo de código que siga a esta llamada a la función.
Cuerpo
El bloque de código también se llama cuerpo cuando define lo que hace la función.
Ámbito
Hasta ahora has aprendido lo siguiente:
- Una función tiene un identificador único que se utiliza para activarla y que haga algo en el programa.
- Lo que hace una función se basa en las expresiones del cuerpo de la función.
- Cuando termina la última línea de código del cuerpo, finaliza la llamada a la función, y el programa pasa a la siguiente línea de código después de la llamada a la función que haya en el programa.
Las instrucciones de esa función y los valores que salen de ella determinan el ámbito de la función.
Es hora de volver a las expresiones que puedes utilizar para definir la función. Puedes crear constantes y variables (¿las recuerdas de la lección 3 y añadirlas al cuerpo de la función.
Cuando colocas una variable en el cuerpo, es local al ámbito de la función. Local, en este sentido, significa que este código reside y funciona solo en ese cuerpo, y solo cuando se llama a la función.
Entonces, ¿qué es el ámbito? Es la asociación del nombre de la función al valor producido por la función. Ese valor solo puede utilizarse dentro del bloque de código donde se crea, o dentro de ese ámbito.
Instanciación
Una instancia es una aplicación única de esa función cuando se llama y se ejecuta. La creación de esta instancia es la instanciación. Ten en cuenta que tanto instancia como instanciación están relacionadas con la palabra instante, que significa un lapso de tiempo muy breve.
Y esto trae a colación el concepto de duración.
Duración
Una instancia tiene una duración: un principio, un punto intermedio y un final.
Esto significa que la duración de lo que hay en ese cuerpo de función está limitada al ámbito del cuerpo, y no puedes acceder a las variables locales (las limitadas a este ámbito actual) fuera del ámbito.
Condicionales
El siguiente ejemplo muestra cómo calcular el número máximo de ratoneras que un jugador puede comprar con el número de monedas que tiene.
La constante MousetrapsYouCanBuy se crea dentro del bloque if, y su ámbito se limita al bloque if.
Cuando se utiliza la constante MaxMoustrapsYouCanBuy fuera del bloque de código if, se produce un error porque el nombre MaxMoustrapsYouCanBuy no existe fuera del ámbito. Verás un mensaje de error: Identificador desconocido. Esto significa que MaxMousetrapsYouCanBuy solo es válido dentro de ese ámbito.
Cuando la expresión finaliza, las constantes locales y las variables locales creadas en el cuerpo dejan de existir. Han llegado al final de su duración.
Piensa en el ámbito como un pequeño trozo de código donde las cosas funcionan hasta que terminan.
Sintaxis de las funciones
Veamos de nuevo la sintaxis de la función, pero esta vez un poco más en profundidad.
name() : type =
codeblock
nombre() : tipo = |
Esta es la firma de la función. Es el La firma de la función incluye el tipo de entrada que se utilizará. El valor que devuelve la función (lo que viene después del |
bloque de código |
El bloque de código de la función, o cuerpo, es donde añades constantes, variables u otras expresiones para mostrar lo que hará la función cuando sea llamada. |
Por ejemplo, una función para pagar una ratonera podría tener este aspecto:
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
set Coins = Coins - CoinsPerMousetrap
Print("¡Ratonera comprada! Te quedan {Coins} monedas.")
Las reglas y convenciones de nomenclatura para los nombres de las funciones son los mismos que utilizarías para las variables y las constantes. Puesto que las funciones realizan una secuencia de acciones, es una práctica recomendada nombrarlas de forma que reflejen las acciones que realizan, como BuyMousetrap().
Void
Puede que te hayas dado cuenta de que hay un void en la firma de la función BuyMousetrap(). El tipo void para una función significa que su llamada no devolverá nada. Aprenderás más sobre qué es el 'void' y cómo utilizarlo en la próxima lección.
No te repitas
Un principio importante de la programación es No te repitas.
Esto significa que si repites una línea de código tres veces o más, deberías plantearte escribirla de otra forma. Y sí, ¡hay una razón para ello!
Cuantas más líneas de código escribas, más difícil será mantener ese código y más probable será que acabes teniendo errores cuando, inevitablemente, cambies el código en un sitio pero no en otro.
Las funciones, al igual que las constantes, son una forma de no repetir código cuando no lo necesitas, por lo que las funciones no solo te ahorran duplicar código, sino que también reducen el mantenimiento y disminuyen la probabilidad de que se produzcan errores en el código.
Presta atención a las mayúsculas cuando escribas código, tanto en la forma de nombrar tus expresiones y funciones, como cuando utilices palabras clave y funciones incorporadas. Verse distingue entre mayúsculas y minúsculas, y los errores en el uso correcto y coherente de las mayúsculas pueden provocar fallos y errores de compilación.
Resumen
- Una función es código reutilizable que proporciona instrucciones para realizar una acción o crear una salida basada en una entrada.
- Las funciones necesitan tres partes: un identificador, un tipo y un bloque de código que contiene cuál será el resultado de la función al ser llamada.
- Las funciones se llaman por sus firmas de función.
- Un bloque de código también se llama cuerpo cuando define lo que hace la función.
- Ámbito se refiere al valor asociado a la función, que, a su vez, está definido por el contenido del bloque de código.
- El código contenido en un bloque de código es local a ese ámbito.
- Duración es el tiempo que dura el ámbito.
- No te repitas.