Saltar para o conteúdo
← Inforjota
Cursos Inforjota English

Lição 3 de 3 · 13 min · Conteúdo de conceito, não envelhece

Ler código, o mínimo: variáveis, funções e erros

No fim desta lição vais conseguir:

  • Reconhecer uma variável, uma função, uma chamada e um comentário em Python e em JavaScript
  • Ler uma mensagem de erro e encontrar o ficheiro e a linha onde está o problema
  • Ler um diff e dizer, por palavras tuas, o que sai e o que entra

O agente escreve no ecrã: «Alterei a função preco_encomenda no ficheiro loja.py e corrigi o erro da linha 8.» E pede-te licença para gravar.

Se não souberes o que é uma função nem onde está a linha 8, só te resta dizer que sim e ter fé. Esta lição não te ensina a programar. Ensina-te o mínimo para perceberes o que o agente te mostra e para decidires com os olhos abertos.

Dez linhas de Python

Uma encomenda na padaria:

# Preço de uma encomenda na padaria
preco_papo_seco = 0.25

def preco_encomenda(quantidade):
    # Multiplica a quantidade pelo preço de cada um
    return quantidade * preco_papo_seco

total = preco_encomenda(12)
print("Doze papo-secos custam", total, "euros")

Quando corre, escreve: Doze papo-secos custam 3.0 euros.

Há quatro peças aqui:

  • Comentário: as linhas que começam por #. São notas para pessoas. O computador salta-as.
  • Variável: preco_papo_seco = 0.25 guarda o valor 0.25 com aquele nome. É uma caixa com etiqueta. O sinal = quer dizer «guarda», não «é igual».
  • Função: o bloco que começa em def. Tem um nome (preco_encomenda), recebe um ingrediente (quantidade) e devolve um resultado (return). É uma receita escrita uma vez e usada muitas.
  • Chamada: preco_encomenda(12) usa a receita com 12 papo-secos. O resultado fica guardado noutra variável, total.

Em Python, os espaços no início das linhas contam: é assim que se sabe o que pertence à função.

O mesmo em JavaScript

// Preço de uma encomenda na padaria
const precoPapoSeco = 0.25;

function precoEncomenda(quantidade) {
  // Multiplica a quantidade pelo preço de cada um
  return quantidade * precoPapoSeco;
}

const total = precoEncomenda(12);
console.log("Doze papo-secos custam", total, "euros");

As mesmas quatro peças, com outra roupa. O comentário começa por //. A variável leva const antes do nome. A função começa por function e o que lhe pertence fica entre chavetas { }. As linhas acabam em ;. E os nomes juntam as palavras com maiúsculas (precoPapoSeco) em vez de traços (preco_papo_seco).

Dica

Não precisas de decorar nada disto. Quando o agente mostrar código, procura só as quatro peças: o que tem nome e guarda um valor, o que tem nome e faz alguma coisa, onde é usado, e as notas. Isso chega para acompanhares a conversa.

Ler uma mensagem de erro

Imagina que alguém escreveu preco_encomenda(doze) em vez de preco_encomenda(12). O Python responde:

Traceback (most recent call last):
  File "/Users/graca/experiencias/loja.py", line 8, in <module>
    total = preco_encomenda(doze)
                            ^^^^
NameError: name 'doze' is not defined

Parece assustador, mas lê-se de baixo para cima:

  1. Última linha: o que correu mal. NameError: name 'doze' is not defined quer dizer «não conheço nada chamado doze». O computador não sabe que «doze» é 12; só conhece as variáveis que foram criadas.
  2. Logo acima: a linha culpada, com setas ^^^^ debaixo da parte que falhou.
  3. Mais acima: o ficheiro e o número da linha. loja.py, linha 8.

Em JavaScript a arrumação muda um pouco: o erro (ReferenceError: doze is not defined) aparece a meio, e o sítio aparece em cima e nas linhas que começam por at, no formato loja.js:9:30 (ficheiro, linha 9, coluna 30). A ideia é a mesma: o que correu mal, em que ficheiro, em que linha.

Dica

Quando uma mensagem de erro for comprida, ignora tudo o que fale de ficheiros que não são teus. Procura o nome de um ficheiro que reconheces (o teu loja.py, o teu index.html) e o número da linha ao lado.

O diff: o mais importante deste curso

Um diff mostra o que mudou entre duas versões de um ficheiro. É como as «alterações controladas» do Word, mas em texto:

 # Preço de uma encomenda na padaria
-preco_papo_seco = 0.25
+preco_papo_seco = 0.30
  • Linha com − (muitas vezes a vermelho): sai.
  • Linha com + (muitas vezes a verde): entra.
  • Linha sem sinal: fica igual. Está lá só para te situares.

Aqui o preço do papo-seco passou de 0.25 para 0.30. Mais nada.

Porque é que isto é o mais importante? Porque um agente pode escrever trezentas linhas num minuto, e tu não vais ler trezentas linhas. Mas vais ler o diff do que ele quer mudar, antes de dizeres que sim. O diff é o momento em que és tu que mandas. Nas próximas lições vais vê-lo muitas vezes.

Cuidado

Um diff pode esconder estragos em poucas linhas. Desconfia quando vês muitas linhas com − que não pediste, ou mudanças em ficheiros de que não falaste. E não aceites um diff só porque o agente diz «está tudo bem»: a frase dele não é prova, o diff é.

Exercício

Lê este diff da função da padaria:

 def preco_encomenda(quantidade):
-    # Multiplica a quantidade pelo preço de cada um
+    # Dúzia de padeiro: quem leva 13 ou mais paga menos um
+    if quantidade >= 13:
+        quantidade = quantidade - 1
     return quantidade * preco_papo_seco

Como sei que ficou bem sai 1 linha (o comentário antigo) e entram 3 (o comentário novo e duas linhas de código). Ficam iguais a linha do def e a do return. Para o cliente: quem compra 13 ou mais papo-secos paga um a menos.

Se não deu

  • Baralhaste os sinais: tapa com a mão as linhas com +. O que sobra é o «antes». Depois tapa as linhas com −: o que sobra é o «depois».
  • Não percebeste a linha do if: lê-a em voz alta como «se a quantidade for maior ou igual a 13». O que está por baixo, mais para a direita, só acontece nesse caso.
  • Ainda tens dúvidas: é normal. Na lição 1/04 vais ver como pedir ao agente que te explique um erro ou um diff sem mexer em nada.

Dica

Podes sempre pedir ao agente que explique o diff antes de o aceitares. Por exemplo:

Antes de aplicar, explica-me este diff em português simples: o que sai, o que entra e porquê. Não alteres nada ainda.

Vídeos

O que é Lógica de Programação? Explicado com bananas
Primata Hub · 11 min · PT-BR · legendas · Ver no YouTube
Explica com analogias variáveis, condicionais, ciclos e funções, o mínimo para conseguir ler código.
AI Coding 101: How To Read AI-Generated Code
Volo Builds · 12 min · EN · legendas · Ver no YouTube
Mostra como abrir, navegar e compreender código gerado por IA e como trabalhar com ele; canal pequeno, mas é o único que cobre este tema.

Testa o que aprendeste

1. O agente mostra este erro: «File "loja.py", line 8 … NameError: name 'doze' is not defined». O que fazes primeiro?
2. Pediste para mudar só o horário de sábado. O agente propõe um diff com 2 linhas com + e 40 linhas com −. Qual é a melhor reacção?
3. Qual é o melhor pedido ao agente para perceberes uma função que ele escreveu?

Correcções a esta lição (1)
  • : Depois de uma revisão externa: a explicação da pergunta 2 passou a dizer que uma mudança pequena nem sempre dá um diff pequeno (formatação, fins de linha) e que um diff grande é motivo para investigar, não prova de erro. As opções do quiz foram reordenadas.