Parâmetros ajudam a gente
a modular o comportamento
de uma função,
e a gente já sabe como
definir parâmetros simples,
que são informados
de forma posicional,
e parâmetros
de quantidade dinâmica,
em que a gente consegue
lidar com eles
como se fosse uma coleção qualquer.
Chegou a hora da gente ver
como lidar com parâmetros
que podem ou não virem
para a nossa função.
O que a gente vai ver
agora são chamados KWARGs,
ou Keyword Arguments,
que são argumentos
que a gente passa
no formato de dicionário.
E para que eles servem?
Imagina que você tem que trabalhar
com a função que você tem
um valor específico que tem
que ser informado.
Nesse cenário, você informa para ele
um parâmetro simples,
que sempre vai estar lá,
e que se não for informado,
o Python dá um erro.
Por outro lado, se você tem
uma lista de quantidade dinâmica,
a gente vai ter que usar os args,
para que a gente consiga manipular eles
de forma dinâmica, sem se preocupar
com a quantidade total.
No entanto, a gente pode querer
um parâmetro
que vai estar ou não presente.
Ou seja, ele é uma informação opcional.
Se ele estiver presente,
a gente faz alguma coisa com ele.
Caso não, a gente não faz
ou assume algum valor padrão.
E para isso, a estrutura de dados
mais adequada que a gente conhece
é o dicionário,
que é justamente o tipo entregue
quando a gente usa os KWARGs.
Então, agora, vamos
lá para o código e dar uma olhada
em como esse cara funciona.
Aqui no VS Code,
a gente já tem
um código de exemplo,
que é uma função simples
que exibe uma mensagem olá
e algum nome que foi entregue.
Se a gente exibir ela aqui,
executar ela, na verdade,
com o comando do Python,
a gente vai ver exatamente
isso na tela.
Mas, imagina que a gente queira
receber aqui a informação
de se esse aluno
fez ou não um trabalho prático.
Então, a gente precisa
de uma informação
que vai dizer para a gente,
na verdade,
a nota que ele tirou
nesse trabalho prático.
E se ele não tiver uma nota,
não significa que ele tirou zero.
Significa que ele não entregou.
Tá bom?
Então, vamos começar com isso.
A gente poderia definir
aqui duas variáveis.
Uma para informar se ele fez
ou não um trabalho prático.
E, para isso, a gente usaria
o tipo booleano.
E, depois, uma outra
para especificar a nota.
Mas, como a gente
consegue usar os KWARGs,
a gente vai fazer isso
de uma vez só,
informando apenas a nota.
Então, saca só.
Eu vou colocar aqui
a minha outra variável,
que vai ser o meu
outro parâmetro,
que eu vou chamar
de informações adicionais.
E, nesse caso, para que o Python
entenda que isso daqui é um KWARGs
e não uma variável simples,
eu vou ter que colocar
não um, mas, dessa vez,
dois asteriscos
no começo dela.
Então, pronto.
A partir de agora,
se eu executar a aplicação
sem mexer na invocação
ou no conteúdo daquela função,
o Python consegue executar isso
sem problema nenhum.
Porque ele já entendeu
que isso se trata de um KWARGs
e que as informações
que estão ali, elas são opcionais.
Ou seja, eu posso informar ou não.
Se a gente vier aqui
dentro do bloco de código,
vamos executar um print
com aquele valor,
só para a gente entender
o formato que as coisas
estão chegando aqui dentro.
Eu vou copiar o nome da variável e,
aqui, chamar a função nativa print,
passando ela para a gente
ver ali no terminal.
Eu vou executar mais uma vez.
E repara que a mensagem
está aqui e que, aqui embaixo,
dessa vez, eu tenho um dicionário,
que é aquela estrutura que a gente
usa baseada em chave e valor.
Então, eu vou começar aqui,
na invocação do método,
passando valores
para esse meu KWARGs.
E, para fazer isso, eu posso
passar eles no formato de chaves.
Ou seja, eu tenho que colocar
o nome e o valor que eu quero
para aquela chave.
No nosso caso, vai ser a nota
do trabalho prático, ou seja, nota tp.
Então, por isso, eu vou
colocar aqui nota tp,
o sinal de igual e o valor
que eu quero informar.
Que, nesse caso, vai
ser, por exemplo, 10.
Eu vou só salvar o meu programa
e executar de novo
para a gente ver o que mudou.
Aqui, a mensagem continua
a mesma coisa, só que,
dessa vez, repara que dentro
do meu dicionário,
eu tenho a chave
nota tp com valor 10.
E, a partir daqui,
a gente já consegue trabalhar
com essa informação.
E é exatamente isso que a gente
vai fazer aqui agora.
Eu vou abrir um espacinho
entre as duas mensagens
e uma coisa que a gente
tem que lembrar
é que os KWARGs são informações
realmente opcionais.
Então, a gente tem que lidar
com o cenário
delas estarem presentes ou não.
E a estrutura do dicionário
entrega formas
de a gente lidar com isso
sem problema algum.
Então, eu vou, basicamente,
antes de usar as informações
daquele dicionário,
ver se tem alguma informação
dentro da chave
que eu estou pretendendo usar.
Então, para isso, a nossa regra
vai ser a seguinte.
Se a gente não tiver
aquela chave,
significa que o aluno
não fez o trabalho prático.
E, por isso, eu vou,
basicamente,
exibir uma mensagem falando
que a gente não encontrou tp.
Vamos lá.
Aqui dentro, eu vou começar
com uma condicional para que eu veja
se a chave nota tp está
dentro daquela minha variável.
Então, eu vou colocar
aqui entre aspas,
nota tp em informações
adicionais.
Ou seja, se aquela nota estiver
dentro daquelas informações,
então esse bloco de código
vai ser executado.
Mas como que eu quero
exatamente o contrário,
eu vou colocar uma negação
aqui antes do in.
Então, fica da seguinte forma.
Se a chave nota tp
não estiver dentro do dicionário
informações adicionais,
então eu quero exibir uma mensagem
falando que o tp não foi encontrado.
E como, a partir daqui,
eu não quero executar mais nada,
eu vou apenas escrever um return
para que o Python entenda
que eu não tenho que executar
mais nada daqui para frente
e saia dessa função.
Vamos rodar aqui de novo
o nosso terminal.
Ou melhor, limpar o terminal
e executar novamente a aplicação
para a gente ver como que as coisas
se comportam do jeito que está.
Desse jeito aqui, a aplicação
não entrou na condicional
e seguiu adiante exibindo aquele
nosso dicionário de informações adicionais.
Mas se a partir de agora
eu remover essa informação,
ele entra na condicional
e exibe a mensagem para a gente.
Então eu vou voltar com ela daqui
para que a gente coloque
mais coisa aqui no fluxo
do nosso programa.
E a partir desse momento,
a gente está trabalhando
com a possibilidade
de que a nota está sendo entregue.
Então eu vou colocar um if para ver
se essa nota é maior do que 7.
Se for, então o aluno
está aprovado.
Se não for, então o aluno
está reaprovado.
Então eu vou começar
com mais uma condicional
e eu vou acessar
o informações adicionais
e usar o método get
para pegar aquela chave.
Qual é a chave?
a nota tp.
Eu copio aqui e vejo se
ela é maior do que 7.
Se ela for maior do que 7,
eu vou copiar aqui essa mensagem
e eu vou editar para que ela seja.
"Parabéns, você foi aprovado no tp".
E eu também vou definir
um caso padrão, que é o Else,
para quando essa condicional
não for atendida.
E se esse for o caso,
eu vou exibir a mensagem.
"Infelizmente, você não
foi aprovado no tp".
E pronto.
Deixa eu só tirar essa mensagem
aqui de baixo, limpar o terminal,
e se a gente executa
a nossa aplicação novamente,
a gente tem a mensagem
"Olá aluno, que a gente não mexeu,
e parabéns, você foi aprovado no tp".
Se a gente abaixa
um pouco essa nota aqui,
para algo próximo de 10,
mas um pouco abaixo de 7,
por exemplo, 1,
a gente vai ter a mensagem
"Infelizmente, você não
foi aprovado no tp".
E é dessa forma que a gente
consegue preparar as nossas funções
para que elas consigam lidar
com informações opcionais, ou seja,
que podem ou não serem formadas.
Claro, a gente poderia
também lidar com informações
do tipo se a variável
estiver com um valor vazio,
ou se uma boleana estiver
informando algo,
então eu posso assumir
que uma outra variável tem um valor.
Mas está começando a ficar bem claro
que isso ficaria muito complicado
de dar manutenção e até mesmo
de entender o que está acontecendo.
E da mesma forma com que a gente
tem diversas estruturas de dados,
a gente também tem
diversas possibilidades.
Cada um atende um cenário
e cabe a gente a decidir
qual que é a melhor para o nosso
caso de uso específico.