0% acharam este documento útil (0 voto)
12 visualizações

Modulo 7 - Refatorando Com Funções

Refatorando com funções

Enviado por

Eloi favero ctic
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
12 visualizações

Modulo 7 - Refatorando Com Funções

Refatorando com funções

Enviado por

Eloi favero ctic
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 5

© E.L.

Favero Algoritmos em Python 52

Capítulo

7 REFATORANDO COM FUNÇÕES


Apresentamos o conceito de abstração, uso de funções definidas pelo
programador, para organizar e refatorar o código dos programas. Por fim,
apresentamos uma discussão do pensamento computacional sobre um kit
mínimo de comandos necessários na programação.

7.1 Refatorando o código


Refatorar o código é reescrevê-lo de forma que ele ainda executa o mesmo
comportamento, tenha o mesmo efeito, mas onde o código esteja escrito de uma forma mais
simples, mais elegante, mais fácil de ler e compreender. No capítulo anterior, o programa
que diz se é positivo, zero ou negativo foi reescrito de várias formas, qual é a melhor
versão? É possível encontrar outra forma de escrita melhor?

Vamos fazer um programa que lê duas variáveis int e mostra o valor da maior delas
(maior ou igual). Se forem iguais mostre uma delas.

#Ler dois valores e dizer qual é menor


x=int(input('digite x:'))
y=int(input('digite y:'))
print('valores lidos :',x, y)
if x<y:
print('o menor é x:',x)
elif y<x:
print('o menor é y:',y)
else:
print('eles são iguais:',y)
>>>
digite x:6
digite y:3
valores lidos : 6 3
o menor é y: 3
© E.L.Favero Algoritmos em Python 53

Para dificultar mais, agora vamos fazer o mesmo com 3 valores. Ler os 3 valores e dizer
quem é o menor.

#Ler 3 valores e dizer qual é menor


x=int(input('digite x:'))
y=int(input('digite y:'))
z=int(input('digite z:'))
print('valor lidos :',x, y,z)
if x<y and x<z:
print('o menor é x:',x)
elif y<x and y<z:
print('o menor é y:',y)
elif z<x and z<y:
print('o menor é z:',z)
else:
print('não tem só um mínimo:')

7.2 Refatorando com funções


Agora para refatorar estes códigos de escolha do menor, vamos introduzir o conceito de
abstração. Uma função é uma abstração, dar um nome a um pedaço de código. Já
introduzimos o conceito de função, já usamos algumas, mas como definir nossas próprias
funções?
Uma função delimita um bloco de comandos, iniciando com a palavra def(ine)
seguido de (), com ou sem parâmetros. No exemplo abaixo, em mini(a,b) entram as
variáveis a,b (parâmetros) e sai ou a ou b, o menor dos valores. A saída é marcada por
return (retorna).

def mini(a,b):
if a<b: return a
else : return b

Para usar esta função apresentamos abaixo um programa que lê dois valores e chama a
função mini() para escolher o menor. Def define a função que é chamada neste caso dentro
de um comando de atribuição.

#ler dois valores e dizer quem é o menor


x=int(input('digite x:'))
y=int(input('digite y:'))
print('valores lidos :',x, y)
def mini(a,b):
if a<b: return a
else : return b
m=mini(x,y) # chama a função
print('o menor é:',m)
© E.L.Favero Algoritmos em Python 54

Quanto a escrita do código podemos mudar a posição da função, podemos trazer a


definição dela no início do código, antes da leitura dos valores, como segue.

#ler dois valores e dizer quem é o menor


def mini(a,b):
if a<b: return a
else : return b
x=int(input('digite x:'))
y=int(input('digite y:'))
print('valores lidos :',x, y)
m=mini(x,y) # chama a função
print('o menor é:',m)

No cabeçalho da função entram os parâmetros, em mini(a,b) a e b são dois parâmetros


formais (a forma). Em cada função deve existir um valor de saída que vem depois da
palavra return. Tudo o que está indentado dentro da função é o seu corpo. Assim a função
tem nome, parâmetros de entrada, um bloco de comandos com comandos de saída em seu
corpo. Segue mais um exemplo, agora vamos ler 3 valores e dizer quem é o menor dos três.

#ler três valores e dizer quem é o menor


def mini(a,b): # parametros formais
if a<b: return a
else : return b
x=int(input('digite x:'))
y=int(input('digite y:'))
z=int(input('digite z:'))
print('valor lidos :',x, y, z)
m=mini(x,y) #parametros efetivos
m=mini(m,z)
print('o(um) menor é:',m)

Utilizamos 2 linhas, uma para cada chamada, para definir quem é o valor mínimo, mas
poderíamos ter usado uma versão do print mais complexa, com menos linhas:
m=mini(mini(x,y),z). Aqui a função mini() está sendo reusada duas vezes, uma dentro da
outra; os parâmetros nas chamadas de função são ditos efetivos (substituem os formais).
Uma das grandes vitórias do pensamento computacional é o reuso de fragmentos de
código, pois com isso os códigos ficam mais compactos, mais coesos e mais simples.

7.3 Fluxograma de função


Abaixo mostramos como fica o fluxograma de uma função, como uma caixa preta ele
esconde o código da função mini() do algoritmo principal; no código principal a função é
chamada num comando de atribuição. Neste exemplo a função mini é chamada duas vezes.
© E.L.Favero Algoritmos em Python 55

Fluxogramas da função mini() e do algoritmo escreve o menor de 3 valores

7.4 Pensamento computacional: refatorando com funções


No percorrer do texto, vimos vários conceitos de programação. Vamos nos aprofundar e
familiarizar com eles aos poucos. Muitos assuntos são apenas introduzidos para mais
adiante serem mais detalhados. Consideramos uma abordagem do geral para o específico,
sendo que a cada capítulo novos conceitos são introduzidos e ou antigos conceitos são
mais detalhados, por exemplo: apresentamos funções ainda no capítulo 2, agora
aprofundamos um pouco mais, mas todo o capítulo 11 é sobre Funções.
Iniciamos com variáveis e expressões; depois vimos o comando de atribuição. Numa
linha de comandos podemos encadear vários comandos de atribuição numa sequência (ex.
a=1;b=3+a;x=1+b;print(x) ), onde um é executado depois do outro em uma sequência,
conforme a ordem de leitura. A sequência de comandos também pode seguir a ordem de
leitura de cima para baixo. Chamadas de função também podem ser horizontais,
sequenciadas em uma mesma linha, pois são parte de comandos de atribuição.
Para compor o kit de ferramentas de pensamento computacional, de pensamento de
algoritmos, vamos precisar de mais alguns elementos. Na tabela abaixo apresentamos um
kit mínimo, começando por variáveis, comandos de atribuição, comandos de sequência,
comandos de entrada e saída, comandos condicionais, comandos de repetição e comandos
de abstração.
Vamos nos aprofundar nos comandos de repetição nos próximos capítulos. Já
apresentamos as funções como uma forma para organizar os códigos através do conceito
de abstração, dar nome para um grupo de comandos.

Estruturados Tipos de comandos Exemplos


Verticais 1-Variáveis, objetos e expressões a=1;
e/ou 2-Comando de atribuição c=[2,5,9]
horizontais 3-Sequência de comandos a=1;b=3+a;x=1+b;print(x)
4-Comandos de entrada e saida input() print()
Só verticais, 5-Comando condicional if,
só pela elif,
indentação else:
6-Comandos de repetição for,
while
7-Mecanismo de abstração def
© E.L.Favero Algoritmos em Python 56

Esta tabela apresenta os tipos de comandos necessários para codificação de qualquer


algoritmo em Python. Os primeiros 4 tipos podem ser estruturados verticalmente ou
horizontalmente, mas os 3 últimos só verticalmente pela indentação.

7.5 Exercícios (5)


Para cada exercício executar com pelo menos uma entrada de dados, para verificar
se a resposta está correta.

E7.1 Faça a função maxi() que retorna o máximo de dois valores. Similar a função mini().

E7.2 Usando maxi() leia a,b,c,d encontre o máximo dos 4 valores.

E7.3 Usando maxi() leia a,b,c e escreva do maior para o menor. Por exemplo,
a=7,b=15,c=2 a saída deve ser 15 7 2.
Sugestão de pseudo-código:
ler a,b,c
max=maxi(a,maxi(b,c))
se a=max então: se b>c imprima (a, b, c)
senão imprima (a, c, b)
senão b=max...
senão c=max...

E7.4 Faça a função inter(médio) de três valores. Por exemplo, a=7,b=15,c=2 o intermédio
é 7. De a=15,b=15, c=7. O intermédio é 15. Etc.
Sugestão de pseudo-código:
Def inter(a,b,c):
if a<=b<=c or c<=b<=a return b
elif ...

E7.5 Usando maxi(), inter() e mini() leia a,b,c e escreva do maior para o menor. Por
exemplo, a=7,b=15,c=2 a saída deve ser 15 7 2.

7.5.1 Perguntas conceituais (6)


Responda com no mínimo 10 palavras e no máximo 20 palavras:
C7.1 O que é bloco de comandos?
C7.2 Qual é o papel da indentação?
C7.3 Quais são os tipos de comandos estruturados pela indentação?
C7.4 Quais os comandos que podem ser programados numa sequência horizontal dentro
de uma mesma linha?
C7.5 O que é refatorar código?
C7.6 O que é reuso de código?
C7.7 O que é um pseudo código?
C7.8 O que é um fluxograma?

Você também pode gostar