




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
aprenda desenvolvimento agil na web com o ruby
Tipologia: Notas de estudo
1 / 165
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































A Caelum atua no mercado com consultoria, desenvolvimento e ensino em computação. Sua equipe participou do desenvolvimento de projetos em vários clientes e, após apresentar os cursos de verão de Java na Universidade de São Paulo, passou a oferecer treinamentos para o mercado. Toda a equipe tem uma forte presença na comunidade através de eventos, artigos em diversas revistas, participação em muitos projetos open source como o VRaptor e o Stella e atuação nos fóruns e listas de discussão como o GUJ.
Com uma equipe de mais de 60 profissionais altamente qualificados e de destaque do mercado, oferece treinamentos em Java, Ruby on Rails e Scrum em suas três unidades - São Paulo, Rio de Janeiro e Brasília. Mais de 8 mil alunos já buscaram qualificação nos treinamentos da Caelum tanto em nas unidades como nas próprias empresas com os cursos incompany.
O compromisso da Caelum é oferecer um treinamento de qualidade, com material constantemente atualizado, uma metodologia de ensino cuidadosamente desenvolvida e instrutores capacitados tecnicamente e didaticamente. E oferecer ainda serviços de consultoria ágil, mentoring e desenvolvimento de projetos sob medida para empresas.
Sobre esta apostila
Esta apostila da Caelum visa ensinar de uma maneira elegante, mostrando apenas o que é necessário e quando é necessário, no momento certo, poupando o leitor de assuntos que não costumam ser de seu interesse em determinadas fases do aprendizado.
A Caelum espera que você aproveite esse material. Todos os comentários, críticas e sugestões serão muito bem-vindos.
Essa apostila é constantemente atualizada e disponibilizada no site da Caelum. Sempre consulte o site para novas versões e, ao invés de anexar o PDF para enviar a um amigo, indique o site para que ele possa sempre baixar as últimas versões. Você pode conferir o código de versão da apostila logo no final do índice.
Baixe sempre a versão mais nova em: www.caelum.com.br/apostilas Esse material é parte integrante do treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails e distribuído gratuitamente exclusivamente pelo site da Caelum. Todos os direitos são reservados à Caelum. A distribuição, cópia, revenda e utilização para ministrar treinamentos são absolutamente vedadas. Para uso comercial deste material, por favor, consulte a Caelum previamente.
www.caelum.com.br
CAPÍTULO 1
Agilidade na Web
“Não são os milagres que inclinam o realista para a fé. O verdadeiro realista, caso não creia, sempre encontrará em si força e capacidade para não acreditar no milagre, e se o milagre se apresenta diante dele como fato irrefutável, é mais fácil ele descrer de seus sentidos que admitir o fato”
1.1 - A agilidade Quais são os problemas mais frequentes no desenvolvimento web? Seriam os problemas com AJAX? Escrever SQL? Tempo demais para gerar os CRUDs básicos? Com tudo isso em mente, David Heinemeier Hansson, trabalhando na 37Signals, começou a procurar uma linguagem de programação que pudesse utilizar para desenvolver os projetos de sua empresa. Mais ainda, criou um framework web para essa linguagem, que permitiria a ele escrever uma aplicação web de maneira simples e elegante. O que possibilita toda essa simplicidade são os recursos poderosos que Ruby oferece e que deram toda a simplicidade ao Rails. Esses recursos proporcionados pela linguagem Ruby são fundamentais de serem compreendidos por todos que desejam se tornar bons desenvolvedores Rails e por isso o começo desse curso foca bastante em apresentar as características da linguagem e seus diferenciais. Um exemplo clássico da importância de conhecer mais a fundo a linguagem Ruby está em desvendar a “magia negra” por trás do Rails. Conceitos como meta programação, onde código é criado dinâmicamente, são essenciais para o entendimento de qualquer sistema desenvolvido em Rails. É a meta programação que permite, por exemplo, que tenhamos classes extremamente enxutas e que garante o relacionamento entre as tabelas do banco de dados com nossas classes de modelo sem a necessidade de nenhuma linha de código, apenas usando de convenções. Esse curso apresenta ainda os conceitos de programação funcional, uso de blocos, duck typing, enfim, tudo o que é necessário para a formação da base de conceitos que serão utilizados ao longo do curso e da vida como um desenvolvedor Rails.
1.2 - A comunidade Rails A comunidade Rails é hoje uma das mais ativas e unidas do Brasil. Cerca de 10 eventos acontecem anu- almente com o único propósito de difundir conhecimento e unir os desenvolvedores. Um exemplo dessa força é o Rails Summit, maior evento de Rails da America Latina, com presença dos maiores nomes nacionais e internacionais de Ruby on Rails. Além dos eventos, diversos blogs sobre Rails tem ajudado diversos programadores a desvendar esse novo universo:
Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails
1.4 - Tirando dúvidas Para tirar dúvidas dos exercícios, ou de Ruby e Rails em geral, recomendamos se inscrever na lista do
Também recomendamos duas outras listas:
1.5 - Para onde ir depois? Além de fazer nossos cursos de Rails, você deve participar ativamente da comunidade. Ela é muito viva e ativa, e as novidades aparecem rapidamente. Se você ainda não tinha hábito de participar de fóruns, listas e blogs, essa é uma grande oportunidade. Há ainda a possibilidade de participar de projetos opensource, e de você criar gems e plugins pro rails que sejam úteis a toda comunidade.
Capítulo 1 - Agilidade na Web - Tirando dúvidas - Página 3
CAPÍTULO 2
A linguagem Ruby
“Rails is the killer app for Ruby.”
Neste capítulo, conheceremos a poderosa linguagem de programação Ruby, base para completo entendi- mento do framework Ruby on Rails.
2.1 - A história do Ruby Ruby foi apresentada ao público pela primeira vez em 1995, pelo seu criador: Yukihiro Matsumoto , mun- dialmente conhecido como Matz. É uma linguagem orientada a objetos, com tipagem forte e dinâmica.
2.2 - Características Uma de suas principais características é a expressividade que possui. Matz teve como objetivo desde o início que Ruby fosse uma linguagem muito simples de ler e ser entendida, para facilitar o desenvolvimento e manutenção de sistemas escritos com ela. Ruby é uma linguagem interpretada e, como tal, necessita da instalação de um interpretador em sua má- quina antes de executar algum programa.
Orientação a objetos pura Entre as linguages de programação orientada a objetos, muito se discute se são puramente orien- tadas a objeto ou não, já que grande parte possui recursos que não se comportam como objetos. Os tipos primitivos de Java são um exemplo desta contradição, já que não são objetos de verdade. Ruby é considerada uma linguagem puramente orientada a objetos, já que tudo em Ruby é um objeto (inclusive as classes, como veremos).
2.3 - Instalação do interpretador Antes da linguagem Ruby se tornar popular, existia apenas um interpretador disponível: o escrito pelo próprio Matz, em C. É um interpretador simples, sem nenhum gerenciamento de memória muito complexo, nem características modernas de interpretadores como a compilação em tempo de execução (conhecida como JIT). Este interpretador é conhecido como Matz’s Ruby Interpreter (MRI), ou CRuby (já que é escrito em C) e é também considerado a implementação de referência para a linguagem Ruby. A última versão estável é a 1.8.x , mas já está disponível a versão 1.9 da linguagem, também conhecida como YARV , que já pode ser usada em produção apesar de não existirem ainda muitas bibliotecas compatíveis
4
Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails
2.4 - Outras implementações Com a popularização da linguagem Ruby (iniciada pelo Ruby on Rails), implementações alternativas da linguagem começaram a ficar em evidência. A maioria delas segue uma tendência natural de serem baseados em uma Máquina Virtual ao invés de serem simples interpretadores. Algumas implementações possuem até compiladores completos, que transformam o código Ruby em alguma linguagem intermediária a ser interpretada por uma máquina virtual. O próprio Ruby 1.9 de referência (YARV), evolução do MRI, é baseado em uma máquina virtual: Y et A nother R uby V M. A principal vantagem das máquinas virtuais é facilitar o suporte em diferentes plataformas. Além disso, ter código intermediário permite otimização do código em tempo de execução, feito através da JIT. JRuby foi a primeira implementação completa da versão 1.8.6 do Ruby. O JRuby é a principal implemen- tação em Java da linguagem Ruby e é hoje considerada por muitos como a implementação mais rápida da linguagem. Não é um simples interpretador, já que também opera nos modos AOT - compilação Ahead Of Time e JIT - Just In Time compilation, além do modo interpretador tradicional (Tree Walker ). Teremos um capítulo exclusivo sobre JRuby, mas uma de suas principais vantagens é a interoperabilidade com código Java existente, além de aproveitar todas as vantagens de uma das plataformas de execução de código mais maduras (GC, JIT, Threads nativas, entre outras). Além disso, a própria Sun Microsystems aposta no projeto, já que alguns de seus principais desenvolve- dores, Charles Nutter (líder técnico do projeto), Tomas Enebo e Nick Sieger já trabalharam para ela. Ola Bini também é contratado pela ThoughtWorks para trabalhar apenas com JRuby. A comunidade .Net também não ignora o sucesso da linguagem e patrocina o projeto IronRuby , mantido pela própria Microsoft. IronRuby foi um dos primeiros projetos verdadeiramente de código aberto dentro da Microsoft. Ruby.NET é outro projeto que tem como objetivo possibilitar código Ruby ser executado na plataforma .Net. Originalmente conhecido como Gardens Point Ruby.NET Compiler, procura ser um compilador de código Ruby para a CLR do mundo .Net. Criada por Evan Phoenix, Rubinius é um dos projetos que tem recebido mais atenção pela comunidade Ruby, por ter o objetivo de criar a implementação de Ruby com a maior parte possível do código em Ruby. Além disso, trouxe idéias de máquinas virtuais do SmallTalk, possuindo um conjunto de instruções (bytecode) próprio e implementada em C/C++.
O projeto Rubinius possui uma quantidade de testes enorme, escritos em Ruby. O que incentivou a iniciativa
plementadores da linguagem Ruby para especificar as características da linguagem Ruby e seu comportamento, através de código executável, que funciona como um TCK (Test Compatibility Kit). RubySpec tem origem na suíte de testes unitários do projeto Rubinius, escritos com uma versão mínima do RSpec, conhecida como MSpec. O RSpec é um framework para descrição de especificações no estilo pregado pelo Behavior Driven Development. Veremos mais sobre isso no capítulo de testes.
Capítulo 2 - A linguagem Ruby - Outras implementações - Página 6
Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails
2.5 - MagLev Avi Bryant é um programador Ruby conhecido, que mudou para Smalltalk e hoje é um defensor fervoroso da linguagem; além de ser um dos criadores do principal framework web em SmallTalk: Seaside. Durante seu keynote na RailsConf de 2007 , lançou um desafio à comunidade: “I’m from the future, I know how this story ends. All the people who are saying you can’t implement Ruby on a fast virtual machine are wrong. That machine already exists today, it’s called Gemstone , and it could certainly be adapted to Ruby. It runs Smalltalk, and Ruby essentially is Smalltalk. So adapting it to run Ruby is absolutely within the realm of the possible.” Ruby e Smalltalk são parecidos demais. Avi basicamente pergunta: por que não criar máquinas virtuais para Ruby, aproveitando toda a tecnologia de máquinas virtuais para SmallTalk, que já têm bastante maturidade e estão no mercado a tantos anos? Integrantes da empresa Gemstone, que possui uma das máquinas virtuais para SmallTalk mais famosas - Gemstone/S, estavam na platéia e chamaram o Avi Bryant para provar que isto era possível. Na RailsConf de 2008, o resultado foi que a Gemstone apresentou o produto que estão desenvolvendo, conhecido como Maglev. É uma máquina virtual para Ruby, baseada na existente para Smalltalk. As linguagens são tão parecidas que apenas poucas instruções novas tiveram de ser inseridas na nova máquina virtual. Os números apresentados são surpreendentes. Com tão pouco tempo de desenvolvimento, conseguiram apresentar um ganho de até 30x de performance em alguns micro benchmarks. Apesar de ter feito bastante barulho durante a RailsConf 2008, a Gemstone anda bastante quieta sobre o Maglev e não mostrou mais nada desde então. Muitos criticam esta postura da empresa de ter falado sobre algo tão antes de poderem mostrar, além de terem exibido números que não podem provar. Antonio Cangiano teve acesso a uma versão preliminar do Maglev e publicou um famoso comparativo de performance (benchmark) em seu blog, conhecido como “The Great Ruby Shootout”, em que o Maglev se mostra em média 1.8x mais rápido que a MRI. Sendo muito mais rápido em alguns benchmarks e muito mais lento em alguns outros.
2.6 - Ruby Enterprise Edition Para melhorar a performance de aplicações Rails e diminuir a quantidade de memória utilizada, Ninh Bui , Hongli Lai e Tinco Andringa (da Phusion) modificaram o interpretador Ruby e lançaram com o nome de Ruby Enterprise Edition. As principais modificações no REE foram no comportamento do Garbage Collector, fazendo com que fun- cione com o recurso de Copy on Write disponível na maioria dos sistemas operacionais baseados em UNIX (Linux, Solaris, ...). Outra importante modificação foi na alocação de memória do interpretador, com o uso de bibliotecas famo- sas como tcmalloc. Os desenvolvedores da Phusion já ofereceram as modificações (patches) para entrar na implementação oficial, MRI. É ainda um mistério para a comunidade o porquê de tais modificações importantes ainda não terem entrado para a versão oficial do interpretador.
friendly-part-8/
Capítulo 2 - A linguagem Ruby - MagLev - Página 7
Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails
Um outro tipo importante nos programas Ruby são os objetos do tipo String. As Strings literais em Ruby podem ser delimitadas por aspas simples ou aspas duplas (e outras formas especiais que veremos mais adi- ante). A principal característica das Strings em Ruby é que são mutáveis, diferente de Java, por exemplo. >> texto = "valor inicial" => "valor inicial" >> texto << " alterado" => "valor inicial alterado" >> puts(texto) valor inicial alterado => nil A concatenação de Strings (operador +) gera novas Strings, é o mesmo comportamento do Java. O operador
Uma alternativa mais interessante para criar Strings com valor dinâmico é a interpolação: n = 6 * 5 texto = "O resultado é #{n}. Algo maior seria #{n + 240}" Qualquer expressão (código Ruby) pode ser interpolada em uma String. Porém, apenas Strings delimitadas por aspas duplas aceitam interpolação. Prefira sempre a interpolação ao invés da concatenação (+), ou do append (<<). É mais limpo e mais rápido.
2.9 - Para Saber Mais - Desafios
n = 10 + 4 texto = "O valor é " + n puts(texto)
puts(1+2)
n = 10 + 3 texto = "O valor é: #{n}"
n = 10 ** 2 puts(’o resultado é: #{n}’)
Capítulo 2 - A linguagem Ruby - Para Saber Mais - Desafios - Página 9
Material do Treinamento Desenvolvimento Ágil para Web 2.0 com Ruby on Rails
Símbolos também são texto, como as Strings. Só que devem ser precedidos do caracter ’:’, ao invés de aspas e pertencem à classe Symbol: >> puts :simbolo simbolo => nil >> :simbolo.class => Symbol As principais diferenças são:
2.10 - Para Saber Mais - Desafio
s1 = :abc s2 = :abc s1 == s
t1 = "abc" t2 = "abc" t1 == t
Há também os objetos do tipo booleano, true e false. Os operadores booleanos aceitam quaisquer expres- sões aritméticas: >> 3 > 2 => true >> 3+4-2 <= 3*2/ => false Os operadores booleanos são: ==, >, <, >= e <=. Expressões booleanas podem ainda ser combinadas com os operadores && (and) e || (or).
Capítulo 2 - A linguagem Ruby - Para Saber Mais - Desafio - Página 10