SlideShare uma empresa Scribd logo
1 de 114
Curso de Ruby  Regis Pires Magalhães [email_address] “ A melhor forma de prever o futuro é inventá-lo.” Alan Kay
Overview ,[object Object]
Entrada / Saída
Comentários
Convenções
Variáveis, Constantes
Operadores
Tipos
Estruturas de Controle
Orientação a Objetos no Ruby
Meta-programação
Tratamento de Exceções
Módulos
Mixin
Procs
Fechamento ou Closure
Ruby ,[object Object]
Matz nasceu no Japão em 1965.
Junta as melhores partes de gigantes do passado e do presente.
Mais usada no Japão que Python.
Popularizada pelo Rails.
Ruby Segundo Matz: “ Ruby é uma linguagem de scripting interpretada cujo objetivo é tornar a programação orientada a objetos simples e rápida. (...) É simples, direta, extensível e portável.” Fonte:  http://www2.ruby-lang.org/en/20020101.html
Ruby – Características ,[object Object]
Tipagem forte;
Livre / Open Source;
Foco na  simplicidade  e  produtividade ;
Programação  divertida ;
Interpretada;
Mixins, blocos e fechamentos;
Totalmente orientada a objetos.
Classes e objetos são abertos para redefinições a qualquer momento
Implementações do Ruby ,[object Object]
JRuby – Implementação em Java
YARV – Máquina Virtual – Versão 1.9 ,[object Object]
Rails  ≈  15% mais rápido que com Ruby 1.8.6 ,[object Object]
IronRuby  – Implementação em .NET
MagLev  – Ruby sobre VM da GemStone (excelente VM SmallTalk)
Instalação do Ruby 1 – No Linux  – 2 alternativas: ,[object Object],tar xjvf ruby-1.8.7-p22.tar.bz2 ./configure make make install ,[object Object],sudo apt-get install ruby rubygems irb ri rdoc ruby1.8-dev build-essential sudo apt-get install libmysql-ruby libpgsql-ruby libsqlite3-ruby
Instalação do Ruby 2 – No Windows : One-Click Installer ,[object Object],http://rubyforge.org/frs/download.php/72085/rubyinstaller-1.8.7-p302.exe
Instalação do Ruby 3 – No Windows ou Linux: ,[object Object],http://rubyforge.org/frs/download.php/57834/easy-rails-0.9.5.exe http://rubyforge.org/frs/download.php/72564/easy-rails-linux-0.9.3.md5
Testando o Ruby ruby -v
irb - interactive ruby ,[object Object]
Permite executar trechos de códigos Ruby, retornando o resultado de imediato. C : InstantRails rails_apps > irb irb ( main ) :001:0 >   a = 123 =>   123 irb ( main ) :002:0 >   b = 456 =>   456 irb ( main ) :003:0 >   a * b =>   56088 irb ( main ) :004:0 >
irb – ativando o auto-complemento irb ( main ) :010:0 >   require   'irb/completion' =>   true ~ $  irb   - r   irb / completion ,[object Object]
Com o irb já em execução:
Totalmente orientada a objetos ,[object Object]
Qualquer coisa que não seja executado dentro de um método, está implicitamente sendo executado dentro do método  main  da classe  Object . irb ( main ) :001:0 >   puts   self . class Object =>   nil irb ( main ) :002:0 >   puts   self main =>   nil
Totalmente orientada a objetos 1.class   # => Fixnum  1.class . class   # => Class  1.class . superclass   # => Integer
Totalmente orientada a objetos ,[object Object]
A classe Fixnum é instância da classe Class.
Class define todas as classes em Ruby.
Class é uma metaclasse, ou seja, uma classe que descreve uma classe.
Hierarquia: ,[object Object]
Metaclasses:  Object => Module => Class
Totalmente orientada a objetos ,[object Object],1.to_s   # => "1"  1   +   1   # => 2  1. +( 1 )   # => 2  - 1.abs   # => 1  "123" . length   # => 3
[object Object]
Exemplo.methods  é diferente de  Exemplo.new.methods . Totalmente orientada a objetos Object . class   # => Class  class   Exemplo ;   end   Exemplo . class   # => Class  Exemplo . methods   # => [...]
O método methods 1.methods.sort 1.public_methods.sort 1.protected_methods.sort 1.private_methods.sort String.methods.sort
Entrada / Saída nome   =   gets . chomp Pedro # => "Pedro" puts   nome Pedro # => nil chomp -> mastigar, roer
Comentários x = y + 5  # Isto é um comentário de linha. # Isto é um outro comentário de linha. =begin Isto é um comentário de bloco. =end
Convenções NomesDeClasse nomes_de_metodos   e   nomes_de_variaveis metodos_fazendo_pergunta? metodos_perigosos! @variaveis_de_instancia @@variaveis_de_classe $variaveis_globais ALGUMAS_CONSTANTES   ou   OutrasConstantes
Variáveis ,[object Object]
São fortemente tipadas:  2 + "2"  não é possível.
Variáveis locais:  quantidade_dias = 3
Variáveis globais:  $caminho = "/home/curso" ,[object Object]
Variáveis de classe:  @@vogais = ['a', 'e', 'i', 'o', 'u']
Variáveis ,[object Object]
Variáveis são referências para objetos. ~ $  irb   irb ( main ) :001:0 >   a   =   1   =>   1   irb ( main ) :002:0 >   a   =   "1"   =>   "1" '
Operadores ,[object Object]
Igualdade e comparação:   >, >=, <, <=, ==, <=>  ... etc.
Atribuição:   =, +=, -=, *=, /=, ||=  ... etc.
Lógico:   &&, and, ||, or, !, not  ... etc.
Ternário: (a == 2 ? &quot;Dois&quot; : &quot;Outra coisa&quot;)
Operadores ,[object Object],'Curso de Ruby' =~ /de/   # => 6 ,[object Object],cont ||= 0   # cont = cont || 0 ,[object Object]
Constantes ,[object Object]
Devem iniciar em caixa alta:  PI = 3.14
Por convenção possuem todas as letras em caixa alta!
Podem ser alteradas: NOME   =   &quot;Sapo&quot; NOME   =   &quot;Gato&quot;   # Gera um alerta warning: already initialized constant NOME
Tipos ,[object Object]
Booleanos
nil
Strings
Ranges
[Arrays]
{Hashes}
:simbolos
Expressões Regulares
Números ,[object Object]
Eles podem ter qualquer tamanho O tamanho do inteiro é que define seu tipo: n   =   1000000   # => 1000000 n . class   # => Fixnum n   =   1000000000000000   # => 1000000000000000 n . class   # => Bignum
Números 1.class   # => Fixnum  1.0 . class   # => Float  1_000_000.class   # => Fixnum  1_000_000_000   *   1_000_000_000   # => 1000000000000000000  ( 1_000_000_000   *   1_000_000_000 ). class   # => Bignum  ,[object Object]
A classe Bignum pode representar número com precisão infinita, restrita somente à memória e processamento da máquina.
Booleanos ,[object Object],true . class   # => TrueClass false . class   # => FalseClass true . class . superclass   # => Object false . class . superclass   # => Object TrueClass . new NoMethodError :  undefined   method  `new' for TrueClass:Class from (irb):17 from :0
nil ,[object Object],nil . class   # => NilClass nil . class . superclass   # => Object NilClass . new NoMethodError :   undefined   method   `new' for NilClass:Class from (irb):21 from :0
Strings ,[object Object]
Pode carregar caracteres &quot;imprimíveis&quot; ou dados binários.
Podem ser delimitadas por aspas  'simples'  ou  &quot;duplas&quot;.
Podem ocupar várias linhas, sem precisar ficar concatenando.
Strings s   =   &quot;Curso de Ruby&quot; s [ 0 ]   # => 67 s [ 0 ]. chr   # => &quot;C&quot; s [ 6 , 2 ]   # => &quot;de&quot; s [ 6 . . 7 ]   # => &quot;de&quot;
Strings – Métodos Destrutivos a   =   &quot;Ruby&quot;   # => &quot;Ruby&quot; a . object_id   # => 20641550 a . upcase   # => &quot;RUBY&quot; a   # => &quot;Ruby&quot; a . upcase!   # => &quot;RUBY&quot; a   # => &quot;RUBY&quot;  a . object_id   # => 20641550 a.downcase!   # => &quot;ruby&quot;  a   # => &quot;ruby&quot;
Strings são mutáveis s   =   &quot;Ruby&quot;   # => &quot;Ruby&quot; s . object_id   # => 20641550 s   <<   &quot; on &quot;   # => &quot;Ruby on &quot; s . object_id   # => 20641550 ,[object Object],s   =   s   +   &quot;Rails&quot;   # => &quot;Ruby on Rails&quot; s . object_id   # => 21074740
Strings – interpolação de valores ,[object Object],nome   =   &quot;Pacheco&quot;   # => &quot;Pacheco&quot; puts   &quot;Oi,  #{ nome } ,Adorei a Escola da Ponte!&quot; # Oi, Pacheco,  # Adorei a Escola da Ponte!
Strings longas nome   =   &quot;Descartes&quot; s   =   << FIM Penso, logo existo é uma frase de #{nome} FIM puts   s # Penso, logo existo # é uma frase de Descartes
Strings a   =   &quot;valor&quot;   # => &quot;valor&quot; 'aspas simples: #{a}'   # => &quot;aspas simples: {a}&quot; &quot;aspas duplas:  #{ a } &quot;   # => &quot;aspas duplas: valor&quot; %( marcadores   especiais : #{a})   # => &quot;marcadores especiais: valor&quot; s   =   << FIM string com quebra de linha FIM # => &quot;string com quebra de linha&quot; 'sem interpolacao,' &quot;interpolacao e contrabarras&quot; %q(sem interpolacao) %Q(interpolacao e contrabarras) %(interpolacao e contrabarras)
Comparação de Strings a   =   &quot;Uma string qualquer&quot;   b   =   String . new ( &quot;Uma string qualquer&quot; )   a   ==   b   # => true
Strings - Métodos s   =   &quot;Ruby on Rails&quot; s . gsub ( ' ' , '-' )   # => &quot;Ruby-on-Rails&quot; s . gsub ( /[aeiou]/ , '_' )   # => &quot;R_by _n R__ls&quot; s . index ( 'on' )   # => 5 &quot;hello&quot; . chomp   #=> &quot;hello&quot; &quot;hello  there&quot; . chomp   #=> &quot;hello  there&quot; &quot;hello&quot; . chomp ( &quot;llo&quot; )   #=> &quot;he&quot; s   =   'Ruby on Rails' s [ 5 , 2 ]   # => &quot;on&quot; s [ 5..6 ]   # => &quot;on &quot; &quot;Ruby&quot; .reverse   # => &quot;ybuR&quot;
Ranges ,[object Object]
1..7  inclui 1, 2, 3, 4, 5, 6 e 7
1...7  não inclui o 7 &quot;Ruby&quot; [ 1 . . 2 ]   # --> &quot;ub&quot; [ 1 , 2 , 3 , 4 , 5 ][ 1 . . 2 ]   # --> [2,3] ( 2 . . 10 )   ===   3   # true ( &quot;a&quot; .. &quot;z&quot; ). each   {| i |   puts   i } for   n   in   5 . . 10 ;   puts   n ;   end
[Arrays] ,[object Object],a   =   [ 10 ,   7.2 ,   &quot;Maria&quot; ] a . class   # Array a [ 1 ]   # 7.2 a . length   # 3 a [- 1 ]   # &quot;Maria&quot; a   <<   'Fim'   a   =   Array . new a = []  a[ 4 ] =  'Ruby'   a  # => [nil, nil, nil, nil, &quot;Ruby&quot;]
[Arrays] irb ( main ) :009:0 >   a   =   [ 1 , 2 , 3 ] =>   [ 1 ,   2 ,   3 ] irb ( main ) :010:0 >   a . include?   2 =>   true irb ( main ) :011:0 >   a . include?   4 =>   false ,[object Object]
[Arrays] a   =   [ 1 ,   2 ,   3 ,   4 ,   5 ]   puts   a 1 2 3 4 5 puts   a.inspect [ 1 ,   2 ,   3 ,   4 ,   5 ]
%w – array de palavras a  = %w(curso de ruby on rails) => [ &quot;curso&quot; , &quot;de&quot; , &quot;ruby&quot; , &quot;on&quot; , &quot;rails&quot; ] nome ,  sobrenome  =  'regis' ,  'pires' a  = %w(#{ nome } #{ sobrenome }) => [ &quot;{nome}&quot; ,  &quot;{sobrenome}&quot; ] a  = %W(#{ nome } #{ sobrenome }) => [ &quot;regis&quot; ,  &quot;pires&quot; ]
Arrays s   =   'Ruby on Rails' s . split ( ' ' )   # => [&quot;Ruby&quot;, &quot;on&quot;, &quot;Rails&quot;] a   =  %w(um dois tres quatro cinco seis sete oito nove dez) =>   [ &quot;um&quot; ,   &quot;dois&quot; ,   &quot;tres&quot; ,   &quot;quatro&quot; ,   &quot;cinco&quot; ,   &quot;seis&quot; ,   &quot;sete&quot; ,   &quot;oito&quot; ,   &quot;nove&quot; ,   &quot;dez&quot; ] a . grep ( /s$/ ) =>   [ &quot;dois&quot; ,   &quot;tres&quot; ,   &quot;seis&quot; ]
{Hashes} ,[object Object]

Mais conteúdo relacionado

Mais procurados

Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisWende Mendes
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)raquelcarsi
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsLeonardo Melo Santos
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: IntroduçãoWesley R. Bezerra
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]Milena Rebouças
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasLeonardo Melo Santos
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_javaMarcos Souza
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareMarcio Junior Vieira
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 

Mais procurados (18)

Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito mais
 
Atribuições
AtribuiçõesAtribuições
Atribuições
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
Java
JavaJava
Java
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
 
Javascript tutorial
Javascript tutorialJavascript tutorial
Javascript tutorial
 
PHP
PHPPHP
PHP
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 

Destaque

Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webRegis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoRegis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducaoRegis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosRegis Magalhães
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Regis Magalhães
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Regis Magalhães
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 

Destaque (20)

Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Java 14 Javadoc
Java 14 JavadocJava 14 Javadoc
Java 14 Javadoc
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Java 15 Jar
Java 15 JarJava 15 Jar
Java 15 Jar
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Pascal Tipos
Pascal TiposPascal Tipos
Pascal Tipos
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 

Semelhante a Curso Ruby

Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsThiago Cifani
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Julio Monteiro
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptPedro Sousa
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)Julio Betta
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on RailsJuan Maiz
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NETFabiano Roman Beraldi
 

Semelhante a Curso Ruby (20)

Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on Rails
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-pt
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Aula 1
Aula 1Aula 1
Aula 1
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 

Mais de Regis Magalhães

Mais de Regis Magalhães (17)

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
java 00 Introducao
java 00 Introducaojava 00 Introducao
java 00 Introducao
 
POO Plano de Curso
POO Plano de CursoPOO Plano de Curso
POO Plano de Curso
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 

Curso Ruby

  • 1. Curso de Ruby Regis Pires Magalhães [email_address] “ A melhor forma de prever o futuro é inventá-lo.” Alan Kay
  • 2.
  • 14. Mixin
  • 15. Procs
  • 17.
  • 18. Matz nasceu no Japão em 1965.
  • 19. Junta as melhores partes de gigantes do passado e do presente.
  • 20. Mais usada no Japão que Python.
  • 22. Ruby Segundo Matz: “ Ruby é uma linguagem de scripting interpretada cujo objetivo é tornar a programação orientada a objetos simples e rápida. (...) É simples, direta, extensível e portável.” Fonte: http://www2.ruby-lang.org/en/20020101.html
  • 23.
  • 25. Livre / Open Source;
  • 26. Foco na simplicidade e produtividade ;
  • 29. Mixins, blocos e fechamentos;
  • 31. Classes e objetos são abertos para redefinições a qualquer momento
  • 32.
  • 34.
  • 35.
  • 36. IronRuby – Implementação em .NET
  • 37. MagLev – Ruby sobre VM da GemStone (excelente VM SmallTalk)
  • 38.
  • 39.
  • 40.
  • 41. Testando o Ruby ruby -v
  • 42.
  • 43. Permite executar trechos de códigos Ruby, retornando o resultado de imediato. C : InstantRails rails_apps > irb irb ( main ) :001:0 > a = 123 => 123 irb ( main ) :002:0 > b = 456 => 456 irb ( main ) :003:0 > a * b => 56088 irb ( main ) :004:0 >
  • 44.
  • 45. Com o irb já em execução:
  • 46.
  • 47. Qualquer coisa que não seja executado dentro de um método, está implicitamente sendo executado dentro do método main da classe Object . irb ( main ) :001:0 > puts self . class Object => nil irb ( main ) :002:0 > puts self main => nil
  • 48. Totalmente orientada a objetos 1.class # => Fixnum 1.class . class # => Class 1.class . superclass # => Integer
  • 49.
  • 50. A classe Fixnum é instância da classe Class.
  • 51. Class define todas as classes em Ruby.
  • 52. Class é uma metaclasse, ou seja, uma classe que descreve uma classe.
  • 53.
  • 54. Metaclasses: Object => Module => Class
  • 55.
  • 56.
  • 57. Exemplo.methods é diferente de Exemplo.new.methods . Totalmente orientada a objetos Object . class # => Class class Exemplo ; end Exemplo . class # => Class Exemplo . methods # => [...]
  • 58. O método methods 1.methods.sort 1.public_methods.sort 1.protected_methods.sort 1.private_methods.sort String.methods.sort
  • 59. Entrada / Saída nome = gets . chomp Pedro # => &quot;Pedro&quot; puts nome Pedro # => nil chomp -> mastigar, roer
  • 60. Comentários x = y + 5 # Isto é um comentário de linha. # Isto é um outro comentário de linha. =begin Isto é um comentário de bloco. =end
  • 61. Convenções NomesDeClasse nomes_de_metodos e nomes_de_variaveis metodos_fazendo_pergunta? metodos_perigosos! @variaveis_de_instancia @@variaveis_de_classe $variaveis_globais ALGUMAS_CONSTANTES ou OutrasConstantes
  • 62.
  • 63. São fortemente tipadas: 2 + &quot;2&quot; não é possível.
  • 64. Variáveis locais: quantidade_dias = 3
  • 65.
  • 66. Variáveis de classe: @@vogais = ['a', 'e', 'i', 'o', 'u']
  • 67.
  • 68. Variáveis são referências para objetos. ~ $ irb irb ( main ) :001:0 > a = 1 => 1 irb ( main ) :002:0 > a = &quot;1&quot; => &quot;1&quot; '
  • 69.
  • 70. Igualdade e comparação: >, >=, <, <=, ==, <=> ... etc.
  • 71. Atribuição: =, +=, -=, *=, /=, ||= ... etc.
  • 72. Lógico: &&, and, ||, or, !, not ... etc.
  • 73. Ternário: (a == 2 ? &quot;Dois&quot; : &quot;Outra coisa&quot;)
  • 74.
  • 75.
  • 76. Devem iniciar em caixa alta: PI = 3.14
  • 77. Por convenção possuem todas as letras em caixa alta!
  • 78. Podem ser alteradas: NOME = &quot;Sapo&quot; NOME = &quot;Gato&quot; # Gera um alerta warning: already initialized constant NOME
  • 79.
  • 81. nil
  • 88.
  • 89. Eles podem ter qualquer tamanho O tamanho do inteiro é que define seu tipo: n = 1000000 # => 1000000 n . class # => Fixnum n = 1000000000000000 # => 1000000000000000 n . class # => Bignum
  • 90.
  • 91. A classe Bignum pode representar número com precisão infinita, restrita somente à memória e processamento da máquina.
  • 92.
  • 93.
  • 94.
  • 95. Pode carregar caracteres &quot;imprimíveis&quot; ou dados binários.
  • 96. Podem ser delimitadas por aspas 'simples' ou &quot;duplas&quot;.
  • 97. Podem ocupar várias linhas, sem precisar ficar concatenando.
  • 98. Strings s = &quot;Curso de Ruby&quot; s [ 0 ] # => 67 s [ 0 ]. chr # => &quot;C&quot; s [ 6 , 2 ] # => &quot;de&quot; s [ 6 . . 7 ] # => &quot;de&quot;
  • 99. Strings – Métodos Destrutivos a = &quot;Ruby&quot; # => &quot;Ruby&quot; a . object_id # => 20641550 a . upcase # => &quot;RUBY&quot; a # => &quot;Ruby&quot; a . upcase! # => &quot;RUBY&quot; a # => &quot;RUBY&quot; a . object_id # => 20641550 a.downcase! # => &quot;ruby&quot; a # => &quot;ruby&quot;
  • 100.
  • 101.
  • 102. Strings longas nome = &quot;Descartes&quot; s = << FIM Penso, logo existo é uma frase de #{nome} FIM puts s # Penso, logo existo # é uma frase de Descartes
  • 103. Strings a = &quot;valor&quot; # => &quot;valor&quot; 'aspas simples: #{a}' # => &quot;aspas simples: {a}&quot; &quot;aspas duplas: #{ a } &quot; # => &quot;aspas duplas: valor&quot; %( marcadores especiais : #{a}) # => &quot;marcadores especiais: valor&quot; s = << FIM string com quebra de linha FIM # => &quot;string com quebra de linha&quot; 'sem interpolacao,' &quot;interpolacao e contrabarras&quot; %q(sem interpolacao) %Q(interpolacao e contrabarras) %(interpolacao e contrabarras)
  • 104. Comparação de Strings a = &quot;Uma string qualquer&quot; b = String . new ( &quot;Uma string qualquer&quot; ) a == b # => true
  • 105. Strings - Métodos s = &quot;Ruby on Rails&quot; s . gsub ( ' ' , '-' ) # => &quot;Ruby-on-Rails&quot; s . gsub ( /[aeiou]/ , '_' ) # => &quot;R_by _n R__ls&quot; s . index ( 'on' ) # => 5 &quot;hello&quot; . chomp #=> &quot;hello&quot; &quot;hello there&quot; . chomp #=> &quot;hello there&quot; &quot;hello&quot; . chomp ( &quot;llo&quot; ) #=> &quot;he&quot; s = 'Ruby on Rails' s [ 5 , 2 ] # => &quot;on&quot; s [ 5..6 ] # => &quot;on &quot; &quot;Ruby&quot; .reverse # => &quot;ybuR&quot;
  • 106.
  • 107. 1..7 inclui 1, 2, 3, 4, 5, 6 e 7
  • 108. 1...7 não inclui o 7 &quot;Ruby&quot; [ 1 . . 2 ] # --> &quot;ub&quot; [ 1 , 2 , 3 , 4 , 5 ][ 1 . . 2 ] # --> [2,3] ( 2 . . 10 ) === 3 # true ( &quot;a&quot; .. &quot;z&quot; ). each {| i | puts i } for n in 5 . . 10 ; puts n ; end
  • 109.
  • 110.
  • 111. [Arrays] a = [ 1 , 2 , 3 , 4 , 5 ] puts a 1 2 3 4 5 puts a.inspect [ 1 , 2 , 3 , 4 , 5 ]
  • 112. %w – array de palavras a = %w(curso de ruby on rails) => [ &quot;curso&quot; , &quot;de&quot; , &quot;ruby&quot; , &quot;on&quot; , &quot;rails&quot; ] nome , sobrenome = 'regis' , 'pires' a = %w(#{ nome } #{ sobrenome }) => [ &quot;{nome}&quot; , &quot;{sobrenome}&quot; ] a = %W(#{ nome } #{ sobrenome }) => [ &quot;regis&quot; , &quot;pires&quot; ]
  • 113. Arrays s = 'Ruby on Rails' s . split ( ' ' ) # => [&quot;Ruby&quot;, &quot;on&quot;, &quot;Rails&quot;] a = %w(um dois tres quatro cinco seis sete oito nove dez) => [ &quot;um&quot; , &quot;dois&quot; , &quot;tres&quot; , &quot;quatro&quot; , &quot;cinco&quot; , &quot;seis&quot; , &quot;sete&quot; , &quot;oito&quot; , &quot;nove&quot; , &quot;dez&quot; ] a . grep ( /s$/ ) => [ &quot;dois&quot; , &quot;tres&quot; , &quot;seis&quot; ]
  • 114.
  • 115. Cada entrada é composta por uma chave (única) e um valor a = { 'um' => 1 , 'bola' => 2 , 3 => 'Maria' } a . class => Hash a [ 1 ] => nil a [ 'um' ] => 1 a . length => 3 a = Hash . new a = {}
  • 116.
  • 117.
  • 118. :simbolos :nome . to_s # => &quot;nome&quot;
  • 119.
  • 120.
  • 121. then é opcional no if e unless
  • 122.
  • 123. Estruturas de Controle puts 'ola' if not a or not b puts 'oi' unless y != 3 if x < 5 then puts 'menor que 5' end x = if a>0 then b else c end x = unless a<=0 then c else b end
  • 124.
  • 125. Estruturas de Controle case scale when 'C' , 'c' F = 1.8 * temp + 32 when 'F' , 'f' C = ( 5.0 / 9.0 ) * (temp- 32 ) else abort &quot;Must specify C or F.&quot; end
  • 126.
  • 127.
  • 128. Estruturas de Controle list = [ 1 , 2 , 3 ] i= 0 while i < list.size do print &quot; #{list[i]} &quot; i += 1 end list = [ 1 , 2 , 3 ] i= 0 until i == list.size do print &quot; #{list[i]} &quot; i += 1 end
  • 129. Laços contados 1.upto ( 10 ) { |x| puts x } 10.downto ( 1 ) { |x| puts x } 10.step ( 1 , - 2 ) { |x| puts x }
  • 130.
  • 131.
  • 132.
  • 133. ola.rb def diga_ola ( nome ) if nome [ 0. . 3 ] == 'Matz' puts 'Ah, foi vc quem criou o Ruby!' else puts ( &quot;Ola #{ nome } &quot; ) end end print &quot;Qual o seu nome? &quot; nome = gets # Pede uma entrada do usuario diga_ola nome
  • 134. Date require 'date' c = Date.today d = Date . new ( 2010 , 10 , 21 ) # => #<Date: 4910981/2,0,2299161> d . day # => 21 d .mon # => 10 d .month # => 10 d . year # => 2010 d .wda y # => 4 d .mda y # => 21 d . yday # => 294 d . to_s # => &quot;2010-10-21&quot; dt = DateTime.now t = Time.now
  • 135. Arquivos f = File.new( &quot;teste.txt&quot; , &quot;w&quot; ) f << &quot;linha um&quot; f << &quot;linha dois&quot; f << &quot;linha tres&quot; f.close a = File.readlines( &quot;teste.txt&quot; ) => [ &quot;linha um&quot; , &quot;linha dois&quot; , &quot;linha tres&quot; ] a = File.readlines( &quot;teste.txt&quot; ).find_all {|l| l =~ /s$/} => [ &quot;linha dois&quot; , &quot;linha tres&quot; ]
  • 136. UDP Server require 'socket' porta = 12345 s = UDPSocket.new s.bind( &quot;localhost&quot; ,porta) puts &quot;Servidor iniciado na porta #{porta} ...&quot; loop do msg,sender = s.recvfrom( 256 ) host = sender[ 3 ] puts &quot;Host #{host} enviou um pacote UDP: #{msg} &quot; end s.close
  • 137. UDP Client require 'socket' porta = 12345 s = UDPSocket.open s.connect( &quot;localhost&quot; , porta) s.send(ARGV[ 0 ], 0 ) s.close
  • 138.
  • 139. São delimitados por {...} ou do...end .
  • 140. Convenção: use {...} em uma só linha, e do...end para várias linhas.
  • 141. Podem receber parâmetros: meu_array . each { | obj | puts obj } ( 1. . 10 ). each { | i | puts i } ( &quot;a&quot; .. &quot;z&quot; ). each { | i | puts i }
  • 142.
  • 143. Arquivos com blocos de código File.open( &quot;teste.txt&quot; , 'w' ) do |f| f << &quot;linha um&quot; f << &quot;linha dois&quot; f << &quot;linha tres&quot; end File.readlines( &quot;teste.txt&quot; ).each {|l| puts l} File.open( &quot;teste.txt&quot; ) do |f| f.each_line do |l| print l end end Vantagem: não há perigo de esquecer o arquivo aberto, pois ele é fechado automaticamente.
  • 144.
  • 146. Variáveis de classe e de instância
  • 147. Métodos de classe e de instância
  • 150.
  • 151. Os objetos possuem dados (atributos/variáveis) e comportamentos (métodos).
  • 152. Objetos também são chamados de instâncias.
  • 153. 3, 12, 999 são instâncias da classe Fixnum.
  • 154.
  • 155. Usamos o ponto (.) para acessar os métodos: @pessoa.nome .
  • 156.
  • 157. Classes e Objetos class Pessoa def initialize (nome, idade) @nome = nome @idade = idade end def to_s &quot; #{ @nome } tem #{ @idade } anos&quot; end end p1 = Pessoa . new ( &quot;Paulo&quot; , 12) p2 = Pessoa . new ( &quot;Marcio&quot; , 34 )
  • 158.
  • 159. initialize é automaticamente definido como private.
  • 160.
  • 161. Ou utilizamos 'atalhos' para isso: attr_reader, attr_writter, attr_accessor .
  • 162. “Getters” e “Setters” class Pessoa def initialize ( nome , idade ) @nome = nome @idade = idade end def nome= ( nome ) @nome = nome end def nome @nome end attr_accessor :idade end
  • 163.
  • 164. O valor de uma variável de classe é compartilhado com as suas instâncias
  • 165. Variáveis de classe e de instância class Pessoa @@numero_pessoas = 0 # Atrib de classe def initialize ( nome , idade ) @nome = nome # Atrib.de instância @idade = idade @@numero_pessoas += 1 end def numero_pessoas @@numero_pessoas end end
  • 166.
  • 167. Métodos de classe não acessam atributos de instância.
  • 169.
  • 170.
  • 171. Math é uma constante que referencia um objeto Module .
  • 172. File é uma constante que referencia um objeto Class .
  • 173. Métodos de classe e de instância class Pessoa @@numero_pessoas = 0 def initialize ( nome , idade ) @nome = nome @idade = idade @@numero_pesssoas += 1 end def self . numero_pessoas @@numero_pessoas end end p = Pessoa . new 'Joao' , 23 p2 = Pessoa . new 'Maria' , 21 Pessoa . numero_pessoas # => 2 p .to_s # => &quot;Joao tem 23 anos&quot;
  • 174.
  • 175.
  • 176. A classe mais genérica é chamada de super-classe, e a mais específica de sub-classe.
  • 177. Em Ruby existe apenas herança simples, embora possamos simular herança múltipla através de mixins.
  • 178. O super chama o correspondente da super-classe.
  • 179. Herança class B < A end
  • 180. Herança class PessoaFisica < Pessoa def initialize ( nome , idade , cpf ) super ( nome , idade ) @cpf = cpf end # Método dados redefinido def to_s super + &quot;, Cpf= #{ @cpf } &quot; end end
  • 181.
  • 182. Protegidos - chamados apenas pela família.
  • 183.
  • 184. public , protected e private são métodos que modificam a classe dinamicamente e mantém o escopo de acesso até que outro escopo seja chamado.
  • 185. Visibilidade dos Membros class MinhaClasse # Público é o default def metodo1 ... end protected # os seguintes serão protegidos def metodo2 ... end private # os seguintes serão privados def metodo3 ... end public # os seguintes serão públicos def metodo4 ... end end
  • 186.
  • 187. Meta-programação Cao = Class . new Cao . class_eval << FIM def latir puts &quot;Au, Au&quot; end FIM c = Cao . new # => #<Cao:0x2ae93c0> c . latir # => nil Au , Au Programação de programas que escrevem ou manipulam outros programas (ou a si próprios)
  • 188.
  • 189. Meta-programação class Object class << self def reader (* params ) for p in params self . class_eval &quot;def #{ p } ; @ #{ p } ; end&quot; end end end end Cria dinamicamente um “getter” semelhante a attr_reader.
  • 190.
  • 191.
  • 192.
  • 193. Podem ter variáveis, constantes e métodos.
  • 194. Não podem ser instanciados.
  • 195.
  • 196.
  • 197. Módulos # No arquivo calc.rb module Calc PI = 3.141592654 def self . seno ( x ) puts &quot;calc.seno de #{x}&quot; end def self . cosseno ( x ) puts &quot;calc.cosseno de #{x}&quot; end end # Em outro programa carregamos o arquivo # calc.rb usando require 'calc' # Chamamos métodos com &quot;.&quot; e constantes com &quot;::&quot; y = Calc . seno ( Calc :: PI / 4 )
  • 198.
  • 199. Mixin module MyArray def hello puts &quot;Oi! #{ self . length } &quot; if self . respond_to? :length end end class String include MyArray end class Array include MyArray end str = 'teste' arr = [ 1 , 2 , 3 ] str . hello # &quot;Oi!5&quot; arr . hello # &quot;Oi!3&quot;
  • 200.
  • 201.
  • 202.
  • 204.
  • 205. Procs encapsulam blocos em objetos.
  • 206. Pode-se usar Proc.new , proc ou lambda . vezes3 = Proc . new {| n | n * 3 } vezes3 . call ( 1 ) => 3 vezes3 . call ( 2 ) => 6 vezes3 . call ( 3 ) => 9
  • 207.
  • 208.
  • 209. Closures podem fazer referência a variáveis visíveis no momento em que elas foram definidas.
  • 210. Closure = bloco de código + ligações ao ambiente do qual vieram.
  • 211. São métodos anônimos com escopo fechado.
  • 212. São métodos que carregam o contexto no qual foram criados.
  • 213. O bloco pode usar todas as informações do seu contexto original mesmo que o ambiente no qual ele foi definido não mais exista.
  • 214. Fechamento ou Closure def faz2 yield yield end faz2 { puts 'oi' }
  • 215. Fechamento ou Closure class Array def each2 for element in self yield element end end end a = [ 1 , 2 , 3 ] a . each2 { | i | puts i }
  • 216.
  • 217.
  • 218. Fechamento ou Closure def n_vezes ( algo ) Proc . new {| n | algo * n } end p1 = n_vezes 2 p1 . call ( 3 ) => 6 p1 . call ( 4 ) => 8 p2 = n_vezes 'Oi ' p2 . call ( 3 ) => &quot;Oi Oi Oi &quot;
  • 219.
  • 220. Rubygems é o projeto que desenvolveu o sistema de pacotes gem.
  • 221. Simplifica bastante a instalação de bibliotecas em Ruby.
  • 222.
  • 223. Testes &quot;Sempre que estiver tentado a escrever um print ou uma expressão de depuração, escreva um teste.&quot; Martin Fowler
  • 224. Testes class Retangulo def initialize (base, altura) @base = base @altura = altura end def area () @base * @altura end def perimetro () 2 * @base + 2 * @altura end end
  • 225. Testes com RUnit # retangulo_test.rb require 'test/unit' require 'retangulo' class RetanguloTest < Test::Unit::TestCase def setup @r = Retangulo.new( 2 , 3 ) end def test_area assert_equal( 6 , @r .area) end def test_perimetro assert_equal( 10 , @r .perimetro) end def teardown @r = nil end end
  • 226.
  • 227.
  • 228.
  • 229. Testes com RSpec # retangulo_spec.rb require 'retangulo' describe Retangulo do before( :each ) do @r = Retangulo.new( 2 , 3 ) end it 'calcula area do retangulo' do @r .area.should == 6 end it 'calcula perimetro do retangulo' do @r .perimetro.should == 10 end after( :each ) do @r = nil end end
  • 230.
  • 231.
  • 232.