[Música] fala Mestres beleza na aula de hoje nós iremos falar aqui sobre parâmetros e argumentos em funções tá e basicamente os parâmetros e os argumentos eles irão nos permitir modificar ou personalizar ou deixar de uma forma bem mais dinâmica o comportamento da função tá então no exemplo mais simples aqui daquela função que nós fizemos na aula passada de soma aquela função ela pode receber como parâmetro os números que eu quero realizar a soma tá e a diferença ali entre parâmetros e argumentos Ela é bem Sutil é mais uma coisa ali de de sintática pra gente
ter nomes diferentes ali para para para uma coisa que no final ela vai ser ali o o mesmo o mesmo dado o mesmo valor Então já falando já esclarecendo essa diferença a função ela recebe um parâmetro certo a função vai recebe um parâmetro e quando eu for executar essa função eu vou enviar um argumento tá então a diferença é só mesmo no na na forma ou na ação ou no momento que eu estou trabalhando ali com esses valores mas no final vai ser o mesmo dado o dado que eu envio como argumento ele vai ser
usado como para parâmetro da função e é mais uma mudança de perspectiva pra gente separar as coisas mas eu vou est sempre falando aqui sobre parâmetros e argumentos e até eu me confundo às vezes mas sempre que eu falar eu vou tentar deixar claro o que que é e porque que tá sendo que a gente tá chamando de parâmetro ou de argumento para isso ficar bem claro mas no final o resultado ele vai ser o mesmo tá então vamos lá aqui na no no nosso arquivo né tem o arquivo aqui dessa aula e aqui nós
iremos criar uma função tá então primeiro a gente vai começar falando na flexibilidade na na nas possibilidade de personalizar o comportamento da função então basicamente a flexibilidade com os parâmetros parâmetros então aqui eu vou eu vou criar aquela função de soma tá E essa função de soma ela vai retornar o resultado na soma de dois valores tá então aonde é que eu defino os parâmetros né a gente define os parâmetros dentro dos parênteses tá então aqui no parênteses eu vou definir que eu vou receber o número um e eu vou nesse caso aqui da soma
eu vou receber mais de um parâmetro né então eu posso eu posso receber na função é tudo muito flexível né a função ela pode receber nenhum parâmetro ela pode receber um parâmetro dois três infinitos entre algumas aspas número de parâmetros mas ela pode receber muitos parâmetros né a gente não tem limitação Clara em relação a isso então a função soma ela vai receber dois números pra gente somar então teremos aqui o número um eu eu eu separo por vírgula né e número dois então então esses nomes que eu dei aqui são os nomes dos parâmetros
e com esses nomes desses parâmetros eu vou conseguir e manipular ou trabalhar com esses valores aqui dentro da do corpo da função então por exemplo se eu quiser aqui ó fazer um console log o primeiro número é e aqui a gente até para fazer esse console log a gente vai entrar aí no a gente vai fazer o uso né de mais de um parâmetro Então olha eu vou fazer um primeiro conso log dessa string e o segundo conso e o segundo parâmetro que eu parâmetro não o segundo argumento que eu vou enviar aqui pro meu
conso log é o número né então seria aqui ó número um tá então aqui dentro da função soma Eu chamei a função né o a o console pon log e nessa função eu enviei dois parâmetros dois argumentos olha ol a confusão é muito confuso Tá mas o certo aqui eu eu quero seguir aqui o o o certo na nomenclatura das coisas mas no final Eu particularmente eu acabo falando sempre parâmetro mas a gente tem que saber que existe essa diferença tá parâmetro e argumento Então vou chamar aqui outro console log e o segundo número é
dois pontos dois pontos espaço vírgula e o segundo argumento que é o número dois tá então na função soma eu primeiro estou vou printar no console né Quais números eu estou somando e no final aqui eu vou retornar o a soma né ou melhor vamos fazer aqui o Vamos criar variável resultado e o o valor dessa variável vai ser número um + número dois e aqui agora eu vou fazer outro console log console.log o resultado da soma é e o segundo argumento aqui vai ser a variável resultado Beleza então com essa anotação com isso tudo
que nós fizemos eu deixei totalmente dinâmico os números que eu irei somar né então número um e número dois Isso aqui vai ser enviado como argumento e a gente vai receber esse parâmetro aqui e e vai fazer a operação então aqui no final eu posso chamar ó som Opa soma de 1 e 2 e para enviar os argumentos né como é como a gente viu que no consola log a gente também separa eles por vírgula tá então eu vou somar um em dois vou somar 4 e 4 e vou somar 9 e 9 E1 Posso
salvar isso aqui e posso executar esse arquivo e executando nós já temos aqui os logs né o primeiro número é um o segundo número é 2 o resultado da soma é 3 que foi a primeira execução né entre um e do aí já na segunda execução primeiro número é 4 segundo número é 4 o resultado da soma é 8 tá e eu também na terceira execução né entre 9 e 1 primeiro número é 9 segundo número é 1 O resultado é 10 tá então então com o uso aí dos parâmetros a gente acaba transformando as
funções em em algo totalmente flexível né totalmente dinâmico e traz muito poder pra função de uma forma que ela vai ser totalmente abstrata a gente faz ela imaginando que a gente vai receber Tais parâmetros e com esses parâmetros a gente enfim consegue atingir resultados aí de forma totalmente dinâmica tá Então esse resultado da soma aqui é um resultado muito bom porque a gente viu que nós conseguimos definir né o parâmetro mais de um parâmetro e chamar a função várias vezes e enfim fazer todas as nossas operações aqui que a gente precisa tá então com essa
ideia de parâmetro em mente eu vou trazer aqui uma outra ideia que são os parâmetros opcionais tá então o que que o o que que seria né esse parâmetro opcional para implementar isso aqui e trazer o exemplo eu vou eu vou implementar uma função de multiplicação tá então vou criar aqui a função de multiplicação e nela a gente vai fazer Vai elaborar essa ideia aí do parâmetro opcional Então vou até anotar aqui ó parâmetros parâmetro ou parâmetro vamos deixar parâmetro opcional Então nesse caso aqui eu vou criar a função multiplicação não posso ter acentos nenhum
tá E aqui no no corpo dessa função ou melhor os parâmetros que eu vou receber né é o número um eu vou chamar de não é num 1 e num 2 E aí com esses parâmetros a gente pode fazer a operação normalmente tá então vou fazer aqui ó resultado vai receber vai ser igual né um vezes num 2 e eu vou retornar o resultado ou melhor vamos fazer o consol log né resultado da [Música] multipli cação vai ser a variável resultado e Isso aqui vai funcionar normal né então eu posso chamar aqui ó multiplicação vou
multiplicar 2 e 3 se eu salvo isso aqui e executo nós temos aí o resultado da multiplicação é se normal o que que vai acontecer aqui ag o que que a gente tem que fazer para que um parâmetro ele seja opcional é aqui onde a gente define o parâmetro né 1 2 onde a gente dá os nomes né para esses parâmetros eu posso dizer que num 2 ele vai ser igual ou melhor eu vou atribuir a num 2 o valor por exemplo zer tá então quando eu faço isso se a pessoa não enviar o parâmetro
o segundo parâmetro que seria aqui nesse caso enviei 3 esse parâmetro ele vai ser igual a zer pess não enviar a pessoa a função quem executar essa função e não passar esse argumento esse segundo argumento ele vai ser chegar aqui e vai ser atribuído o valor zero para ele e aí ele passa a ser opcional então por exemplo se eu fizer isso aqui ó salvar eu vou apagar o segundo argumento aqui deixar só o número dois e Executar a multiplicação o resultado da multiplicação é zero porque todo número vezes zer É zero né então se
eu passar aqui eh 22 executar é zero também né Qualquer coisa Qualquer valor que eu enviar aqui vai dar sempre zero porque eu não estou enviando o segundo argumento desse que do do número que vai ser multiplicado com o primeiro né então a gente consegue é definir essas esses parâmetros opcionais e a anotação a sintaxe é feita com a essa atribuição desse valor na na nossa vari aqui na declaração tá então isso aqui na verdade essa declaração né esse igual a zero isso vai mais para um caminho de parâmetro Def né que que a galera
gosta de de chamar o que seria né esse parâmetro de é basicamente o o o o valor de né é o valor padrão Então se ninguém enviar nenhum valor eu vou atribuir esse valor x E por que que eu falo isso porque por padrão no JavaScript esse valor esse parâmetro esse argumento o envio dele já é opcional Então vamos fazer aqui o exemplo eu vou tirar esse igual a zer tirei e aqui em multiplicação eu vou enviar 3 e vou enviar outro valor que se na verdade eu não vou enviar nada tá só vou enviar
o três então se eu executar isso aqui o resultado da multiplicação é n retornou aqui n o que que é esse n né Ele também é um tipo de dado que ele indica né not a Number então o resultado disso aqui é um um não número um uma coisa que não é um número né é o é o tipo de dado que a gente chama de N E por que que ficou n porque o segundo parâmetro aqui eu vou fazer o console log dele ó P log eu vou deixar eu vou fazer aqui ó parâmetros
parâmetros vai ser num 1 e num 2 deix eu executar aqui essa multiplicação nós temos aqui ó parâmetros o primeiro parâmetro é três e o segundo parâmetro veio como undefined porque eu não defini né eu de fato eu não enviei aqui um segundo argumento tá então como eu não enviei ele foi como undefined né não definido e ele tentou realizar uma multiplicação entre o número e o undefined que resultou em um n né um not a Number então a ideia do parâmetro opcional ele meio que já é padrão opcional o que a gente pode fazer
para amenizar os problemas é atribuir um valor de para sempre que na ausência né desse desse argumento ele Receba um valor ali de né o valor padrão tá então com essa ideia de parâmetro opcional tem um outro papo que eu quero trazer para cá que é sobre a imutabilidade os parâmetros e o que que é isso aqui qual que é a ideia por trás disso aqui imutabilidade né como o nome já diz é a não alteração imutável né que não é mutável que não vai ser alterado Então sempre que a gente trabalha com funções e
aqui já é uma ideia de boa prática né de boas práticas é interessante que a a gente evite alterar diretamente o parâmetro da função Então nesse caso aqui ó num 1 e num 2 São parâmetros eu estou realizando a operação atribuindo o valor a uma nova variável e fazendo o console log daquela variável ou que seria retornar ou retornaria essa nova variável o fato é que eu não estou alterando diretamente o para Tá e isso pode vai acabar sendo um problema quando a gente começar trabalhar com quando o programa ele começa a ficar complexo e
a gente começa a ter várias Como que eu posso dizer a gente começa a ter várias variáveis né a estrutura começa a ficar mais complexa a gente pode começar a ter problema tá então o que que eu vou fazer eu vou criar aqui a função de saudação eu não tenho ela implementada aqui então vamos lá function saudação essa função saudação ela vai receber um parâmetro que vai ser o nome da pessoa que eu vou e dar vou dar saudações né E aqui dentro dessa função eu vou eu vou retornar Tá eu vou retornar retornar o
nome beleza e aqui no final eu irei simplesmente chamar saudação passando o nome tá eh na verdade eh eu eu vou fazer o seguinte eu tenho que fazer um console log aqui dentro né pra gente ver no console a a saudação Então antes de retornar eu vou fazer aqui ó console saudação saudação não nome console pon log do nome ali que vai ser o ou lá Olá vírgula nome né que são aí esse envio de diferentes parâmetros pro console log com essa estrutura aqui eu vou comentar aqui multiplicação e a gente vai executar tá então
vai ter aqui ó um olan simples sem problema nenhum e o que que qual seria esse caso né onde haveria a mutabilidade no parâmetro seria dentro da função eu falar que nome vai receber Maria por exemplo então nessa estrutura aqui eu já começo a ter problema né porque o parâmetro que foi enviado ele não vai ser o mesmo que eu irei retornar né E muito menos o que eu vou fazer o consol log então a gente já vai ter um comportamento estranho né porque eu enviei o o nome que eu quero dar a saudação né
que seria Saudação Para mim para Janer mas a saudação tá indo pra Maria tá então é um caso onde eu estou atribuindo Novos Valores eu estou fazendo essa mutação né mutando o parâmetro e Continuo trabalhando com ele né então quando a função cresce quando ela fica mais complexa quando a gente começa mexer com muita coisa pode ser que isso aconteça sem que a gente perceba essa habilidade da ã do parâmetro E aí pode causar esse tipo de problema tá que a gente começa a trabalhar começa a fazer algumas coisas com aqueles valores e isso vai
gerar problema então uma boa prática que a gente tem sempre que a gente tá trabalhando com funções é tentar ao máximo evitar na verdade se eh realizar mutar né fazer alteração do parâmetro em si se eu tiver que fazer alguma alteração eu atribuo o meu o valor né que eu recebi do meu parâmetro para uma nova variável e altero a variável que por exemplo nesse caso aqui do resultado né eu criei a variável resultado para armazenar o resultado da multiplicação mas se eu quisesse alterar aqui o nome eu posso fazer o seguinte eh o nome
eu vou criar aqui uma nova variável então uma variável temporária ou variável auxiliar né eu posso chamar isso aqui de ALX ou auxiliar tanto faz seria essa variável que vai me ajudar nisso então ALX vai receber o nome eu vou atribuir o nome a variável ALX e dentro de ALX eu posso fazer a alteração que eu quiser então ALX agora vai ser vai ser o uma operação de console não console não né eu eu tô tentando não trazer para cá coisas que nós iremos ver no futuro então esse exemplo aqui como a gente tá improvisando
eu vou fazer o seguinte eu pedi para vocês quando a gente estava falando de operações de operadores para vocês testarem fazer operações entre números e Strings né então aqui a gente vai fazer esse tipo de operação o que que eu vou fazer o aux né ele vai receber o nome nome que é o parâmetro e eu vou somar a string exclamação Tá certo tá estranho né estranho isso aqui mas o que que tá acontecendo quando a gente realiza soma entre Strings né o que eu falei lá era somar número com string nesse caso aqui eu
estou somando duas Strings que no final Isso aqui vai virar um concatenação ele vai pegar o nome e vai concatenar com a nova string tá então eu eu armazenaria estou armazenando da nova variável o resultado aí dessa entre aspas manipulação do meu parâmetro tá então eu eu eu estou fazendo isso e aqui eu posso fazer o consol log de ALX tá e posso retornar continuar retornando o nome Então nesse caso aqui se eu executo eu tenho no log né Olá Janer com a exclamação essa exclamação foi um uma improvisação aqui de manipulação da do parâmetro
né que eu manipulei ele basicamente eu fiz uma operação com ele né Eu não eu não manipulei Ele diretamente foi indiretamente atribui uma variável e fiz o console log dessa variável manipulada né então aux aqui é o nome com exclamação né a exclamação tá junto eh foi foi né foi realizada a operação que juntou essas duas Strings e no final eu retorno o nome e esse nome que eu retorno eu vou armazenar aqui uma variável H ou melhor destinatário né que é quem recebe a saudação e aqui se eu fizer um consolo no destinatário a
gente vai ver o seguinte no log tá Olá jancer né com exclamação e eu retornei o parâmetro que é jancer sem a exclamação né então o parâmetro que ele passou pela função e continuou imutável tá E essa que é a ideia da gente não realizar a mutação não manipular não alterar os parâmetros e sim sempre que a gente precisar criar novas variáveis e fazer isso no corpo da função de forma que o parâmetro ele vai sair da função ileso Tá certo então para essa aula aqui é isso tá eu espero que eu tenha ajudado qualquer
dúvida pode estar deixando um comentário logo abaixo e é isso aí muito obrigado e até a próxima [Música]