Article image
Ricardo Francisco
Ricardo Francisco16/11/2023 09:43
Compartilhe

Pretensa anatomia de uma função — Parte I

  • #Lógica de Programação
  • #Python

Bom, eu não sei de vocês, mas eu ando vendo muitas funções por aí. Elas são entes muito uteis em quaisquer linguagens de programação que as suportem, podem atingir um alto grau de complexidade, dada a natureza de encapsulamento de blocos de código, acumulando vários pequenos blocos de código em apenas um único comando.

Aqui, vamos falar de Python, mas, em CNTP (Condições Normais de Temperatura e Pressão), o mesmo meio que vale para outras linguagens, sendo que cada uma pode ter o seu temperinho, mas, em sua lógica, a premissa básica anteriormente descrita permanece.. Basicamente uma função é:

“uma regra que recebe zero ou mais entradas e retorna a saída correspondente.”

Ou:

Uma sequência nomeada de instruções que executa uma operação de computação.

Ou seja, um baita atalho e economia de tempo no dia a dia de quem precisa lidar com esses afazeres programáticos. Mas, como diria Jack, o Estripador, vamos por partes:

1.Declarar e chamar uma função: Em tempos imemoriais, o primeiro passo a se tomar era o de nomear e declarar uma função. Nos dias de hoje, embora não pareça fazer sentido, essa prática remete a um tempo em que criar funções tivesse algum tipo de dependência por parte do compilador, do computador, algum tipo de biblioteca exclusiva ou numa época onde computadores eram menos comuns, mais compartilhados, a ponto desse ser um procedimento pra que se certificasse da existência de tais estruturas no equipamento utilizado.

Porque fazer nos dias de hoje? Eu, especialmente eu, QUASE SEMPRE esqueço os benditos dois pontos após aos argumentos da função…

image

GIF de altíssima resolução, agente vê por aqui (mas pode ver no Youtube também, se quiser)

(2) Função 1 — YouTube

2. Interação com usuário: Aqui, já temos o nosso primeiro ponto de inflexão com a funcionalidade da função (embora nada aqui não possa ser modificado, com o correr do tempo), que é o de com essa função ira lidar com suas entradas de dados. A função deverá interagir com o usuário, ou ela será uma operação direta?

No primeiro caso, configuramos a comando input na função para tais interações, lembrando de toda burocracia que isso exige, como:

  • Descrição clara e funcional da entrada;
  • Preocupação no controle do tipo da entrada (lembre que, ao menos em Python, o resultado de input sempre será uma string. Isso é bom ou ruim, mais pra frente?);
  • Salvar essa entrada em uma variável onde fique claro seu trabalho dentro da função (e eu fiquei um bom tempo pensando em alternativas pra não escrever a “sua função na função”).

No caso de optar por argumentos em uma função, é preciso pensar em algumas questões, como indicá-los claramente na formulação da função, evitar argumentos arbitrários e, se aplicável, setar argumentos com valores padrão, sempre tendo em mente que, ao serem utilizados, os argumentos padrão serão avaliados apenas uma única vez, o que pode gerar problemas com elementos mutáveis.

Usar argumentos nomeados também é uma boa opção, sempre visando uma melhor visualização do fluxo de dados, tendo em mente que variáveis chamadas dentro de uma função tem escopo local, ou seja, existem apenas dentro de uma função.

image

Mantenha sempre seus óculos limpos, nessa hora eu esqueci de limpar os meus...

Função 2 — YouTube

Aqui, chegamos a dois potenciais problemas: o input, do jeito que está aceita qualquer entrada, e, relembrando, toda entrada vinda de input por padrão sempre será uma string.

3. Tratamento de erros e conversão de tipos: A vantagem de deixar a entrada nos dedos de salsich… quer dizer, nas mãos do usuário e poder dar uma amplitude no uso de uma função. O problema é justamente ter de controlar toda essa liberdade, a fim de não deixar o código quebrar. Pra isso, temos de tomar certas atitudes, no sentido de começar a tratar possíveis erros de entradas e fazer a devida conversão de tipos, para adequarmos o que está em campo.

Um ponto chave desse trabalho, e por isso talvez eu use o print de trinta em trinta segundos), é o acompanhamento do tipo dos dados no decorrer da função, a cada retorno e a cada bloco. Para que o encapsulamento da função funcione de maneira correta se faz necessário esse acompanhamento.

No nosso caso, ao optarmos por input, para interagir com o usuário, corremos o risco de que ele digite um texto. Para evitarmos tal ato, simplesmente formataremos o input como um numero inteiro, fazendo uso de int().

Outro ponto é que, para evitarmos que o usuário digite números fora do alcance de nossa proposta, “digite um numero menor ou igual a cem”, usaremos uma estrutura condicional. cuja função nessa etapa é de verificar condições e mudar comportamentos, à partir de avaliação de atendimento ou não de uma condição lógica, que sempre retornará verdadeiro ou falso.

Em Python, temos as opções de usarmos as seguintes estruturas:

  • while: serve para quando temos um determinando numero de vezes para executarmos uma rotina, e por isso é mais usada como uma estrutura de repetição, embora também possa ser utilizada para se repetir até que uma condição seja atendida. Sua contraparte de estrutura de repetição, que atua quando se tem um numero sabido de repetições seria for. Logicamente, ele trabalha com uma ideia de ‘enquanto algo é verdadeiro, responda com uma ação”;
  • if, elif e else: aqui, é a lógica mais básica de uma uma comparação, que orienta o direcionamento à partir de uma ou mais condições. Logicamente, ela trabalha com a ideia de que “se algo é ‘A’, faça algo; senão faça outra coisa”. No momento, é a que usaremos para fazermos a nossa verificação;

https://www.youtube.com/watch?v=IFxK04-MpNo

E aqui, vou fazer uma pausa pro café, pois esse trecho ficou um pouco logo (e minha cota de gifs com selo de qualidade “Organizações Tabajara” se findou). Logo menos retorno com a outra parte desse artigo. Inté!

Uma consulta rápida foi feita nos livros “Pense em Python”, de Allen B. Downey, que pode ser lido aqui.
E também no livro de Joel Grus, “Data Science do Zero”.
Compartilhe
Comentários (0)