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.25guarda 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:
- Última linha: o que correu mal.
NameError: name 'doze' is not definedquer dizer «não conheço nada chamado doze». O computador não sabe que «doze» é 12; só conhece as variáveis que foram criadas. - Logo acima: a linha culpada, com setas
^^^^debaixo da parte que falhou. - 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
Explica com analogias variáveis, condicionais, ciclos e funções, o mínimo para conseguir ler código.
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
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.