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

SOBRE RETURN

Do que adianta eu chamar por diversas variáveis dentro de uma função se no final dela vou colocar um return de apenas uma? Logicamente, todas as vezes que eu chamar por esta função o que aparecerá será apenas uma, das muitas variáveis que pus ali.

5 respostas

Olá!

Creio que a atividade referida "Retornando um valor específico", seja para ilustrar o uso do "return".

Você pode retornar qualquer coisa no "return": uma variável, um parâmetro de entrada, o resultado de um cálculo, etc.; tudo dependerá da sua necessidade.

No caso da atividade referida, o problema proposto era somente o de encontrar uma maneira de fazer a função retornar o valor "20"; como já temos uma variável local que possui este valor, retornamos a mesma no "return".

Espero ter ajudado.

solução!

Clara, boa noite!

Por um momento, esqueça o exercício desta atividade.

Em uma linguagem de programação você estará sempre dando instruções ao computador. Desta maneira quando seu programa estiver pronto, o computador executará a mesma instrução definida por você quantas vezes for necessário.

Vou te dar um exemplo simples, calcular a média de notas de alunos:

AlunoProvaNota
PedroProva 15
PedroProva 24
PedroProva 37
ClaraProva 19
ClaraProva 27
ClaraProva 310
MarinaProva 110
MarinaProva 27
MarinaProva 36

Vamos ao código:

// Vou guardar as notas em variáveis pra ficar
// mais fácil de referenciá-las

var pedroNotaProva1 = 5
var pedroNotaProva2 = 4
var pedroNotaProva3 = 7

var claraNotaProva1 = 9
var claraNotaProva2 = 7
var claraNotaProva3 = 10

var marinaNotaProva1 = 10
var marinaNotaProva2 = 7
var marinaNotaProva3 = 6

// Calculando as médias (os parêntesis são para
// fazer a soma antes da divisão, assim como na matemática)

// Nas linhas abaixo leia da direita para a esquerda
// após o sinal de atribuição (=), você tem uma operação, que
// será executada e resultará em um único valor.

// Antes do sinal de atribuição é onde você guardará este valor.

// Eu gosto de ler: "mediaPedro recebe o resultado da operação..."

var mediaPedro = (pedroNotaProva1 + pedroNotaProva2 + pedroNotaProva3) / 3
var mediaClara = (claraNotaProva1 + claraNotaProva2 + claraNotaProva3) / 3
var mediaMarina = (marinaNotaProva1 + marinaNotaProva2 + marinaNotaProva3) / 3

// Imprimindo os valores no console
console.log(mediaPedro)
console.log(mediaClara)
console.log(mediaMarina)

Apesar do código acima funcionar, nós temos um problema. Estamos quebrando o princípio da preguiça de todo bom programador(a). O princípio DRY (Don't Repeat Yourself / Não repita a si mesmo). Estamos fazendo cálculo de média em três lugares diferentes.

Além disso, não é o nosso caso, mas e se no futuro precisássemos alterar como o cálculo de média funciona, como eu disse este não é nosso caso, a média sempre é calculada da mesma maneira, no entanto haverão operações que você realize no seu código que estarão sujeitas a mudanças futuras, neste caso você poderia ter que acabar mudando seu código em vários lugares caso a lógica da sua operação mudasse.

Para resolver este problema temos as funções, responsáveis por isolar a complexidade de algo, conseguimos colocar nosso código em uma função, chamar esta função em vários lugares diferentes, e o mesmo código será executado, e se precisarmos no futuro alterar nossa lógica, alteramos em um lugar só! Lindo não?

Vamos ao código (vou esconder as declarações das variáveis):

// Declarações e atribuições das variáveis escondidas.

// Função responsável por calcular uma média
function calculaMedia(nota1, nota2, nota3) {
    var media = (nota1 + nota2 + nota3) / 3
}

// Invocando a função, passando as notas como argumentos
var mediaPedro = calculaMedia(pedroNotaProva1, pedroNotaProva2, pedroNotaProva3)
var mediaClara = calculaMedia(claraNotaProva1, claraNotaProva2, claraNotaProva3)
var mediaMarina = calculaMedia(marinaNotaProva1, marinaNotaProva2, marinaNotaProva3)

// Imprimindo os valores no console
console.log(mediaPedro)
console.log(mediaClara)
console.log(mediaMarina)

Lindo não? Exceto pela parte que o console imprimiu:

undefined
undefined
undefined

Analisando nossa função calculaMedia, vemos que ela recebe as notas como argumentos, e lendo da direita para a esquerda, fazemos a operação de média e em seguida atribuímos o valor à variável media. Mas não estamos retornando nada dessa função, por padrão o JavaScript retorna pra gente o valor undefined quando não especificamos um valor a ser retornado.

Nós desejamos retornar a media, então basta alterar nossa função:

function calculaMedia(nota1, nota2, nota3) {
    var media = (nota1 + nota2 + nota3) / 3

    return media
}

Pronto, agora, ao invocar a função calculaMedia nas últimas linhas, novamento lendo da direita para esquerda:

// Primeiro é realizada a execução da função
calculaMedia(pedroNotaProva1, pedroNotaProva2, pedroNotaProva3)

// Nossa função retorna um valor, é como se esse pedaço de código, fosse substituído pelo valor retornado da função.
5.333333333333333

// em seguida jogamos (atribuímos) este valor dentro
// da variável mediaPedro
var mediaPedro = 5.333333333333333

Quando o console imprimir as variáveis mediaPedro, mediaClara, mediaMarina na verdade ele estará imprimindo o valor guardado pelas variáveis.

Ainda podemos deixar nossa função um pouco mais simples sem precisar declarar a variável media, e retornar direto o resultado da operação:

function calculaMedia(nota1, nota2, nota3) {

// Mais uma vez, lendo da direita para a esquerda:
// primeiro realizamos a operação, que nos entrega um valor
// depois retornamos este valor
    return (nota1 + nota2 + nota3) / 3

// como se estivéssemos substituindo a operação pelo valor:
//  return 5.333333333333333 //(claro, dependendo dos valores dos argumentos)
}

Não necessariamente uma função precisa nos retornar um valor, em muitos casos ela deve simplesmente realizar uma tarefa, por exemplo, caso você queira apagar uma linha de uma tabela: apagaLinha(numeroDaLinha). Uma vez que você tenha definido o que a função deve fazer, ela saberá realizar a operação, neste caso específico nada precisa ser retornado, só queremos que a linha seja apagada. O benefício é que isolamos o código de apagar linha dentro dessa função.

No exercício específico, o objetivo era apenas te mostrar como retornar um valor de uma função, mas o exemplo não tem aplicabilidade real, então não precisa se preocupar.

Caso eu tenha sido muito extenso, me desculpe, mas não sei o seu nível de conhecimento. Caso ainda permaneça alguma dúvida por favor solicite ajuda.

Abraços e bons estudos!

Agradeço pela minuciosidade em suas explicações, Pedro. Tirei todas as minhas dúvidas a partir delas. Abraço :)

Curti a explicação também!!! Muito obrigado...

Excelente explicação, Pedro Ávila!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software