Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida sobre Retorno de funções

Qual é a diferença de uma função que retorna um valor e uma que não retorna nenhum valor. Por exemplo

<script>
    function Soma(a, b) {
    document.write(a + b);
}
Soma(5,3);
</script>

e nesse outro exemplo:

<script>
    function Soma(a, b) {
    return Soma(a +  b);
}
    Soma(5, 3);
</script>
3 respostas

Oi Vinicius, a primeira função apenas pega o valores de a e b, soma e mostra na tela. A segunda que retorna valor eu gosto de pensar que a função "se torna" o que ela retornou, nesse exemplo pra mim Soma(5,3) = 8, fazendo assim você pode guardar isso numa variável desta forma resultado = Soma(5,3) o valor que ela retornar vai ser guardado na variável resultado, então se você precisar do valor daquela função você tem armazenado, não sei se fui muito claro, me enrolo muito explicando ainda, mas caso não tenha entendido você me avisa que eu tento reformular. Ah, a sua função que retorna um valor tem um pequeno erro nessa linha

return Soma(a +  b);

Basta tirar o Soma e deixar assim

return a + b;

Novamente, caso não tenha ficado claro você me fala que eu tento mudar a explicação.

solução!

Fala Vinicius! Bom dia! Para te responder, preciso de um exemplo mais épico.

Vejamos um exemplo baseado em um problema. Você quer calcular a soma entre dois números e o resultado quer exibir em um alert. Certo? Temos a seguinte função.

function somaDoisNumeros(numero1, numero2) {
    var soma = numero1 + numero2;
    alert(soma);
}

somaDoisNumeros();

Perfeito, conseguimos o resultado, pois a função somaDoisNumeros realiza a soma e ainda exibe o alerta. Até ai tudo bem?

Mas, vamos dizer que você precise hora exibir um alerta e outra, por exemplo, enviar um e-mail ou quem sabe um SMS (é claro que o browser não faz isso, mas é algo comum em sistemas).

Você terá que alterar a função somaDoisNumeros para no lugar de exibir um alerta faça outra coisa. Ou seja, você tem dentro de uma mesma função a responsabilidade de realizar a lógica do cálculo e a saída desse resultado. Isso gera problemas de manutenção e evita que sua função somaDoisNumeros seja utilizada por outros sistemas.

Agora, se fizemos assim:

function somaDoisNumeros(numero1, numero2) {
    var soma = numero1 + numero2;
    return soma;
}

// resultado guarda o mesmo valor de soma aqui!
var resultado = somaDoisNumeros();
alert(resultado);
document.write(resultado);
// posso enviar o resultado via SMS, impressora, seja lá o que for

Agora, sua função somaDoisNumeros só faz exatamente o que seu nome diz, ela soma dois números e só. Quem chamar a função usa seu retorno, ou seja, o resultado da função que foi calculado dentro dela e faz o que quiser com o retorno.

Então, o return é importante dentro de uma função para que, depois de você executar sua lógica seja simples ou complexa ela seja acessível para quem chamou a função. Quem pegar o resultado faz o que quiser com ele. Sendo assim, somaDoisNumeros pode ser usada em todo lugar que você quiser somarDoisNumeros.

Por fim, uma função deve ter apenas uma funcionalidade (por isso é função). Para conseguirmos funcionalidades maiores, vamos combinando essas pequenas funções entre si.

Ajudei ou só compliquei?

Como o Flavio explicou da melhor forma que já vi até hoje, a mudança está na responsabilidade. Em seu primeiro exemplo, a função soma tem a responsabilidade de realizar o cálculo da soma entre dois números passados como parâmetro, e ainda escrever o resultado no documento. No caso do return, explicando agora de uma forma mais abstrata, você somente atribui a responsabilidade de realizar a soma, e outra função que se encarrega do que deve ser feito com o resultado.