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.
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.
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.
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:
Aluno | Prova | Nota |
---|---|---|
Pedro | Prova 1 | 5 |
Pedro | Prova 2 | 4 |
Pedro | Prova 3 | 7 |
Clara | Prova 1 | 9 |
Clara | Prova 2 | 7 |
Clara | Prova 3 | 10 |
Marina | Prova 1 | 10 |
Marina | Prova 2 | 7 |
Marina | Prova 3 | 6 |
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!