Você aprendeu na Aula 5 que uma função é um código reutilizável que fornece instruções para realizar uma ação, ou para criar uma saída com base na entrada.
Para definir uma função, você precisa de três partes principais: um identificador exclusivo, o tipo de informação a ser esperada como resultado e o que a função fará quando for chamada.
Como definir uma função
Assinaturas de funções
Na Aula 3, você viu como declarar uma variável ou constante nomeando-a e fornecendo o tipo de valor que ele vai usar.
Uma assinatura de função funciona de maneira semelhante. Ela usa um identificador exclusivo para a função, junto com os parâmetros que descrevem a entrada necessária e, finalmente, o tipo de retorno para o resultado ou a saída.

O que a função realmente faz é definido no bloco de código.
Bloco de código
O bloco de código é o grupo de expressões que vem após a assinatura da função. Essa é a sintaxe da função e seu bloco de código:
~~~(verse) name() : type = bloco de código ~~~
Há várias maneiras de formatar um bloco de código. Uma delas é recuar as linhas de código após o identificador. Você pode ver isso na sintaxe da função acima. (Você aprenderá mais sobre como configurar blocos de código posteriormente, mas, por enquanto, pode usar isso.)
As expressões no bloco de código definem o que essa função realmente fará quando for chamada.
Essas expressões serão executadas somente quando essa função for chamada. Quando o programa chegar ao final desse bloco de código, essas expressões serão concluídas (pelo menos até a próxima vez que a função for chamada), e o programa executará o próximo trecho de código após essa chamada de função.

Corpo
O bloco de código também é chamado de corpo quando define o que a função faz.
Escopo
Até agora, você aprendeu:
- Uma função tem um identificador exclusivo que é usado para ativá-la para fazer algo no programa.
- O que uma função faz é baseado nas expressões no corpo dela.
- Quando a última linha de código no corpo é concluída, a chamada de função termina, e o programa passa para a próxima linha de código após a chamada de função que está no programa.
As instruções nessa função e quaisquer valores que saiam da função determinam o escopo da função.
Hora de voltar às expressões que você pode usar para definir a função. Você pode criar constantes e variáveis (lembre-se da Aula 3?) e adicioná-las ao corpo da função.
Quando você coloca uma variável no corpo, ela é local no escopo da função. Local, nesse sentido, significa que esse código vive e funciona somente nesse corpo e somente quando a função é chamada.
Então, o que é escopo? É a associação do nome da função ao valor produzido pela função. Esse valor só pode ser usado dentro do bloco de código em que foi criado — ou dentro desse escopo.
Instanciação
Uma instância é uma aplicação exclusiva dessa função quando ela é chamada e executada. A criação dessa instância é a instanciação. Observe que a instância e a instanciação estão relacionadas à palavra instante, o que significa um período de tempo muito curto.
E isso traz à tona o conceito de tempo de vida.
Tempo de vida
Uma instância tem um tempo de vida: um começo, um meio e um fim.
Isso significa que a vida do que está nesse corpo de função é limitada ao escopo do corpo, e você não pode acessar as variáveis locais (aquelas limitadas a esse escopo atual) fora do escopo.
Condicionais
O exemplo a seguir mostra como calcular o número máximo de ratoeiras que um jogador pode comprar com o número de moedas que ele tem.
A constante MousetrapsYouCanBuy
é criada dentro do bloco if
, e o escopo é limitado ao bloco if
.
Quando a constante MaxMousetrapsYouCanBuy
é usada fora do bloco de código if
, ela produz um erro porque o nome MaxMousetrapsYouCanBuy
não existe fora do escopo. Você verá uma mensagem de erro: Identificador desconhecido. Isso significa que o MaxMouseTrapsYouCanBuy
só é válido dentro desse escopo.

Quando a expressão é concluída, as constantes locais e as variáveis locais criadas no corpo não existem mais. Elas chegaram ao fim de suas vidas.
Pense no escopo como uma pequena parte de código em que as coisas funcionam até serem concluídas.
Sintaxe da função
Vamos examinar a sintaxe da função novamente, mas desta vez um pouco mais profundamente.
name() : type =
bloco de código
name() : type = |
Essa é a assinatura da função. É A assinatura da função inclui o tipo de entrada que será usada. O valor que a função retorna (o que vem depois de |
codeblock |
O bloco de código da função, ou corpo, é onde você adiciona constantes, variáveis ou outras expressões para mostrar o que a função fará quando chamada. |
Por exemplo, uma função para pagar uma ratoeira pode ter a seguinte aparência:
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
set Coins = Coins - CoinsPerMousetrap
Print("Ratoeira comprada! Você tem {Coins} moedas restantes.")
As regras e convenções de nomenclatura para nomes de funções são as mesmas que você usaria para variáveis e constantes. Como as funções executam uma sequência de ações, é uma boa prática nomeá-las de uma forma que reflita as ações que elas executam, como BuyMousetrap()
.
Vazio
Você deve ter notado void
na assinatura da função para BuyMousetrap()
. O tipo void de uma função significa que sua chamada de função não retornará nada. Você aprenderá mais sobre o que é 'void' e como usá-la na próxima lição.
Não se repita
Um princípio importante da programação é Não se repita.
Isso significa que, se você estiver repetindo uma linha de código três vezes ou mais, considere escrevê-la de maneira diferente. E sim, há uma razão para isso!
Quanto mais linhas de código você escrever, mais difícil será manter o código e maior será a probabilidade de você acabar com bugs quando inevitavelmente alterar o código em um lugar, mas não em outro.
Funções, como constantes, são uma forma de não repetir código quando você não precisa. Portanto, as funções não apenas evitam a duplicação de código, como também reduzem a manutenção e diminuem a probabilidade de erros de código.
Preste atenção à formatação de maiúsculas e minúsculas ao escrever código, tanto na forma como você nomeia suas expressões e funções quanto ao usar palavras-chave e funções integradas. O Verse faz distinção entre maiúsculas e minúsculas, e erros em usar essa distinção de maneira correta e consistente podem causar bugs e erros de compilação.
Resumo
- Uma função é um código reutilizável que fornece instruções para executar uma ação ou criar uma saída com base em uma entrada.
- Funções precisam de três partes: um identificador, um tipo e um bloco de código, que contém qual será o resultado da função quando ela for chamada.
- Funções são chamadas por suas assinaturas.
- Um bloco de código também é chamado de corpo quando define o que a função faz.
- Escopo refere-se ao valor associado à função, que, por sua vez, é definido pelo conteúdo do bloco de código.
- O código contido em um bloco de código é local nesse escopo.
- Tempo de vida é a extensão do escopo.
- Não se repita.