7
respostas

NÃO ENTENDO A FUNÇÃO DO 'RETURN'

Se no código eu já disse que: "var imc = peso / (altura * altura);" para que tenho que colocar "return imc;" Sinceridade que não entendo, parece que existe 'return' apenas para complicar...pode ser que em funções mais complexas o 'return' tenha real sentido de existir...Porque aqui nesta função o "return" não tem motivo nenhum para existir...a função só tem uma linha, uma operação matemática, não existe outra opção de retorno para esta função. OBS: Já li todos os tópicos de todo o forum sobre este assunto e nenhum professor conseguiu explicar a real razão do 'return' neste tipo de função... e isso é extremamente frustrante...segui o curso adiante mas segui sem entender a real função do 'return' dentro de uma função simples assim.

function calculaImc(peso, altura){

    var imc = peso / (altura * altura);
    return imc;
}
7 respostas

O return serve justamente para retornar o resultado do cálculo. Se você chamar a função calculaImc(peso, altura) e ela não tiver o return, o método vai simplesmente calcular o imc e não fará mais nada, você não terá como pegar o resultado do cálculo para imprimir na tela por exemplo ou atribuir o valor do cálculo para outra variável em outro trecho de seu código.

Exemplo:

var resultadoImc = calculaImc (50, 1,70);

a var resultadoImc ira receber o valor retornado pela function calculaImc

resultadoImc = 17,30

agora você pode pegar a var resultadoImc e imprimir na tela por exemplo.

Não consigo achar sentido na expressão: "var imc = peso / (altura * altura);" sendo que chegando no ponto e virgula o javaScript não 'setou' a variável 'imc' com o valor da operação...E também não vejo sentido em outras explicações como : " Se não inserir o return no código dentro das {chaves } o javaScript até 'seta' o valor da variável 'imc' mas fechando a chaves sem o return, o restante do código desconhece o que foi feito dentro das chaves. Seria muito mais prático se o javaScript 'lembrasse' ou 'enxergasse' o que está dentro das chaves sem a necessidade de mais um comando (no caso o famigerado 'return').

Oi Hugo

A declaração return finaliza a execução de uma função e especifica os valores que devem ser retonados para onde a função foi chamada.

quando a nossa função é desse jeito abaixo:

function calculaImc(altura, peso) {
    var imc = peso / (altura * altura);
    mostra("O imc calculado é " + imc);
}

calculaImc(1.71, 73);

Não precisamos usar o return pois não fazemos nada com o resultado da função fora dela, ele é calculado dentro da função e mostrado por outra função e assim se encerra, no entanto existem casos onde quem chama a função deseja obter o valor do processamento para depois fazer análises e manipulações sobre ele, como abaixo:

function calculaImc(altura, peso) {
    var imc = peso / (altura * altura);
}
var imcFlavio = calculaImc(1.71, 73);

Nesse caso acima estamos chamando a função calculaImc e passando o resultado do seu retorno para a variável imcFlavio. No entanto dentro da função não temos a declaração return, o que vai acontecer o imc será calculado e não será retornado para quem o chamou.Como não temos a declaração return o retorno padrão é undefined.

Ter o comando return não tem haver com a complexidade da função e sim com a necessidade de retornar algum valor de dentro da função para quem a chamou. No caso da função acima temos a necessidade de retornar o valor do imc, pois vamos fazer verificações posteriores como por exemplo se o imc está normal, obeso, muito magro e etc. mas, poderia ser a altura, poderia ser o peso, qualquer variável ou conta lá dentro.

Portanto o resultado correto seria assim:

function calculaImc(altura, peso) {
    var imc = peso / (altura * altura);
    return imc;
}

var imcFlavio = calculaImc(1.71, 73);
var imcAmigo = calculaImc(1.72, 68);

No primeiro caso teríamos a variável imcFlavio com o valor do cálculo do imc com os parâmetro dele, e a variável imcAmigo como valor do cálculo dos parâmetros dele. Em síntese é muito simples, preciso retornar ? Sim. Então

return oqueprecisoretornar;

Se você precisar de esclarecimento mais aprofundado sobre esse assunto pode contar conosco aqui no fórum, e também lhe indico a documentação

Espero ter ajudado e bons estudos.

Sigo não entendendo porque o javaScrpit 'esquece' o valor atribuído pela função caso eu não coloque o comando return. Por exemplo, fiz todos os 5 cursos da carreira de SQL-server, no curso de T-SQL realizei programações simples via banco de dados SQL-server...Lá tem variáveis e funções também... e lá não é necessário inserir comando return, ao passar um cálculo para uma função ela faz o cálculo e atribui o valor á variável escolhida e o SQL-server 'lembra' desse valor em qualquer momento do programa, sem precisar de 'return' pra isso... Na minha opinião o JavaScript deveria ser da mesma forma, o que economizaria no sintaxe...duvido que eu consultando a documentação do Java eu encontre o motivo de aqui no javaScript eu precisar dar return e no T-SQL eu não precisar de return em funções. Pra mim segue sendo return um comando inútil, que pede pro javaScript fazer uma coisa obvia que é se lembrar de um valor que usei função pra calcular e que deveria ficar guardado na variável, independente de eu usar o valor da função dentro ou fora das chaves da função.

Fala Hugo, tudo bom?

Vamos pensar o seguinte.

No caso que você está lidando, realmente não teríamos problema se todos os resultados de todas as funções fossem armazenadas em variáveis, o gasto de memória é ínfimo!

Mas vamos lá, tudo que está em uma variável, está armazenado em memória.

Vamos levar essa situação para um sistema grande, se tudo ficasse armazenado em memória, teríamos problemas em relação a performance, nossa aplicação seria muito lenta! Sabemos que memória é gasto e nem sempre temos ela em grande quantidade. Isso vai depender do PC do usuário!

Então Hugo, a ideia é a seguinte, existem funções que faz sentido com que guardemos algum valor que ela nos retornará após executar alguma lógica para que manipulemos futuramente e outras não!

O sentido do return vem dessa necessidade de termos cuidado com o uso de memória. Se precisamos manipular os dados, retornamos, senão, não precisamos retornar e essa função cumprirá o papel dela sem problema algum.

Em programações funcionais, justamente a ideia é que o uso de variável seja o mínimo do mínimo! (menos gasto de memória!)

Gostei muito da sua dúvida, esse é um ponto que realmente poucas pessoas pensam, mas que é de extrema importância para qualquer sistema. O uso de memória!

Espero ter ajudado e complementado um pouco para sua jornada.

Abraços e bons estudos!

Ok, finalmente uma explicação mais plausível...Mas agora me explica aqui, porque no T-SQL as funções não precisam de 'return', e o T_SQL guarda seu resultado em variáveis pelo tempo que precisamos...Pq no T-SQL não 'estoura' a memória?

Fala Hugo!

Por definição, funções em SQL são diferentes das funções em outras linguagens, uma função em SQL não deve ter efeitos colaterais (ex: adicionar row) como acontece normalmente em outras linguagens. Para conseguirmos algo dessa natureza, devemos utilizar stored procedure (procedimento armazenado). Repare também que os valores são passados depois para esses stored procedure e não ficam armazenados.

É importante ressaltar também que funções em SQL são destinadas a retornar valores. Elas devem sempre retornar valores através do comando RETURN. Então, na verdade, as funções precisam sim retornar valores!

Espero ter ajudado!!

Abraços!