Funções podem executar ações. Uma coisa que uma função pode fazer é retornar um valor quando você a chama. Esse valor é o resultado.
Por exemplo, ao chamar GetRandomInt(1, 10), você espera obter um número inteiro aleatório entre 1 e 10.
Para alterar o tipo de valor que você deseja da sua função, modifique o tipo na assinatura da função. Por exemplo:
GetNumberOfMousetrapsYouCanAfford() : int
Neste exemplo, GetNumberOfMousetrapsYouCanAfford() tem o tipo de retorno int. Portanto, sempre que você chama GetNumberOfMousetrapsYouCanAfford() no seu código, você pode esperar que ele retorne um número inteiro.
GetNumberOfMousetrapsYouCanAfford() : float
Por outro lado, se você mudasse o tipo para float, retornaria um tipo diferente de valor.
Quando sua função tem um tipo de retorno especificado, o corpo da função (bloco de código) precisa produzir um resultado que corresponda a esse tipo. Caso contrário, o código não será compilado, o que significa que você tem um erro no compilador. Pronto para aprender a evitar isso?
Resultados e retornos
O resultado é o valor que uma função retorna quando é executada.
A Aula 2 explicou palavras-chave, palavras especiais incorporadas ao Verse e que têm ações muito específicas associadas a elas.
No Verse, return também é uma palavra-chave que instrui uma função a fornecer o valor resultante da expressão que segue a palavra-chave return.
MyFunction() : int =
return 5
OnBegin<override>()<suspend> : void =
MyFunction() # result is 5
No exemplo acima, este código retornará (return) um valor de 5 quando MyFunction() for chamado.
Deixar return de fora não interromperá sua função, mas é uma boa prática incluí-lo explicitamente. Se você quiser saber mais sobre isso, consulte Funções.
Retornos antecipados
Quando seu programa executa uma expressão return, o programa sai do bloco de código da função imediatamente. Isso significa que se você colocar a expressão return antes de outro código, o código seguinte não será executado. Isso pode ser útil para sair de uma função antecipadamente quando uma condição especificada é atendida.
A função a seguir atualiza a variável Coins com base em CoinsPerMouseTrap. No entanto, a variável Coins deve ser definida com um valor positivo para comprar uma ratoeira. Se Coins for negativa, a função imprimirá uma mensagem de erro e retornará imediatamente, porque não há razão para executar o restante do código no corpo da função.
Na verdade, sem retorno, a função diminuiria incorretamente o valor de Coins e nunca indicaria que Coins era negativo.
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.”)
Sair de uma função mais cedo com return pode introduzir bugs e, por isso, é importante usá-la com cautela. Por exemplo, já que return será executada antes de Print (“Ratoeira comprada! Você tem {Coins} moedas restantes.”) no código a seguir, a função nunca imprimirá o novo 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.")
Se você tiver uma expressão return antecipada no seu código, este ainda será compilado, mas o Visual Studio Code avisará que as expressões após return não serão executadas.
Void para funções sem um resultado útil
Às vezes você quer um resultado, outras vezes não.
Se você se lembra de tipos na Aula 2, talvez também se lembre de que cada tipo precisa de um determinado tipo de valor. A lista abaixo é muito curta. O Verse usa muitos tipos, mas estes são os mais comuns e são a base para o uso de variáveis e constantes.
| Tipo | O que ele faz | Valores |
|---|---|---|
| Esse tipo de valor só pode ser verdadeiro ou falso. | true / false |
| Um inteiro é um número inteiro (e não uma fração), e | Números inteiros |
| Esse tipo é para valores que não são números inteiros, como frações. | Números com pontos decimais |
| Esse tipo é para qualquer tipo de texto. Pode ser letras, números, pontuação, espaço e até mesmo emoji. 😻 | Letras, números, pontuação, espaços, emojis |
Ao criar uma função que não precisa produzir um resultado, você pode definir o tipo de retorno da função como void.
Isso significa que a última expressão no bloco de código pode produzir um resultado de qualquer tipo sem gerar um erro do compilador porque o tipo da função é definido como void.
Você ainda pode usar a palavra-chave return para funções que possuem um tipo void — você apenas não precisa fornecer um valor com a palavra-chave return.
Resumo
O resultado é o que você recebe de volta de uma função ao chamá-la.
Em um bloco de código, a última expressão produzirá o resultado.
Para alterar o tipo de valor em uma função, você deve alterar o tipo na assinatura da função.
Return é uma palavra-chave que diz à função para fornecer o valor resultante da expressão que a segue.
Um retorno antecipado ocorre quando a palavra-chave return é usada em um bloco de código antes do final do bloco. Isso fará com que o programa saia desse bloco de código imediatamente, sem executar o restante do código no bloco.
Void é um tipo que diz que o valor da função não será usado em nenhum outro lugar. Ou talvez diz que não vale a pena se preocupar com isso. Você pode usar void como o tipo de uma função que não precisa produzir um resultado.