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
QArgs, 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 QArgs.
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 QArgs, 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 QArgs 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 QArgs
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 QArgs.
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 QArgs 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 que é 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.