Temos a seguinte função:
function calculaImc(peso, altura) {
var imc = peso / (altura * altura);
document.write(imc);
}
calculaImc(68, 1,71);
O que esse código faz? Calcula o IMC e também imprime o imc na tela. Não há nada de errado nela. Mas agora eu te pergunto: e se no lugar de enviar para a tela, você deseja enviar um sms, ou quem sabe enviar por e-mail? E se hora você precisa fazer duas coisas ou três com o imc calculado?
Sendo assim, a função calculaImc só deve ter a responsabilidade de calcular o IMC e retornar o resultado para quem a chamar. Quem a chama é que decidirá para onde enviará o IMC calculado.
Sendo assim temos:
function calculaImc(peso, altura) {
var imc = peso / (altura * altura);
return imc; // sempre retornado pelo lado esquerdo da função
}
// resultado agora recebe o valor do return da função. O que esta logo em seguida do return dentro da função? A variável imc que possui o resultado, sendo assim, a instrução abaixo é como se fosse `var resultado = imc`. Pois o valor ou variável retornado é atribuído a variável `resultado`.
var resultado = calculaImc(68, 1,71);
document.write(resultado);
// pode enviar por SMS
// pode enviar poe email.
Agora que temos resultado
, podemos fazer o que quiser com ele. Exibir na tela, enviar um SMS ou qualquer coisa. Com isso, a função calculaImc
pode ser usada sem precisar ser modificada. Em programação, é uma boa prática você criar um bloco de código reutilizável que você tenha que alterar pouco.
Por fim, para ficar mais claro. Eu posso fazer assim, é meio que um roubo, vou forjar um resultado do retorno da função:
function calculaImc(peso, altura) {
var imc = peso / (altura * altura);
return 100;
}
var resultado = calculaImc(88, 1.71);
Qual será o valor de resultado? Será sempre 100, porque é esse o valor colocando depois do return lá na função. Não faz sentido, porque ele teria que retornar é o resultado da operação. Isso serve para ilustrar que o que esta depois do retorne é sempre recebido pelo lado esquerdo quando você chamar a função.
Ajudou o complicou?