Entrada são informações adicionadas a um programa e usadas pelo código para fazer alterações.
Os exemplos de funções fornecidos na lição anterior não precisaram de entrada:
~~~(verse) GetNumberOfMousetrapsYouCanAfford() : int
Você sabe disso porque os **parênteses** `()` na assinatura da função acima estão vazios.
## Parâmetros
Você pode definir a **entrada** que uma função precisa adicionando um **parâmetro** à assinatura da função.
**Um parâmetro é uma constante declarada na assinatura da função entre parênteses**. Quando um parâmetro é definido, você pode usá-lo no **corpo** da função.
A sintaxe de uma função que inclui um parâmetro é a seguinte:
~~~(verse)
name(parameter : type) : type =
bloco de código
~~~
No exemplo a seguir, `CoinsPerMousetrap` agora é um parâmetro para a função `BuyMousetrap()`:
~~~(verse)
var Coins : int = 500
BuyMousetrap(CoinsPerMousetrap : int) : void =
set Coins = Coins - CoinsPerMousetrap
Print("Ratoeira comprada! Você tem {Coins} moedas restantes.")
~~~
Esse código diz o seguinte:
* Você tem uma variável chamada `Coins` com um valor inteiro inicial de 500: `var Coins : int = 500`.
* A função chamada `BuyMousetrap()` recebe um parâmetro de `CoinsPerMousetrap`. No entanto, você não quer que esta função retorne um valor, então o tipo é `void`.
## Argumentos
Quando você chama uma função que espera parâmetros, deve atribuir valores aos parâmetros, da mesma forma que atribui valores a constantes.
Esses valores atribuídos para funções são chamados de **argumentos** para a função.
Para chamar a função `BuyMousetrap()`, você o faz adicionando um argumento dentro dos parênteses. Há algumas maneiras de fazer isso.
Por exemplo:
* Você pode usar `BuyMousetrap(CoinsPerMousetrap := 10)`, que imita como você define os parâmetros para a função. O 10 é um argumento para a função e altera o valor do resultado.
* Lembra dos literais da Aula 2 e Aula 3? Você também pode usar um **valor literal** do mesmo tipo do parâmetro.
* Uma terceira maneira é usar uma variável ou constante previamente declarada como seu argumento. Você pode chamar a função usando valores diferentes para o argumento e obter resultados diferentes.
~~~(verse)
var Coins : int = 500
# Após esta chamada, Coins é 490
BuyMousetrap(CoinsPerMousetrap := 10)
# Após esta chamada, Coins é 485
BuyMousetrap(5)
CoinsPerMouseTrap : int = 20
# Após esta chamada, Coins é 465
BuyMousetrap(CoinsPerMousetrap)
Vários parâmetros
Você pode definir quantos parâmetros quiser para a função, desde que separe os parâmetros com vírgulas.
A sintaxe para uma função com dois parâmetros tem a seguinte aparência:
~~~(verse) name(parameter : type, parameter : type) : type = bloco de código ~~~
Ao chamar a função, você precisará separar os argumentos com vírgulas novamente, o que imita como você define os parâmetros da função.
Resumo
- Um parâmetro é uma constante declarada na assinatura da função. Está entre parênteses.
- Um argumento é o valor atribuído à constante usada no parâmetro dessa função.
- Você deve separar vários parâmetros em uma única função com vírgulas.