Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Aprendeda Desenvolvimento com Ruby e Rails, Notas de estudo de Cultura

aprenda desenvolvimento agil na web com o ruby

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 02/07/2010

victor-fernandes-14
victor-fernandes-14 🇧🇷

5

(1)

1 documento

1 / 165

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
RR-71
Desenvolvimento Ágil para Web
2.0 com Ruby on Rails
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Aprendeda Desenvolvimento com Ruby e Rails e outras Notas de estudo em PDF para Cultura, somente na Docsity!

RR-

Desenvolvimento Ágil para Web

2.0 com Ruby on Rails

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.

Comunidade

Nossa equipe escreve constantemente artigos no Blog da Caelum que já conta

com 150 artigos sobre vários assuntos de Java, Rails e computação em geral.

Visite-nos e assine nosso RSS:

➡ blog.caelum.com.br

Acompanhe também a equipe Caelum no Twitter :

➡ twitter.com/caelumdev/equipe

O GUJ é maior fórum de Java em língua portuguesa, com 700 mil posts e 70 mil

usuários. As pessoas da Caelum participam ativamente, participe também:

➡ www.guj.com.br

Assine também nossa Newsletter para receber as novidades e destaques dos

eventos, artigos e promoções da Caelum:

➡ www.caelum.com.br/newsletter

No site da Caelum há algumas de nossas Apostilas disponíveis gratuitamente

para download e alguns dos artigos de destaque que escrevemos:

➡ www.caelum.com.br/apostilas

➡ www.caelum.com.br/artigos

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

Índice

  • 1 Agilidade na Web
    • 1.1 A agilidade
    • 1.2 A comunidade Rails
    • 1.3 Bibliografia
    • 1.4 Tirando dúvidas
    • 1.5 Para onde ir depois?
  • 2 A linguagem Ruby
    • 2.1 A história do Ruby
    • 2.2 Características
    • 2.3 Instalação do interpretador
    • 2.4 Outras implementações
    • 2.5 MagLev
    • 2.6 Ruby Enterprise Edition
    • 2.7 Interactive Ruby
    • 2.8 Tipos Básicos
    • 2.9 Para Saber Mais - Desafios
    • 2.10 Para Saber Mais - Desafio
  • 3 Ruby Avançado
    • 3.1 Mundo orientado a objetos
    • 3.2 Métodos comuns
    • 3.3 Meta-programação
    • 3.4 Definição de métodos
    • 3.5 Discussão: Enviando mensagens aos objetos
    • 3.6 Classes
    • 3.7 Desafio: Classes abertas
    • 3.8 self
    • 3.9 Desafio: self e o método puts
    • 3.10 Atributos e propriedades: acessores e modificadores
    • 3.11 Syntax Sugar
    • 3.12 Métodos de Classe
    • 3.13 Para saber mais: Singleton Classes
    • 3.14 Metaprogramação
    • 3.15 Convenções
    • 3.16 Coleções
    • 3.17 Blocos e Programação Funcional
    • 3.18 Desafio: Usando blocos
    • 3.19 Mais OO
    • 3.20 Modulos
    • 3.21 Manipulando erros e exceptions
    • 3.22 Exercício: Manipulando exceptions
    • 3.23 Arquivos Ruby
  • 4 Ruby on Rails
    • 4.1 Ruby On Rails - Apresentação
    • 4.2 Aprender Ruby?
    • 4.3 RadRails
    • 4.4 Primeira Aplicação
    • 4.5 Exercícios: Iniciando o Projeto
    • 4.6 Estrutura dos diretórios
    • 4.7 O Banco de Dados
    • 4.8 Exercícios: Criando o banco de dados
    • 4.9 A base da construção: scaffold (andaime)
    • 4.10 Exercícios: Scaffold
    • 4.11 Gerar as tabelas
    • 4.12 Versão do Banco de Dados
    • 4.13 Exercícios: Migrar tabela
    • 4.14 Server
    • 4.15 Documentação do Rails
    • 4.16 Exercício Opcional: Utilizando a documentação
  • 5 Active Record
    • 5.1 Motivação
    • 5.2 Exercícios: Controle de Restaurantes
    • 5.3 Modelo - O “M” do MVC
    • 5.4 ActiveRecord
    • 5.5 Rake
    • 5.6 Criando Modelos
    • 5.7 Migrations
    • 5.8 Exercícios: Criando os modelos
    • 5.9 Manipulando nossos modelos pelo console
    • 5.10 Exercícios: Manipulando registros
    • 5.11 Exercícios Opcionais
    • 5.12 Finders
    • 5.13 Exercícios: Buscas dinâmicas
    • 5.14 Validações
    • 5.15 Exercícios: Validações
    • 5.16 Exercícios - Completando nosso modelo
    • 5.17 O Modelo Qualificação
    • 5.18 Exercícios - Criando o Modelo de Qualificação
    • 5.19 Relacionamentos
    • 5.20 Para Saber Mais: Auto-relacionamento
    • 5.21 Para Saber Mais: Cache
    • 5.22 Exercícios - Relacionamentos
    • 5.23 Para Saber Mais - Eager Loading
    • 5.24 Para Saber Mais - Named Scopes
    • 5.25 Para Saber Mais - Modules
  • 6 Controllers e Views
    • 6.1 O “V” e o “C” do MVC
    • 6.2 Hello World
    • 6.3 Exercícios: Criando o controlador
    • 6.4 Redirecionamento de Action e Action padrão
    • 6.5 Trabalhando com a View: O ERB
    • 6.6 Entendendo melhor o CRUD
    • 6.7 Exercícios: Controlador do Restaurante
    • 6.8 Helper
    • 6.9 Exercícios: Utilizando helpers para criar as views
    • 6.10 Partial
    • 6.11 Exercícios: Customizando o cabeçalho
    • 6.12 Layout
    • 6.13 Exercícios: Criando o header
    • 6.14 Outras formas de gerar a View
    • 6.15 Filtros
  • 7 Rotas
    • 7.1 routes.rb
    • 7.2 Pretty URLs
    • 7.3 Named Routes
    • 7.4 REST - map.resource
    • 7.5 Actions extras em Resources
    • 7.6 Diversas Representações
    • 7.7 Para Saber Mais - Nested Resources
  • 8 Completando o Sistema
    • 8.1 Exercícios
    • 8.2 Selecionando Clientes e Restaurante no form de Qualificações
    • 8.3 Exercícios
    • 8.4 Exercícios Opcionais
  • 9 Calculations
    • 9.1 Métodos
    • 9.2 Média
    • 9.3 Exercícios
  • 10 Associações Polimórficas
    • 10.1 Nosso problema
    • 10.2 Alterando o banco de dados
    • 10.3 Exercícios
  • 11 Ajax fácil com RJS
    • 11.1 Adicionando comentários nas views
    • 11.2 Métodos de RJS Templates
    • 11.3 Exercícios
    • 11.4 Adicionando comentários
    • 11.5 Exercícios
    • 11.6 Exercícios - Enviando os dados com Ajax
  • 12 Alguns Plugins e Gems Importantes
    • 12.1 Paginação
    • 12.2 Exercícios - Título
    • 12.3 Hpricot
    • 12.4 Exercícios - Testando o Hpricot
    • 12.5 File Uploads: Paperclip
    • 12.6 Exercícios
  • 13 Apêndice A - Testes
    • 13.1 O Porquê dos testes?
    • 13.2 Test::Unit
    • 13.3 RSpec
    • 13.4 Cucumber, o novo Story Runner
  • 14 Apêndice B - Integrando Java e Ruby
    • 14.1 O Projeto
    • 14.2 Testando o JRuby
    • 14.3 Exercícios
    • 14.4 Testando o JRuby com Swing
  • 15 Apêndice C - Deployment
    • 15.1 Webrick
    • 15.2 CGI
    • 15.3 FCGI - FastCGI
    • 15.4 Lighttpd e Litespeed
    • 15.5 Mongrel
    • 15.6 Proxies Reversos
    • 15.7 Phusion Passenger (mod_rails)
    • 15.8 Ruby Enterprise Edition
    • 15.9 Exercícios: Deploy com Apache e Passenger
  • 16 Apêndice D - Instalação
    • 16.1 Ruby - Ubuntu
    • 16.2 Ruby - Windows
    • 16.3 Rails
    • 16.4 JDK
    • 16.5 Aptana
    • 16.6 Mongrel
    • 16.7 MySQL
    • 16.8 SVN
      • Versão: 12.3.

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”

  • Fiodór Dostoievski, em Irmãos Karamazov

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:

  • http://blog.caelum.com.br/ - Blog da Caelum 1

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

GURU-SP (http://groups.google.com/group/ruby-sp), onde sua dúvida será respondida prontamente.

Também recomendamos duas outras listas:

  • http://groups.google.com/group/rubyonrails-talk
  • http://groups.google.com/group/rails-br Fora isso, sinta-se à vontade para entrar em contato com seu instrutor e tirar todas as dúvidas que tiver durante o curso. O fórum do GUJ.com.br, conceituado em java, possui também um subfórum de Rails:

http://www.guj.com.br/

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.”

  • Yukihiro Matsumoto, Criador da linguagem 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++.

http://rubini.us

O projeto Rubinius possui uma quantidade de testes enorme, escritos em Ruby. O que incentivou a iniciativa

de especificar a linguagem Ruby. O projeto RubySpec (http://rubyspec.org/) é um acordo entre os vários im-

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.

http://antoniocangiano.com/2008/12/09/the-great-ruby-shootout-december-2008/

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.

http://izumi.plan99.net/blog/index.php/2008/08/17/ _ making-ruby’s-garbage-collector-copy-on-write-

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

String

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

“<<” é usado para a operação append de Strings.

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

  1. Sem tentar executar o código abaixo, responda: Ele funciona? Por que?

n = 10 + 4 texto = "O valor é " + n puts(texto)

  1. E o código abaixo, deveria funcionar? Por que?

puts(1+2)

  1. Baseado na sua resposta da primeira questão, por que o código abaixo funciona?

n = 10 + 3 texto = "O valor é: #{n}"

  1. Qual a saída deste código?

n = 10 ** 2 puts(’o resultado é: #{n}’)

  1. (Para Casa) Pesquise sobre outras maneiras de criar Strings literais em Ruby.

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

Symbol

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:

  • São imutáveis. Uma vez criado, um símbolo não pode ser alterado. Se precisarmos de um novo valor, precisa criar um novo objeto símbolo.
  • São compartilhados. Ruby compartilha o mesmo objeto na memória em todos os lugares da aplicação que usarem um símbolo de mesmo valor. Todos os lugares da aplicação que contém o código :coracao, estão se referindo ao mesmo objeto na memória. Por causa destas características, símbolos são análogos às Strings do Java. As Strings do Ruby estão mais para o StringBuilder do Java. Por serem imutáveis e compartilhados, objetos Symbol geralmente são usados como identificadores ou para nomenclatura (labels).

2.10 - Para Saber Mais - Desafio

  1. Por que a comparação entre símbolos é muito mais rápida que entre Strings?

s1 = :abc s2 = :abc s1 == s

=> true

t1 = "abc" t2 = "abc" t1 == t

=> true

Boolean

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