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

Return

Olá!

Acabei de chegar na aula de retorno de funções, e gostaria de apenas esclarecer um pouco esse conceito:

O uso do "return" é apenas para aumentar a agilidade na hora de programar, ou ele possui algo essencial que eu não compreendi durante a aula? Porque podemos ver o mesmo resultado usando document.write(imc), não?

Obrigado!

4 respostas

Olá Gustavo,

O return pode ser usado para aumentar a agilidade para devolver um valor sim. supondo que temos uma função chamada buscaValor e que no final ela retorna a posição do vetor array onde está o valor que você procura. Caso durante a varredura do array você encontra o valor, basta simplesmente dar um return e sair do loop, dessa forma deixa mais performático.

Agora, supondo o exemplo abaixo:

if (valor = 0 ){
    return outroValor = 123/1;
else {
    return outroValor/valor;
}

Uma função pode representar um calculo qualquer, que vai desde uma simples área de um quadrado até um calculo mais complexos para prever a trajetória de um objeto, e para isso pode acontecer o exemplo acima, você chamar uma função que faz uma simples divisão, porém por algum motivo o divisor deu zero, em muitos lugares é feito o tratamento acima (supondo que isso não quebre nenhuma regra de negócio).

Enfim, o return tem um papel muito importante no mundo da programação.

Espero ter ajudado.

Blz Gustavo,

Você usa a instrução "return" para retornar um valor obtido através de um processo, seja de calculo, de uma busca, etc.

Quando utiliza do "document.write(imc)", você está informando que não precisa mais do valor, então, imprimi o resultado, porem digamos que você precise deste valor obtido para utiliza-lo de alguma forma para em um outro calculo?

Nesse caso, não podemos utilizar o "document.write(imc)" e sim o "return".

Quando utilizamos o "return", interrompemos a execução de uma função com o valor encontrado ou, se nenhuma valor for encontrado, a função receberá o valor undefined.

O código abaixo mostra a interrupção da função apos chegada a expressão "return".

    function calculaImc(altura, peso) {
        var imc = peso / (altura * altura);
        document.write('document.write antes do return<br>');
        return imc;
        document.write('document.write APOS do return<br>');
    }

Espero que com a explicação do Joel e a minha, tenha facilitado o entendimento sobre o "return"

solução!

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?

Nossa, vocês me ajudaram bastante!

Obrigado pelas respostas tão completas!

Abraços.