Introdução
Uma função dá um nome a uma tarefa para que o programa possa executá-la sempre que necessário. As funções podem receber dados de entrada por meio de parâmetros e retornar um valor calculado.
Neste laboratório, um projeto Cargo preparado já contém três funções de conversão e todas as chamadas a elas. Você substituirá uma expressão de espaço reservado em cada etapa. Isso mantém a quantidade de código pequena e mostra como definições de funções, parâmetros, tipos de retorno, expressões e chamadas se relacionam.
Retornar um valor de uma função
Nesta etapa, você completará uma função que converte minutos em segundos e relacionará sua definição à chamada correspondente.
Entre no projeto preparado e abra o arquivo-fonte:
cd /home/labex/project/conversion-tool
nano src/main.rs
No início do arquivo, esta linha inicia uma definição de função:
fn minutes_to_seconds(minutes: i32) -> i32 {
fnintroduz uma função.minutes_to_secondsé o nome da função.minutes: i32é um parâmetro: uma entrada chamadaminutescujo tipo é o tipo inteiroi32.-> i32indica que a função retorna um valori32.- As chaves contêm o corpo da função.
O Rust verifica cada chamada com base nessa assinatura. Quem chama a função deve fornecer a quantidade esperada de argumentos, na ordem declarada, e cada argumento deve ter um tipo compatível.
Substitua somente o 0 antes do comentário da Etapa 1 por:
minutes * 60 // Step 1: replace this placeholder expression.
Observe que minutes * 60 não tem ponto e vírgula. Essa é a expressão final do corpo da função, portanto seu valor se torna o valor de retorno da função. Adicionar um ponto e vírgula a transformaria em uma instrução que não retorna esse valor.
Salve com Ctrl+O, pressione Enter e saia com Ctrl+X. Verifique o código:
cargo check
Em main, minutes_to_seconds(5) é uma chamada de função. O valor 5 é o argumento fornecido ao parâmetro minutes. Execute o programa:
cargo run --quiet
A primeira linha agora deve ser:
5 minutes = 300 seconds
Usar um parâmetro e um tipo de retorno decimal
Nesta etapa, você completará uma segunda função que aceita e retorna valores de ponto flutuante.
Abra o arquivo-fonte:
nano src/main.rs
Encontre celsius_to_fahrenheit. O parâmetro e o tipo de retorno são f64, portanto o cálculo pode preservar um resultado fracionário. A expressão temporária celsius * 0.0 usa o parâmetro, mas retorna zero de propósito. Substitua essa expressão completa por:
celsius * 9.0 / 5.0 + 32.0 // Step 2: replace this placeholder expression.
Este é outro retorno por expressão: o valor calculado é o último item do corpo da função e não tem ponto e vírgula. A multiplicação e a divisão são avaliadas antes da adição, de acordo com a precedência aritmética normal. Os parênteses podem deixar explícita uma ordem pretendida mais complexa. Quem chama a função não precisa conhecer a fórmula: fornece um argumento em Celsius e recebe o valor retornado em Fahrenheit.
Salve, saia e execute o programa:
cargo run --quiet
A segunda linha deve ser:
20.0 C = 68.0 F
A chamada celsius_to_fahrenheit(20.0) fornece um argumento. O valor retornado é armazenado na variável fahrenheit antes de ser formatado para exibição.
Reutilizar uma função com vários argumentos
Nesta etapa, você completará uma função com dois parâmetros e observará duas chamadas reutilizando essa função.
A função scale_amount preparada recebe amount e factor. Os parâmetros são separados por vírgulas, e cada parâmetro tem seu próprio tipo. Uma chamada deve fornecer os argumentos na mesma ordem.
Abra o arquivo e encontre o espaço reservado da Etapa 3:
nano src/main.rs
A expressão temporária amount * factor * 0.0 retorna zero de propósito. Substitua essa expressão completa por:
amount * factor // Step 3: replace this placeholder expression.
Salve e saia. Em seguida, faça uma verificação final:
cargo check
Execute o programa concluído:
cargo run --quiet
A mesma função é chamada uma vez para a farinha e outra vez para a água. As duas últimas linhas devem ser:
Scaled flour: 375.0 g
Scaled water: 270.0 ml
Este é o principal benefício de uma função: o cálculo é definido uma vez, recebe um nome claro e pode ser reutilizado com argumentos diferentes.
Resumo
Você completou funções com parâmetros inteiros e de ponto flutuante, interpretou as setas dos tipos de retorno, retornou valores usando expressões finais, passou argumentos em chamadas de função e reutilizou uma função em vários cálculos.



