3.

Um Rápido (e indolor, eu espero) passeio através do Ruby (com quadrinhos da raposa)

[o]

As raposas aparecem.

Isso, essas são as duas. Minha asma está atacada, preciso dar uma respirada num ar medicinal agora. Já volto.

Raposas em quadrinhos.

Disseram-me que este capítulo combina bem com uma toalha. Algo para você enxugar seu rosto quando o suor começar a escorrer.

De fato, estaremos percorrendo toda a linguagem muito rápido. Será como acender todos os fósforos de uma caixa do jeito mais rápido possível.

1. Linguagem e EU QUERO DIZER Linguagem

Nossos amigos, aqueles dois raposos indefesos, finalmente deram conta da gravidade da situação em que se encontram.

Minha consciência não me deixa chamar o Ruby de uma linguagem de computador. Isso implica que a linguagem funciona primariamente em termos de computador. Que a linguagem é criada para acomodar o computador, única e exclusivamente. E portanto, nós, os programadores, somos estrangeiros, buscando cidadania no país dos computadores. É a linguagem do computador e nós somos os tradutores para o mundo.

Mas como você a chamaria quando seu cérebro começa a pensar nessa linguagem? Quando você começa a usar as próprias palavras e coloquialismos da linguagem para se expressar. Diga, o computador não consegue fazer aquilo. Como pode então ser a linguagem do computador? Ela é nossa, nós a falamos nativamente!

Nós não podemos mais verdadeiramente chamá-la de linguagem de computador. Ela é papo de programador. É a linguagem dos nossos pensamentos.

Leia o trecho a seguir em voz alta.

5.times { print "Odelay!" }

No inglês, as pontuações (pontos, exclamações, parênteses) são mudas. Pontuação agrega significado às palavras, dá pistas da intenção do autor na frase. Vamos então ler o trecho assim: Cinco vezes imprima “Odelay!”.

Que é exatamente o que este pequeno programa Ruby faz. A exclamação espanhol mutante do Beck será impressa cinco vezes na tela do computador.

Leia o trecho a seguir em voz alta.

exit unless "restaurante".include? "aura"

Aqui estamos realmente fazendo um teste básico. Nosso programa vai exit (sair) (o programa vai terminar) unless (a menos que) a palavra restaurante contenha (ou inclua) a palavra aura. Novamente, em Português: Saia a nao ser que a palavra restaurante inclua a palavra aura.

Já viu alguma linguagem de programação usar a pontuação tão eficientemente? Ruby usa a pontuação, como exclamações e interrogações, para melhorar a legibilidade do código. Nós estamos fazendo uma pergunta no código acima, então por quê não deixar isso aparente?

Leia o trecho a seguir em voz alta.

  ['torrada', 'queijo', 'vinho'].each { |comida| print comida.capitalize  }

Enquanto este pedaço de código é menos legível e parecido com uma frase que o anterior, eu ainda assim o encorajo a ler em voz alta. Enquanto o Ruby algumas vezes soa como Português noutras soa como um breve Português. Totalmente traduzido para Português, você poderia ler desta maneira: Com as palavras ‘torrada’, ‘queijo’, e ‘vinho’: pegue cada comida e a imprima com a primeira letra maiúscula.

O computador então responde de forma cortês: Torrada, Queijo e Vinho.

Neste ponto, você deve estar se perguntando como essas palavras realmente funcionam juntas. O cara-pálida deve estar imaginando o que os pontos e chaves significam. Vou discutir as várias partes da conversa em seguida.

Tudo que você precisa saber até agora é que o Ruby é basicamente construído de sentenças. Elas não são exatamente sentenças em inglês. Elas são pequenas coleções de palavras e pontuação que expressam um simples pensamento. Estas sentenças podem formar livros. Elas podem formar páginas. Elas podem formar romances inteiros, quando combinadas. Romances que podem ser lidos por humanos, mas também por computadores.

2. As Partes da Conversa

Assim como a faixa branca nas costas do gambá e a branca e enrolada grinalda da noiva, várias partes da conversa têm sinalizações visuais para te ajudar a identificá-las. Pontuação, maiúsculas e minúsculas, irão ajudar seu cérebro ver pedaços de código e reconhecê-los intensamente. Sua mente vai gritar freqüentemente Hey, Eu conheço aquele cara! Você também poderá contar vantagem em conversas com outros Rubistas.

Tente se focar na aparência de cada uma destas partes da conversa. O resto do livro vai entrar em detalhes. Eu darei pequenas descrições de cada parte da conversa, mas você não precisa entender a explicação. Ao término deste capítulo, você deve estar apto a reconhecer cada parte de um programa Ruby.

Variáveis

Qualquer palavra simples, em minúsculas, é uma variável no Ruby. Variáveis podem ser compostas por letras, dígitos e travessões.

x, y, banana2 ou telefone_para_codorna são exemplos.

Variáveis são como apelidos. Lembra quando todo mundo te chamava de Pete Fedido? As pessoas diziam: “Vem aqui, Pete Fedido!” E todo mundo milagrosamente sabia que você era o Pete Fedido.

Com variáveis, você dá um apelido a algo que você use freqüentemente. Por exemplo, vamos dizer que você tem um orfanato. É um orfanato maléfico. E quando o Papai Warbucks vem comprar mais crianças, nós insistimos que ele nos pague cento e vinte um reais e oito centavos pelo ursinho de pelúcia da criança, o qual ela ficou apegada nos momentos sombrios que passou vivendo neste pesadelo de custódia.

taxa_de_urso_de_pelucia = 121.08

Mais tarde, quando você pegar ele no caixa (uma registradora turbinada que roda Ruby!), você vai precisar juntar as somas em um total.

total = taxa_de_orfao + taxa_de_urso_de_pelucia + gorjeta

Estes apelidos para variáveis vêm a calhar. E no submundo sedento das vendas infantis, qualquer ajuda é bem-vinda, tenho certeza.

Eles zombam dos meus exemplos.

Números

O tipo mais básico de número é um integer (número inteiro), uma série de dígitos que podem começar com um sinal de menos ou de mais.

1, 23 e -10000 são exemplos.

Vírgulas não são permitidas em números, mas travessões sim. Então se você acha melhor marcar os milhares para que o número fique mais legível, use um travessão.

habitantes = 12_000_000_000

Números decimais são chamados de floats (números reais ou ponto flutuante) no Ruby. Números reais consistem em números com casas decimais ou em notação científica.

3.14, -808.08 e 12.043e-04 são exemplos.

Strings (Conjunto de Caracteres)

Strings são quaisquer tipos de caracteres (letras, dígitos, pontuação) cercados por aspas. Aspas, simples ou duplas, são usadas para se criar strings.

"laboratoriodomar", '2021' ou "Estes quadrinhos são hilários!" são exemplos.

Quando você cerca caracteres em aspas, eles ficam guardados juntos como uma string só.

Pense num repórter que está anotando as baboseiras de uma celebridade incoerente. “Eu estou muito mais sábia,” disse Avril Lavigne. “Agora eu sei como as coisas são — o que você tem que fazer e como trabalhar isso.”

  frase_da_avril = "Eu estou muito mais sábia.  Agora eu sei 
  como as coisas são -- o que você tem 
  que fazer e como trabalhar isso."

Então, assim como nós guardamos um número na variável taxa_de_urso_de_pelucia, agora nós estamos guardando uma coleção de caracteres (uma string) na variável frase_da_avril. O repórter envia esta frase para impressão, que por acaso usa Ruby para operar as impressoras.

 <setup>
   frase_da_oprah = "O"
   frase_da_avril = "A"
   debate_ashlee_simpson = "D"
 </setup>
 print frase_da_oprah
 print frase_da_avril
 print debate_ashlee_simpson

Eles desejam estar nos meus exemplos.

Symbols (Símbolos)

Símbolos são palavras que parecem variáveis. Novamente, elas podem conter letras, dígitos e travessões. Mas elas começam com dois pontos.

:a, :b, ou :ponce_de_leon são exemplos.

Símbolos são strings leves. Geralmente, símbolos são usados em situações em que você precisa de uma string mas não vai imprimi-la na tela.

Você pode dizer que um símbolo é pouco mais digerível para o computador. É como um anti-ácido. Os dois pontos indicam as bolhas saindo do estômago do seu computador enquanto ele digere o símbolo. Ah. Doce, doce alívio.

Bacon Pedaçudo!!

Constantes

Constantes são palavras como variáveis, mas constantes são maiúsculas. Se variáveis são os substantivos do Ruby, então pense nas constantes como substantivos próprios.

Time, Array ou Bunny_Lake_Desapareceu são exemplos.

Em inglês, substantivos próprios têm a primeira letra maiúscula. O Edifício Empire State. Você não pode simplesmente mudar o Edifício Empire State. Você não pode simplesmente decidir que o Edifício Empire State é outra coisa. Substantivos próprios são assim. Eles se referem a algo muito específico e que usualmente não muda com o tempo.

Do mesmo modo, constantes não podem ser alteradas depois de criadas.

EdificioEmpireState = "350 5th Avenue, NYC, NY"

Se tentarmos mudar a constante, Ruby vai reclamar com a gente. Coisas assim desagradam ele.

Vamos lá, bacon pedaçudo.

Métodos

Se variáveis e constantes são substantivos, então métodos são verbos. Métodos geralmente estão ligados ao final das variáveis e constantes por um ponto. Você já viu métodos trabalhando.

porta_da_frente.abra

Acima, abra é o método. Nesta ação, o verbo. Em alguns casos, você verá ações ligadas juntas.

porta_da_frente.abra.feche

Instruímos o computador a abrir a porta da frente e depois imediatamente fechá-la.

porta_da_frente.esta_aberta?

Acima temos uma ação também. Estamos instruindo o computador a testar a porta para ver se está aberta. O método poderia se chamar Porta.teste_para_ver_se_esta_aberta, mas o nome esta_aberta? é sucinto e também correto. Exclamações e interrogações podem ser usados em nomes de métodos.

Argumentos de Método

Um método talvez precise de mais informação para realizar sua ação. Se quisermos que o computador pinte a porta, devemos prover uma cor também.

Argumentos de método vão ligados ao final do método. Os argumentos estão geralmente cercados por parênteses e separados por vírgulas.

porta_da_frente.pintar( 3, :vermelho )

O código acima pinta a porta da frente com três demãos de vermelho.

Pense nisso como um tubo interno que o método carrega, contendo suas instruções extras. Os parênteses formam as redondas e molhadas paredes do tubo. As vírgulas são os pés de cada argumento, saindo para fora da beirada. O último argumento tem o pé preso embaixo então eles não aparecem.

Como um barco de bóias, métodos com argumentos podem ser ligados.

porta_da_frente.pintar( 3, :vermelho ).secar( 30 ).fechar()

O código acima pinta a porta da frente com três demãos de vermelho, seca por trinta minutos e fecha a porta. Mesmo que o último método não tenha argumentos, você pode colocar parênteses se quiser. Um cano vazio não tem muito uso, então os parênteses são geralmente deixados de lado.

Alguns métodos (como print) são métodos do kernel. Estes métodos são usados por todo Ruby. Já que eles são tão comuns, você não usa o ponto.

print "Veja, sem ponto."

Métodos de Classe

Assim como os métodos descritos acima (também chamados métodos de instância), métodos de classe são geralmente ligados depois de variáveis e constantes. Ao invés de ponto, usa-se dois pontos duplo.

Porta::new( :carvalho )

Como foi visto acima, o método de classe new é mais usado para se criar coisas. No exemplo cima, estamos pedindo ao Ruby para fazer uma porta de carvalho nova para nós. Claro, o Ruby não tem conhecimento de como fazer uma porta—assim como uma pilha de madeira, madeireiros, e aquelas longas, nervosas, serras acionadas por dois homens.

Muito bacon pedaçudo para dar um rolê.

Variáveis Globais

Variáveis que começam com um cifrão são globais.

$x, $1, $pedacudo e $BAcOn_PeDAcUDo são exemplos.

A maioria das variáveis são temporárias por natureza. Algumas partes do seu programa são como casas. Você entra e elas têm suas próprias variáveis. Em uma casa, você pode ter um pai que representa Archie, um caixeiro-viajante colecionador de esqueletos. Em outra casa, pai pode representar Peter, um domador de leões com grande apreço por flanela. Cada casa tem um sentido próprio para pai.

Com variáveis globais, você garante que a variável será a mesma em cada casinha. O sinal de cifrão é bem apropriado. Todo lar Americano respeita o valor do cifrão. Somos doidos pela coisa. Tente bater em qualquer porta na América e dê a eles dinheiro. Eu posso garantir que você não verá a mesma reação se bater em uma porta e oferecer Peter, um domador de leões com grande apreço por flanela.

Variáveis globais podem ser usadas em qualquer lugar no seu programa. Elas nunca saem da vista.

Variáveis de Instância

Variáveis que começam com uma arroba são variáveis de instância.

@x, @y, e @somente_o_maior_pedaco_de_bacon_que_eu_ja_vi são exemplos.

Estas variáveis são muito usadas para se definir atributos de alguma coisa. Por exemplo, você pode prover o Ruby com a largura da porta_da_frente criando a variável @largura dentro daquela porta_da_frente. Variáveis de instância são usadas para se definir características de um objeto em Ruby.

Pense no símbolo arroba (at) como significando atributo.

Variáveis de Classe

Variáveis que começam com duas arrobas são variáveis de classe.

@@@x@, @@@y@, e @@@vou_pegar_seus_bacons_pedacudos_e_ensinar_uma_licao_a_voces_dois@ são exemplos.

Variáveis de classe são usadas, também, para se definir atributos. Mas ao invés de definir um atributo a apenas um objeto no Ruby, variáveis de classe dão um atributo a vários objetos relacionados no Ruby. Se as variáveis de instância estipulam atributos para só uma porta_da_frente, então variáveis de classe estipulam atributos para tudo que for Porta.

Pense no prefixo da dupla arroba significando atribua a todos. Adicionalmente, você pode pensar em um esquadrão de AT-ATs do Guerra nas Estrelas, que são comandados pelo Ruby. Você muda uma variável de classe e não apenas uma muda, todas elas mudam.

Bacon pedaçudo cumprido!)!

Blocos

Qualquer código cercado por chaves é um bloco.

2.times { print "Sim, Tenho usado bacon pedaçudo nos meus exemplos, mas não farei de novo!" } é um exemplo.

Com blocos, você pode agrupar pedaços de instruções juntas, assim elas pode ser passadas pelo seu programa. As chaves dão a aparência de garras de caranguejo que pegaram o código e o estão segurando. Quando você vir essas duas garras, lembre-se de que o código dentro foi prensado em uma só unidade.

É como uma daquelas caixinhas da Hello Kitty que eles vendem no shopping que vêm lotadas de pequenos lápis e papel microscópico, espremidos numa bolsa transparente e brilhante que pode ser escondida na palma da mão para operações secretas. Exceto que, blocos não ofuscam sua visão.

As chaves podem ser substituídas pelas palavras do e end, o que é bacana se seu bloco for maior que uma linha.

 loop do
   print "Bem melhor."
   print "Ah.  Mais espaço!"
   print "Minhas costas estavam me matando dentro daquelas garras de caranguejo."
 end
 <stdout>Bem melhor.Ah.  Mais espaço!Minhas costas estavam me matando dentro daquelas 
 garras de caranguejo.</stdout>

Argumentos de Bloco

Argumentos de bloco são uma série de variáveis cercadas por símbolos tal que e separadas por vírgulas.

|en||x|, |x,y|, e |cima, baixo, todo_lado| são exemplos.

Argumentos de bloco são usados no início do bloco.

{ |x,y| x + y }

No código acima, |x,y| são os argumentos. Depois dos argumentos, temos um pedaço de código. A expressão x + y soma os argumentos.

Eu gosto de pensar nos símbolos tal que representando um túnel. Ele dão a aparência de uma calha na qual as variáveis estão descendo. (O x desce com as pernas abertas, enquanto o y harmoniosamente cruza as pernas.) Essa calha age como uma passagem entre os blocos e o mundo lá fora.

Variáveis são passadas por essa calha (ou túnel) para dentro do bloco.

E então, a verdade deplorável.

Ranges (Intervalos)

Um range é formado por dois valores cercados por parênteses e separados por reticências (na forma de dois ou três pontos).

(1..3) é um range, representando os números de um até três.

('a'..'z') é um range, representando o alfabeto em minúsculas.

Pense neles como um acordeão que fora fechado para se carregar. (Você pode construir muito amor próprio levando consigo um acordeão aberto… mas, às vezes uma pessoa tem que mergulhar em dúvidas e esconder cuidadosamente a sanfona) Os parênteses são os lados deste pequeno acordeão de mão. Os pontos são a fole, mantendo as partes bem unidas.

Normalmente, apenas dois pontos são usados. Se um terceiro ponto for usado, o último valor no range será excluído.

(0...5) representa os números de zero até quatro.

Quando você vê o terceiro ponto, imagine abrir o acordeão um pouco menos. O necessário para uma nota apenas de seu fole. A nota é este último valor. Nós vamos deixar que o céu a coma.

Arrays (Conjuntos, Vetores)

Um array é uma lista cercada por colchetes e separada por vírgulas.

[1, 2, 3] é um array de números.

['casaco', 'luvas', 'snowboard'] é um array de strings.

Pense nele como uma centopéia que foi grampeada no nosso código. Os dois colchetes são grampos que não deixam a centopéia se movimentar, então você consegue distinguir onde é cabeça e onde é a cauda. As vírgulas são as pernas da centopéia, balançando entre cada seção do seu corpo.

Era uma vez uma centopéia que tinha vírgulas ao invés de pernas. O que significa que ela tinha que dar uma pausa literária a cada passo. As outra centopéias a respeitavam muito por isso e ela veio a ter uma bela presença no comando. Oh, e que filantropo! Ela ficou famosa por dar folhas frescas aos menos afortunados.

Sim, um array é uma coleção de coisas, mas ele também mantém estas coisas em uma ordem específica.

Hashes

Um hash é um dicionário cercado por chaves. Dicionários servem para encontrar definições das palavras. O Ruby faz isso com setas feitas de sinais de igual, seguida por um sinal de maior que.

{'a' => 'porco-da-terra', 'b' => 'texugo'} é um exemplo.

Desta vez, as chaves representam livrinhos. Veja como eles se parecem com pequenos livros abertos com dobras no meio. Eles representam abrir e fechar nosso dicionário.

Imagine que nosso dicionário tem um definição em cada página. As vírgulas representam os cantos de cada página, que nós viramos para ver a próxima definição. E em cada página: uma palavra seguida por uma seta apontando a definição.

 {
   'nome' => 'Peter',
   'profissao' => 'domador de leões',
   'grande apreco' => 'flanela'
 }

Não estou comparando hashes a dicionários por que você pode guardar só definições na hash. No exemplo acima, eu guardei informação pessoal de Peter, o domador de leões com grande apreço por flanela. Hashes são como dicionários porque elas são muito fáceis de se procurar algo.

Diferentemente dos arrays, os itens na hash não são mantidos em ordem específica.

Os raposos pensam que o silêncio matará a tirinha.

Expressões Regulares

Uma expressão regular (ou regexp) é uma série de caracteres cercados por barras.

/ruby/, /[0-9]+/ e /^\d{3}-\d{3}-\d{4}/ são exemplos.

Expressões regulares são usadas para se achar palavras ou padrões no texto. As barras dos lados da expressão são alfinetes.

Imagine se você tivesse uma palavrinha com alfinetes de cada lado e você a segurasse por cima de um livro. Você passa a palavra pelo livro e quando ela chega perto de uma palavra que coincida, ela começa a piscar. Você espeta a expressão regular no livro, bem em cima da palavra que bate e ela brilha com as letras da palavra encontrada.

Oh, e quando você espeta os alfinetes no livro, o papel espirra, reg-exp!

Expressões regulares são muito mais rápidas que folhear um livro. O Ruby pode usar uma expressão regular para procurar volumes de livros muito rapidamente.

Operadores

Você usará a seguinte lista de operadores para matemática ou para comparar coisas no Ruby. Analise a lista, reconheça alguns. Você conhece, adição + e subtração - e por aí vai.

  ** !  ~  *  /  %  +  -  &  
  << >> |  ^  >  >= <  <= <=>
  || != =~ !~ && += -= == ===
  .. ... not and or          

Keywords (Palavras-chave, Palavras-reservadas)

O Ruby tem um número de palavras embutidas, imbuídas em significado. Estas palavras não podem ser usadas como variáveis ou modificadas às suas necessidades. Algumas delas nós já discutimos. Elas estão na caixa forte, meu amigo. É só relar nelas e você terá um erro oficial de sintaxe.

  alias   and     BEGIN   begin   break   case    class   def     defined 
  do      else    elsif   END     end     ensure  false   for     if 
  in      module  next    nil     not     or      redo    rescue  retry 
  return  self    super   then    true    undef   unless  until   when 
  while   yield 

Muito bom. Estes são os ilustres membros da linguagem Ruby. Teremos um belo banquete nos próximos três capítulos, grudando essas partes em manhosos pedaços de (comovente) código.

E recomendo que você dê mais um olhadela pelas partes da conversa. Dê uma ampla olhada nelas. Eu estarei testando seu metal na próxima seção.

Saindo para a picape.

3. Se Eu Já Não Tivesse Lhe Tratado Suficientemente Como Uma Criança

Estou orgulhoso de você. Qualquer um irá lhe contar o tanto que me orgulho de você. Como eu continuo e continuo a falar sobre essa ótima pessoa anônima aí fora que rola e lê e rola e lê. “Estas crianças,” Eu lhes conto. “Cara, estas crianças tem coração. Eu nunca…” E eu mal consigo terminar uma frase porque estou absolutamente mergulhado em lágrimas.

E meu coração irradia um vermelho intenso sob minha pele translúcida e eles tiveram que me administrar 10 mililitros de Javascript para me fazer voltar. (Eu respondo bem a toxinas no sangue.) Cara, esse negócio vai chutar para longe das suas guelras!

Bem, sim. Você está indo bem. Mas agora eu devo começar a ser um bruto professor secundário. Preciso começar a ver boas notas suas. Até agora, você não fez nada mais do que olhar para cima e para baixo. Ok, claro, você fez excepcionais leituras em voz alta anteriormente. Agora nós precisamos de habilidade de compreensão aqui, Smotchkkiss.

Diga em voz alta cada parte do discurso usada abaixo.

5.times { print "Odelay!" }

Você pode querer até mesmo cobrir este parágrafo enquanto lê, porque seus olhos podem esquivar-se para olhar a resposta. Nós temos um número 5, seguido por um método .times. Depois, a primeira garra de caranguejo de um bloco. O método do kernel print não tem ponto e é seguido por uma string "Odelay!". A garra de caranguejo final fecha nosso bloco.

Diga em voz alta cada parte do discurso usada abaixo.

exit unless "restaurante".include? "aura"

Assim como o método print, exit é um método do kernel. Se você prestou atenção na grande lista de palavras reservadas, você saberá que unless é uma dessas palavras reservadas. A string "restaurante"
está unida ao método include?. E no final, a string "aura".

Diga em voz alta cada parte do discurso usada abaixo.

['torrada', 'queijo', 'vinho'].each { |alimento| print( alimento.capitalize ) }

Esta centopéia partilha finas iguarias. Um array inicia o exemplo. No array, três strings 'torrada', 'queijo' e 'vinho'. Todo o array é seguido por um método each.

Dentro de um bloco, o argumento do bloco alimento, descendo seu tobo-água dentro do bloco. O método capitalize então passa para maiúscula a primeira letra do argumento do bloco, a qual inicia a variável alimento. Esta string com a inicial em maiúscula é passada para o método print do kernel.

Olhe para os exemplos mais uma vez. Tenha certeza de que você reconhece todas as partes do discurso usadas. Elas são bem distintas, não? Respire profundamente, aperte firmemente suas têmporas. Pronto, agora vamos dissecar código tão valioso quanto um olho de vaca.

4. Um Exemplo Para Te Ajudar a Crescer

Pegando febre de cabine.

Diga em voz alta cada uma das partes da conversa usadas abaixo.

 require 'net/http'
 Net::HTTP.start( 'www.ruby-lang.org', 80 ) do |http|
     print( http.get( '/en/LICENSE.txt' ).body )
 end

A primeira linha chama um método. O método chamado require é usado. Uma string é passada ao método contendo 'net/http'. Pense nesta primeira linha de código como uma sentença. Nós dissemos ao Ruby para carregar um código auxiliar, a biblioteca Net::HTTP.

As próximas três linhas vão todas juntas. A constante Net::HTTP refere à biblioteca que carregamos acima. Nós estamos usando o método start da biblioteca. Dentro do método, estamos enviando uma string 'www.ruby-lang.org' e o número 80.

A palavra do abre um block (bloco). O bloco tem uma variável de bloco http. Dentro do bloco, o método print é chamado. O que está sendo impresso?

A partir da variável http, o método get é chamado. Dentro do get, nós passamos uma string contendo o caminho '/en/LICENSE.txt'. Agora, repare que outro método está ligado ao get. O método body (corpo). Então, o bloco se fecha com end.

Está indo bem? Só por curiosidade, você consegue adivinhar o que este exemplo faz? Espero eu, que você já esteja vendo alguns padrões no Ruby. Se não, balance sua cabeça vigorosamente enquanto você põe estes exemplos na sua mente. O código deve se quebrar em pedaços gerenciáveis.

Por exemplo, este padrão é usando um monte de vezes:

variavel . metodo ( argumentos do metodo )

Você vê isso dentro do:

http.get( '/en/LICENSE.txt' )

Estamos usando o Ruby para pegar uma página da web. Você provavelmente já usou HTTP com o seu navegador. HTTP é o Hypertext Transfer Protocol. HTTP é usado para se transferir páginas pela internet. Conceitualize um motorista de ônibus que pode dirigir por toda a internet e trazer de volta páginas para gente. No quepe dele estão estampadas as letras HTTP.

A variável http é aquele motorista. O método é uma mensagem para o motorista. Vá get (pegar) a página da web chamada /en/LICENSE.txt.

Então quando você vê esta cadeia de métodos:

http.get( '/en/LICENSE.txt' ).body

Já que estaremos recebendo a página de volta pelo motorista http, você pode ler isto na sua cabeça assim:

página web .body

E neste pedaço de código:

print( http.get( '/en/LICENSE.txt' ).body )

Este código pega a página. Nós mandamos uma mensagem: body para a página, que por sua vez nos dá HTML em uma string. Nós então imprimimos esta string. Veja como o básico padrão ponto-método acontece em cadeia. No próximo capítulo vamos explorar todos estes tipos de padrões no Ruby. Vai ser boa diversão.

Então, o que este código faz? Ele imprime o HTML da página web do Ruby na tela. Usando um motorista de ônibus habilitado para web.

5. E Então, A Rápida Viagem Chega a Uma Calma, Amortecida Parada

Correndo atrás do caminhão.

Então agora nós temos um problema. Eu começo a achar que você está gostando muito disso. E você ainda nem chegou no capítulo em que eu uso músicas de pular-corda para lhe ajudar a aprender como trabalhar com XML!

Se você já está gostando disso, então as coisas estão indo realmente mal. Daqui a dois capítulos você já estará escrevendo seus próprios programas Ruby. Na verdade, é mais ou menos por ali que lhe farei começar a escrever seu próprio jogo de RPG, sua própria rede de compartilhamento de arquivos (à la BitTorrent), assim como um programa que vai baixar números genuinamente aleatórios da Internet.

A prova foi extraída do pudim.

E você sabe (você tem que saber!) que isso vai virar uma obsessão. Primeiro, você se esquecerá completamente de levar o cachorro para passear. Ele vai estar na portinhola, balançando a cabeça, enquanto seus olhos devoram o código, enquanto seus dedos transmitem mensagens ao computador.

Graças à sua negligência, as coisas vão começar a quebrar. Seu amontoado de folhas de código impressas cobrirá as entradas de ar. Sua fornalha se engasgará. O lixo irá se amontoar: caixas de comida delivery que você apressadamente pediu, correspondência inútil que você não se preocupou em jogar fora. Sua própria imundice poluirá o ar. Limo infestará o forro, a água irá endurecer, animais se convidarão para entrar, árvores virão pelas fundações.

Mas seu computador será bem tratado. E você, Smotchkkiss, o terá nutrido com o seu conhecimento. Nas eras que você terá passado com sua máquina, você se tornará parte-CPU. E ela se tornará parte-carne. Seus braços irão de encontro às portas dela. Seus olhos aceitarão o vídeo direto pelo conector DVI-24. Seus pulmões ficarão sentados em cima do processador, esfriando ela.

E então, na hora que o quarto está prestes a se fechar em torno de você, como se todo o crescimento engolisse você e sua máquina, terminará seu script. Você e a máquina juntos rodarão este recém criado script Ruby, o produto da sua obsessão. E o script disparará serras-elétricas para cortar as árvores, corações para aquecer e regular a casa. Nanorobôs construtores sairão do seu script, reconstruindo seus aposentos, bricolando, renovando, colorindo, polindo, desinfetando. Poderosos andróides forçarão sua decadente casa em uma firme, rígida arquitetura. Grandes pilares emergirão, estátuas esculpidas. Você terá domínio sob este estado palacial e as montanhas e ilhas adjacentes à sua fortaleza.

Bom, então eu acho que você vai ficar bem. Quê se me diz? Vamos começar esse seu script?

Virar a página.