01 / 16
Lógica de Programação · Sem 13 · Dia 2 (Aulas 3 e 4)

Nomear bem,
refatorar melhor

Um nome de função é documentação viva. Hoje aprendemos a nomear funções de forma semântica em snake_case e a transformar um código "tudo junto" em uma biblioteca de utilidades.

ProfessorGuilherme Antunes CursoTécnico em Desenvolvimento de Sistemas Duração100 minutos (Aula 3 + Aula 4)
02 / 16
Onde estamos

O mapa da Unidade 4

Três semanas construindo as estruturas de dados que sustentam programas reais. Hoje fechamos a unidade — e abrimos a porta para a programação modular.

✓ feito Sem 11

Vetores

Listas, índices, percurso e busca em uma dimensão.

✓ feito Sem 12

Matrizes

Estruturas 2D, agregações por linha e coluna, modelagem de tabuleiros.

● agora Sem 13

Funções e procedimentos

Encapsular, nomear bem e refatorar. Encerramento da Unidade 4.

O fio condutor: aprendemos a guardar dados (vetores e matrizes); agora aprendemos a organizar o código que mexe nesses dados. Funções bem nomeadas são a ponte entre "código que roda" e "código que se lê".
03 / 16
Objetivos do Dia

Ao final, você será capaz de.

01

A3Nomear funções de forma semântica, usando a convenção snake_case do Python

02

A3Distinguir as convenções de nomeação e saber onde cada uma se aplica

03

A4Refatorar um código de vetor "tudo junto" em funções pequenas com responsabilidade única

04

A4Usar if __name__ == "__main__" para tornar o código uma biblioteca reutilizável

04 / 16
De onde viemos

Recap do Dia 1

  • Função → bloco de código nomeado que executa uma tarefa e pode ser chamado quantas vezes quisermos
  • Assinatura → o "cartão de identidade" da função: def nome(parâmetros)
  • Parâmetros → as entradas que a função recebe; argumentos são os valores passados na chamada
  • Retornoreturn devolve um valor a quem chamou; uma função com retorno gera um resultado
  • Função × procedimento → função devolve valor (cálculos); procedimento só executa ações (exibir, salvar) — sem return útil
A grande ideia: uma função troca repetição por reutilização. Escreva a lógica uma vez, chame onde precisar. Hoje vamos cuidar de como nomeá-la e como organizar um programa inteiro em funções.
05 / 16
Aula 3 Construindo o conceito

O nome é documentação viva

Um bom nome de função explica a intenção do código antes mesmo de você ler o corpo dela. Compare: qual destes dois trechos você entende sem precisar abrir a função?

# Nomes ruins — o que isso faz?
def cm(n1, n2):
    return (n1 + n2) / 2

def proc(l):
    for x in l:
        print(x)

# Na hora de usar... mistério:
r = cm(8, 6)
proc(turma)
# Nomes semânticos — lê-se como frase
def calcular_media(nota1, nota2):
    return (nota1 + nota2) / 2

def exibir_alunos(lista_alunos):
    for aluno in lista_alunos:
        print(aluno)

# Na hora de usar... transparente:
media = calcular_media(8, 6)
exibir_alunos(turma)
Verbo + substantivo: funções que fazem algo costumam começar por um verbo no infinitivo — calcular_media, adicionar_musicas_de_rock, exibir_alunos. Só de ler o nome, você sabe o que esperar do retorno e do efeito.
06 / 16
Aula 3 Convenções

Quatro convenções de nomeação

O nome importa; o estilo de escrever o nome também. Cada linguagem adota convenções. Em Python, a recomendação oficial (PEP 8) é clara:

minhaVariavel

camelCase — primeira palavra minúscula, demais com inicial maiúscula, sem espaços.

comum em Java / JavaScript
MinhaVariavel

PascalCase — todas as palavras com inicial maiúscula. Em Python, reservado para nomes de classes.

classes em Python
minha_variavel

snake_case — tudo minúsculo, palavras separadas por _. O padrão Python para funções e variáveis.

✓ recomendado em Python
MINHA_VARIAVEL

UPPER_CASE_SNAKE_CASE — tudo maiúsculo. Em Python, reservado para constantes (valores que não mudam).

constantes em Python
Regra de bolso em Python: snake_case para funções e variáveis, PascalCase para classes, UPPER_CASE para constantes. Consistência vale mais que preferência pessoal — o time inteiro lê o mesmo estilo.
07 / 16
Aula 3 Pause e responda

Qual a convenção recomendada?

Em Python, qual das convenções de nomeação é a mais recomendada para escrever os nomes de funções e variáveis?

AminhaVariavel (camelCase)
BMinhaVariavel (PascalCase)
Cminha_variavel (snake_case)
DMINHA_VARIAVEL (UPPER_CASE_SNAKE_CASE)
snake_case vence: a PEP 8 — o guia oficial de estilo do Python — recomenda snake_case para funções e variáveis. UPPER_CASE fica reservado para constantes, e PascalCase para nomes de classes. As outras opções são convenções de outras linguagens.
08 / 16
Aula 4 Ponte

De nomes bons a código organizado

Já sabemos nomear funções de forma que se leiam como frases. Mas nomear bem é metade da história. A outra metade é quebrar um programa grande em funções pequenas, cada uma com uma única responsabilidade. Vamos pegar um código de vetor "tudo junto" e refatorá-lo em uma biblioteca de utilidades: funções reutilizáveis que leem, exibem e calculam — separadas e testáveis.

09 / 16
Aula 4 Construindo o conceito

Biblioteca de utilidades & __main__

Uma biblioteca é só um conjunto de funções úteis que outros arquivos podem importar e reutilizar. Mas há um problema: se o arquivo tem testes no fim, eles rodam ao importar. A solução é o bloco if __name__ == "__main__".

# utilidades.py — a biblioteca
def calcular_soma(vetor):
    return sum(vetor)

def calcular_media(vetor):
    if len(vetor) == 0:
        return 0
    return sum(vetor) / len(vetor)

# Teste só roda se executar ESTE arquivo
if __name__ == "__main__":
    dados = [10, 20, 30]
    print("Soma:", calcular_soma(dados))
    print("Média:", calcular_media(dados))

Quando você executa utilidades.py diretamente, o Python define __name__ == "__main__" e os testes rodam.

Quando outro arquivo importa a biblioteca, __name__ vira "utilidades" — e o bloco de teste não roda.

# app.py — reutiliza, sem disparar testes
from utilidades import calcular_media

print(calcular_media([7, 8, 9]))
# imprime só 8.0 — nada do bloco de teste
Por que isso importa: sem o bloco __main__, importar a biblioteca dispararia todos os print de teste — efeitos colaterais indesejados. Com ele, as funções viram peças reutilizáveis sem "barulho".
10 / 16
Aula 4 Pause e responda

Para que serve o __main__?

Qual a principal vantagem de colocar o código de teste de um módulo dentro do bloco if __name__ == "__main__"?

AImpedir que os testes rodem ao importar o módulo, evitando efeitos colaterais.
BExecutar os testes automaticamente ao importar o módulo.
CTornar o código mais rápido.
DÉ a única forma de fazer um import funcionar em Python.
O bloco protege o import: o código dentro de if __name__ == "__main__" só roda quando o arquivo é executado diretamente. Ao ser importado por outro arquivo, esse bloco é ignorado — as funções ficam disponíveis sem disparar os testes. Não tem nada a ver com velocidade nem é obrigatório para import.
11 / 16
Aula 4 Refatoração

Vetor: antes × depois

O mesmo programa — ler um vetor, exibi-lo e calcular soma, média e maior valor — escrito de duas formas. À esquerda, tudo no nível principal. À direita, dividido em funções com responsabilidade única.

# ANTES — tudo junto, no nível principal
vetor = []
n = int(input("Quantos números? "))
for _ in range(n):
    vetor.append(float(input("Valor: ")))

print("Vetor:", vetor)

soma = 0
for v in vetor:
    soma += v
print("Soma:", soma)

media = soma / len(vetor)   # quebra se vazio!
print("Média:", media)

maior = vetor[0]
for v in vetor:
    if v > maior:
        maior = v
print("Maior:", maior)
# DEPOIS — biblioteca de funções
def ler_vetor():
    vetor = []
    n = int(input("Quantos números? "))
    for _ in range(n):
        vetor.append(float(input("Valor: ")))
    return vetor

def exibir_vetor(vetor):        # sem retorno
    print("Vetor:", vetor)

def calcular_soma(vetor):       # com retorno
    return sum(vetor)

def calcular_media(vetor):      # trata vazio
    if len(vetor) == 0:
        return 0
    return calcular_soma(vetor) / len(vetor)

def encontrar_maior(vetor):
    if len(vetor) == 0:
        return None
    return max(vetor)

if __name__ == "__main__":
    dados = ler_vetor()
    exibir_vetor(dados)
    print("Soma:", calcular_soma(dados))
    print("Média:", calcular_media(dados))
    print("Maior:", encontrar_maior(dados))
O detalhe que salva: em calcular_media, sempre cheque if len(vetor) == 0 antes de dividir. Sem isso, uma lista vazia causa ZeroDivisionError. A versão "antes" tem exatamente esse bug — a refatoração é a chance de corrigi-lo.
12 / 16
Aula 4 Sua vez · Desafio

A biblioteca de utilidades

Refatore um código "tudo junto" que opera sobre um vetor, separando-o em funções pequenas com responsabilidade única. Durante a aula.

Individual 45 minutos Durante a aula
1

Identifique os blocos do código: leitura, exibição e cálculos.

2

Crie uma função para ler e retornar o vetor.

3

Crie uma função para exibir o vetor.

4

Crie funções para soma, média e maior valor.

5

Organize o programa principal usando chamadas de função.

6

Teste com diferentes tipos de vetores.

Materiais: computador com ambiente de desenvolvimento; editor/IDE; caderno e caneta. Garanta funções com retorno (cálculos) e sem retorno (exibição), e trate a lista vazia na média.
13 / 16
Aula 3 Sua vez · Colocando em prática

Refatorar renomeando funções

Pegue um programa que já funciona e melhore seus nomes: renomeie as funções com nomes claros em snake_case, ajuste variáveis e reorganize para maior clareza.

Individual 45 minutos Entregar até a próxima aula Entregável: .py + relato
1

Execute o código e entenda o que ele faz.

2

Comente o que cada função faz.

3

Renomeie as funções com nomes claros (snake_case).

4

Garanta funções com e sem retorno.

5

Melhore nomes de variáveis e reorganize.

6

Teste com lista normal e lista vazia.

7

Salve o programa final em .py.

8

Escreva um breve relato das melhorias.

Duas atividades, dois focos: a da Aula 4 quebra um código em funções de vetor; esta, da Aula 3, parte de um código que já tem funções e melhora seus nomes. Juntas, cobrem nomear bem e organizar bem.
14 / 16
Saiba mais

Para ir além

Dois vídeos curtos que aprofundam os temas de hoje — nomeação e subrotinas.

Aula 3
IBICT — "#9 Boas práticas na nomeação dos arquivos para compartilhamento"

YouTube, 7 jul. 2022. Sobre nomear com clareza e consistência.

youtube.com/watch?v=I6tXlHPMxHg

Aula 4
BÓSON TREINAMENTOS — "Subrotinas (funções e procedimentos)"

YouTube, 23 jun. 2022. Lógica de programação aplicada a funções.

youtube.com/watch?v=9kJrgn-9PFY

15 / 16
Então ficamos assim…

O que aprendemos hoje

  • Nomes semânticos → o nome da função é documentação viva; calcular_media diz mais que cm
  • snake_case em Python → padrão para funções e variáveis; PascalCase para classes, UPPER_CASE para constantes
  • Com retorno × sem retorno → funções com return geram valores (cálculos); sem retorno organizam ações (exibição, interação)
  • Refatorar em biblioteca → quebrar "tudo junto" em funções de responsabilidade única melhora a estrutura e facilita testes
  • if __name__ == "__main__" → evita efeitos colaterais ao importar; testes só rodam ao executar o arquivo diretamente
Encerramento · Unidade 4

Com funções, fechamos a unidade de estruturas de dados e programação modular. A próxima unidade abre uma nova etapa do componente — partindo de tudo que você já sabe encapsular e reutilizar.

16 / 16
Referências

De onde veio cada coisa

PYTHON SOFTWARE FOUNDATION. PEP 8 — Style Guide for Python Code. Disponível em: peps.python.org/pep-0008. Acesso em: 30 mai. 2026. · PEP 257 — Docstring Conventions: peps.python.org/pep-0257.

PYTHON SOFTWARE FOUNDATION. Modules — The Python Tutorial. Disponível em: docs.python.org/3/tutorial/modules.html. Acesso em: 30 mai. 2026.

GOOGLE. Google Python Style Guide. Disponível em: google.github.io/styleguide/pyguide.html. Acesso em: 30 mai. 2026.

FOWLER, M. Refatoração: aperfeiçoando o design de códigos existentes. 2. ed. São Paulo: Novatec, 2020. · HUNT, A.; THOMAS, D. O programador pragmático. Porto Alegre: Bookman, 2010.

IBICT. #9 Boas práticas na nomeação dos arquivos para compartilhamento. YouTube, 7 jul. 2022: youtube.com/watch?v=I6tXlHPMxHg. · BÓSON TREINAMENTOS. Subrotinas (funções e procedimentos). YouTube, 23 jun. 2022: youtube.com/watch?v=9kJrgn-9PFY. · GEEKSFORGEEKS. What does if __name__ == "__main__" do?: geeksforgeeks.org.

Base institucional: SEDUC-SP. Educação Profissional Paulista — Técnico em Desenvolvimento de Sistemas. Componente 1, Unidade 4, Semana 13 (SISANO1C1B2S13A3 e SISANO1C1B2S13A4).

Identidade visual · adaptação para apresentação HTML por Guilherme Antunes