Use o código e tenha 10% de desconto!

Ruby Aprenda a programar na linguagem mais divertida

Lucas Souza
Capa

Ruby

Agradecimentos

A primeira pessoa e mais importante à qual gostaria de agradecer é minha esposa Rafaela Fernandes, e também à Clarinha, pela compreensão nas várias noites em que tive deixar de dar atenção a elas para me dedicar à escrita do livro. Aos meus pais e minha irmã que apoiaram e incentivaram bastante o processo de escrita durante todos estes meses.

Agradecimentos especiais ao Paulo Silveira e Guilherme Silveira que me deram a oportunidade ímpar de trabalhar na Caelum, umas das melhores empresas de tecnologia para trabalhar no país. Um agradecimento novamente ao Paulo Silveira e Adriano Almeida, que na QCON 2012, em uma conversa de poucos minutos, me apoiaram na ideia de escrever um livro sobre Ruby.

A todos os amigos que trabalham ou trabalharam comigo na construção do novo CMS do portal R7.com, foi participando deste time que aprendi e ensinei grande parte das coisas que sei sobre Ruby. Em especial, aos amigos: Bruno Grasselli, Elber Ribeiro, Fernando Meyer, Caio Filipini e Rafael Ferreira.

Dos amigos citados, um agradecimento especial ao Rafael Ferreira, um dos melhores desenvolvedores com que tive a oportunidade de trabalhar. Uma pessoa com quem aprendo algo novo todos os dias.

Por fim, obrigado a Deus por colocar esta oportunidade na minha vida.

Quem sou eu?

Meu nome é Lucas Souza, formado em Engenharia da Computação na Universidade de Ribeirão Preto. Trabalho profissionalmente com desenvolvimento de software há sete anos. Durante boa parte desses anos, trabalhei dentro de empresas situadas em Ribeirão Preto, mas há quatro anos estou em São Paulo. Nesse período, trabalhei principalmente com Java e Ruby.

Em 2005, já programava utilizando PHP, mas decidi que gostaria de aprender outras linguagens e optei por aprender Java. Rapidamente comecei a trabalhar com Java ─ no ano de 2006, participei de um projeto com o qual foi possível aprender não só Java, mas também boas práticas de desenvolvimento de software: testes, integração contínua, refatoração de código etc.

No ano de 2008, tive a oportunidade de conhecer a Caelum. Foi quando resolvi me mudar para São Paulo após receber o convite para trabalhar como consultor. Após alguns meses, tive a oportunidade de me tornar instrutor dos cursos de Java existentes na época. Fui editor-chefe do InfoQ Brasil por quase dois anos, onde era responsável pela manutenção, publicação e revisão de todo o conteúdo técnico do site. Também participei da criação dos novos cursos de Hibernate e JSF da Caelum, onde desenvolvi o gosto pela escrita. Paralelo a isso, tive contato com vários outros desenvolvedores da Caelum, que me incentivaram a aprender um pouco sobre Ruby, que já era uma vontade minha naquele tempo.

Em 2011, recebi o convite para ser um dos integrantes do time responsável por desenvolver o novo CMS do portal R7.com, que seria escrito principalmente em Ruby. Aceitei o desafio, e desde então me dedico diariamente ao aprendizado de coisas novas em relação à linguagem Ruby. Mas não só isso, eu gosto particularmente de resolver problemas relacionados à arquitetura que visam melhorar a escalabilidade e alta disponibilidade do portal.

Procuro sempre as melhoras formas de escrever códigos legíveis e testáveis utilizando Ruby. Apesar de ser um apaixonado pela linguagem e considerá-la umas das melhores com as quais já trabalhei, costumo criticar seus pontos fracos, inclusive neste próprio livro. Acho que cada problema possui uma linguagem melhor para resolvê-lo.

 

Um breve prefácio

 

Ruby é uma linguagem dinâmica, orientada a objetos e que possui algumas características funcionais. Seu criador, Yukihiro Matsumoto, queria uma linguagem que juntasse programação funcional e imperativa, mas acima de tudo que fosse uma linguagem legível. Esta é uma das grandes vantagens da linguagem, ser extremamente legível.

Este livro é basicamente um tutorial e uma referência para a linguagem Ruby. Ele cobre a maioria das características da linguagem e também suas principais APIs: String, Enumerable, File etc. Além disso, veremos questões mais avançadas, que permitirão um maior aproveitamento da linguagem, como metaprogramação, distribuição de código e gerenciamento de dependências.

 

Por que Ruby?

 

Além das características citadas anteriormente, Ruby é a linguagem que eu utilizo para a maioria dos programas que escrevo, principalmente quando vou começar aplicações web. Trabalho há dois anos com Ruby, e posso dizer que a linguagem é extremamente produtiva e simples, consigo fazer coisas simples, com poucas linhas de código.

Nos últimos anos, a linguagem progrediu assustadoramente. A comunidade cresceu bastante: possui o Rubygems, onde se encontram um grande número de projetos que auxiliam o dia a dia do desenvolvedor Ruby. No Github, a grande maioria dos repositórios é escrita em Ruby, o que permite que a comunidade contribua cada vez mais para a melhoria do ambiente em volta da linguagem.

Além disso, o framework MVC Ruby on Rails permite a criação de aplicações web com extrema rapidez. Essa agilidade tem sido considerada por várias startups no momento da criação de seus produtos. A vantagem é que o número de vagas disponíveis no mercado cresce a cada dia, principalmente em polos de desenvolvimento como a Califórnia.

Atualmente, aprender apenas Rails não é o suficiente. É necessário um bom conhecimento da linguagem para criar códigos que facilitem a manutenção e criação de novas funcionalidades. Aprender mais sobre a linguagem Ruby faz com que você consiga escrever códigos mais legíveis e deixe de lado vícios que podem ter vindo de outras linguagens com que você trabalhava.

Sumário

  • 1 - Uma introdução prática à linguagem Ruby
    • 1.1 - Quando? Onde? Por quê?
    • 1.2 - Instalação
    • 1.3 - Tudo pronto... mãos à massa: Inferência de tipos
    • 1.4 - Tipagem forte e dinâmica
    • 1.5 - Uma linguagem interpretada e com classes abertas
    • 1.6 - Onde eu usaria Ruby?
  • 2 - Seu primeiro passo no Ruby: convenções e as diferentes estruturas primitivas
    • 2.1 - Mais tipos no Ruby
    • 2.2 - Comente seu código
    • 2.3 - O trabalho com números
    • 2.4 - Representação de textos com as Strings
    • 2.5 - Estruturas de controle
    • 2.6 - Entenda o valor nulo
    • 2.7 - Substitua o "if not" por "unless"
    • 2.8 - Iterações simples com for, while, until
    • 2.9 - As outras formas de declarar Strings
    • 2.10 - Próximos passos
  • 3 - O começo da nossa aplicação
    • 3.1 - A definição da classe Livro
    • 3.2 - Crie a estrutura do projeto
    • 3.3 - Defina os atributos de instância
    • 3.4 - Sobrescrevendo o método to_s
    • 3.5 - Alteração e leitura de atributos
    • 3.6 - Atributos nem tão privados assim
    • 3.7 - Grandes poderes, grandes responsabilidades
  • 4 - Estruturas de dados
    • 4.1 - Trabalhe com Arrays
    • 4.2 - Guardando nosso livros
    • 4.3 - Percorrendo meu array
    • 4.4 - Como separar os livros por categoria: trabalhe com Hash
    • 4.5 - Indo mais a fundo: Hashes no Ruby 1.9
    • 4.6 - Indo mais a fundo: O operador ||=
    • 4.7 - Indo mais a fundo: O tipo Set
    • 4.8 - E agora?
  • 5 - Ruby e a programação funcional
    • 5.1 - O que é programação funcional
    • 5.2 - Funções puras
    • 5.3 - Comandos que retornam valores
    • 5.4 - Funções de alta ordem Higher-order functions
    • 5.5 - Crie seu próprio código que usa um bloco de código
    • 5.6 - Explorando a API Enumerable
    • 5.7 - Para saber mais: Outras maneiras de criar blocos
    • 5.8 - Para saber mais: Currying
    • 5.9 - Para saber mais: Closure
    • 5.10 - Próximos passos
  • 6 - Explorando API File
    • 6.1 - Um pouco da classe File
    • 6.2 - Serialização de objetos
    • 6.3 - Salvando objetos em arquivos
    • 6.4 - Recuperando objetos salvos
    • 6.5 - Próximos passos
  • 7 - Compartilhando Comportamentos: Herança, Módulos e Mixins
    • 7.1 - Herança: Compartilhando comportamentos com classes
    • 7.2 - Herança e variáveis de instância
    • 7.3 - Os custos no uso da herança
    • 7.4 - Módulos
    • 7.5 - Indo mais a fundo: Constant Lookup de dentro para fora
    • 7.6 - Duck Typing: o polimorfismo aplicado no Ruby
    • 7.7 - Herança ou Mixing? Qual devo usar?
  • 8 - Metaprogramação e seus segredos
    • 8.1 - Entenda o self e method calling
    • 8.2 - O impacto do self na definição de classes
    • 8.3 - Singleton Class e a ordem da busca de métodos
    • 8.4 - Indo mais a fundo: Acessando a Singleton Class
    • 8.5 - Metaprogramação e as definições de uma classe
    • 8.6 - Criando um framework para persistir objetos em arquivos
    • 8.7 - Gerenciando exceções e erros
    • 8.8 - A exclusão de dados implementada com metaprogramação
    • 8.9 - method lookup e method missing
    • 8.10 - Utilizando expressões regulares nas buscas
    • 8.11 - Próximos passos
  • 9 - As bibliotecas no universo Ruby
    • 9.1 - Como manusear suas gems com o Rubygems
    • 9.2 - Gerenciando várias versões de uma gem
    • 9.3 - Gerencie dependências com o Bundler
    • 9.4 - Quem usa bundler?
    • 9.5 - Criando e distribuindo gems
    • 9.6 - Distribuição da biblioteca
    • 9.7 - Próximos passos
  • 10 - Criando tasks usando Rake
    • 10.1 - Parâmetros na rake task
    • 10.2 - Tasks com pré-requisitos
    • 10.3 - Próximos passos
  • 11 - RVM (Ruby Version Manager)
    • 11.1 - Instalação
    • 11.2 - Instalando diferentes Rubies
    • 11.3 - Organize suas gems utilizando gemsets
    • 11.4 - Troque automaticamente de gemsets com .rvmrc
    • 11.5 - Próximos passos
  • 12 - Ruby 2.0
    • 12.1 - Evitando monkey patches com Refinements
    • 12.2 - Named Parameters
    • 12.3 - Utilize prepend ao invés de include
    • 12.4 - Utilizando lazy load no módulo Enumerable
    • 12.5 - Encoding UTF-8
    • 12.6 - Próximos passos
  • 13 - Apêndice: Concorrência e paralelismo
    • 13.1 - Threads
    • 13.2 - Múltiplos processos
    • 13.3 - Fibers
    • 13.4 - O design pattern Reactor
    • 13.5 - Conclusão

Dados do produto

Número de páginas:
285
ISBN:
978-85-66250-24-4
Data publicação:
10/2012

Compartilhe!

Compartilhe no Facebook Compartilhe no Twitter