Além do puts: inspeção de estado ao vivo

Prévia grátis 2 min de leitura

O ciclo do puts

Um primeiro movimento típico de debug: espalhar chamadas de puts pelo método e rodar o programa inteiro de novo. Você lê o que foi impresso, decide que não basta, adiciona mais puts e roda outra vez.

def total_price(items)
  subtotal = items.sum
  puts "subtotal: #{subtotal}"
  subtotal * 1.1
end

Essa linha responde uma pergunta, decidida com antecedência: "qual é o subtotal". Quando surge outra pergunta no meio da investigação ("espera, o que tem dentro de items?"), o arquivo precisa de outro puts, e o programa precisa rodar de novo do início.

Um tipo diferente de ferramenta

E se a execução pudesse pausar naquela linha, para você fazer qualquer pergunta de forma interativa sobre os valores que já estão ali? Isso é o binding.irb, colocado direto dentro de um método:

From: .../total_price.rb @ line 5 :

    3: def total_price(items)
    4:   subtotal = items.sum
 => 5:   binding.irb
    6:   subtotal * 1.1
    7: end

subtotal
60

Nenhum puts foi escrito para subtotal nesse arquivo. Ele foi perguntado depois, no prompt pausado. É como digitar no bin/rails console, só que esse prompt já começa dentro de um método rodando.

Por que isso importa, na prática

Debug com puts pede que você preveja cada pedaço útil de estado antes de rodar o programa uma única vez. O binding.irb tira essa exigência. Depois da pausa, você digita qualquer expressão válida naquele ponto do código, inclusive as que só surgem depois da primeira resposta. A aula 2 mostra o que é o binding.irb e de onde ele vem.

Pontos-chave

  • Debug com puts exige decidir cada pergunta com antecedência, e depois rodar o programa inteiro de novo para cada pergunta nova.
  • binding.irb pausa a execução naquela linha e abre um prompt ao vivo com o estado real disponível.
  • Nesse prompt, subtotal responde imediatamente, sem nada impresso pra ele com antecedência.
  • O resto deste curso cobre o que binding.irb é, o que está disponível nesse prompt, e como retomar a execução depois.
Aula 1 de 7 · grátis

Continue com a aula 2

O que binding.irb realmente é

Explica que binding captura o escopo local e Binding#irb abre uma sessão IRB aninhada, sem precisar de Rails.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...