Las funciones pueden realizar acciones. Algo que una función puede hacer es devolver un valor cuando la llamas. Este valor es el resultado.
Por ejemplo, cuando llamas a GetRandomInt(1, 10), esperas obtener un número entero aleatorio entre 1 y 10.
Para cambiar el tipo de valor que deseas de tu función, deberías cambiar el tipo en la firma de función. Por ejemplo:
GetNumberOfMousetrapsYouCanAfford() : int
En este ejemplo, GetNumberOfMousetrapsYouCanAfford() tiene el tipo de valor devuelto int, por lo que cada vez que llames a GetNumberOfMousetrapsYouCanAfford() en el código, puedes esperar que devuelva un entero.
GetNumberOfMousetrapsYouCanAfford() : float
Por otro lado, si cambiaste el tipo a float, devolvería un tipo distinto de valor.
Cuando la función tiene especificado un tipo de devolución, el cuerpo de la función (bloque de código) tiene que producir un resultado que coincida con ese tipo. Si eso no sucede, el código no se compilará, lo cual significa que existe un error del compilador. ¿Estás listo para saber cómo evitarlo?
Resultados y devoluciones
El resultado es el valor que devuelve una función cuando se ejecuta.
En la lección 2, se abordaron las palabras clave, que son palabras especiales integradas en Verse que tienen acciones muy específicas asociadas.
En Verse, return también es una palabra clave mediante la cual se le indica a una función que brinde el valor que da como resultado la expresión que sigue a la palabra clave return.
MyFunction() : int =
return 5
OnBegin<override>()<suspend> : void =
MyFunction() # result is 5
En el ejemplo anterior, este código devolverá un valor de 5 cuando se llame a MyFunction().
Si se omite return, no se interrumpirá la función, pero es una buena práctica incluir explícitamente return. Si deseas saber más sobre esto, consulta Funciones.
Early returns
Cuando el programa ejecuta una expresión return, el programa saldrá del bloque de código de función de inmediato. Esto significa que si colocas la expresión return antes de otro código, el código que sigue no se ejecutará. Esto puede ser útil para salir de una función con anticipación cuando se cumple una condición especificada.
La siguiente función actualiza la variable Coins en función de CoinsPerMouseTrap. Sin embargo, la variable Coins debe establecerse en un valor positivo para comprar una ratonera. Si la variable Coins es negativa, la función imprime un mensaje de error e inmediatamente devuelve, porque no hay razón para ejecutar el resto del código en el cuerpo de la función.
De hecho, sin return, la función disminuiría de forma incorrecta el valor de Coins y nunca indicaría que la variable Coins era negativa.
var Coins : int = -10
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
Print(“Mousetrap bought! You have {Coins} coins left.”)
Salir de una función antes de tiempo con return puede generar errores, por lo que es importante usarla con cuidado. Por ejemplo, como return se ejecutará antes que Print(“¡Compraste la ratonera! Te quedan {Coins} monedas.”) en el siguiente código, la función nunca imprimirá el nuevo valor de Coins.
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
return
Print("Mousetrap bought! You have {Coins} coins left.")
Si tienes un valor return temprano en tu código, tu código igual se compilará, pero Visual Studio Code te advertirá que las expresiones después de return no se ejecutarán.
Nulo para las funciones sin un resultado útil
A veces deseas un resultado; otras veces, no.
Si recuerdas los tipos de la lección 2, es posible que también recuerdes que cada tipo necesita una clase particular de valor. A continuación, se proporciona una lista muy breve. Verse usa muchos tipos, pero estos son los más comunes y la base para usar variables y constantes.
| Type | Para qué sirve | Valores |
|---|---|---|
| Este tipo de valor solo puede ser true o false. | true/false |
| Un entero es un número entero (no una fracción), e | Números enteros |
| Este tipo es para valores que no son enteros, como las fracciones. | Números con puntos decimales |
| Este tipo es para cualquier tipo de texto. Pueden ser letras, números, puntuación, espacios e incluso emoticonos. 😻 | Letras, números, puntuación, espacios o emojis |
Al crear una función que no requiere generar un resultado, puedes establecer el tipo de devolución de la función como void.
Esto significa que la última expresión del bloque de código puede producir un resultado de cualquier tipo sin generar un error de compilación porque el tipo de la función se estableció en void.
Aún puedes usar la palabra clave return para funciones que tienen un tipo void, solo que no tienes que facilitar un valor con la palabra clave return.
Resumen
El resultado es lo que obtienes de una función cuando la llamas.
En un bloque de código, la última expresión producirá el resultado.
Para cambiar el tipo de valor en una función, deberías cambiar el tipo en la firma de función.
Return es una palabra clave que le indica a la función que brinde el valor que da como resultado la expresión que le sigue.
Un early return es cuando la palabra clave return se usa en un bloque de código antes del final del bloque. Esto provocará que el programa se cierre en ese bloque de código inmediatamente, sin ejecutar el resto del código en el bloque.
Void es un tipo que dice que el valor de la función no se usará en ningún otro lugar. O tal vez dice que simplemente no vale la pena. Puedes usar void como el tipo para una función que no necesita producir un resultado.