SlideShare a Scribd company logo
1 of 81
Download to read offline
palestra = {
  :assunto => quot;Rubyquot;,
  :autor   => quot;Cássio Marquesquot;
}
Cássio Marques
➔
    Programador
➔
    Ruby, C, C++, Java, Perl e Javascript
➔
    Computação Científica - Universidade de
Taubaté – 2007


    http://cassiomarques.wordpress.com
Antes de mais nada...
Esta não é uma
palestra sobre Rails!
O que é Ruby?
Uma Linguagem de Programação...

          Interpretada

            Dinâmica

         Multi-paradigma

          Open-source
Interpretada

Não é necessário compilar o código!
Dinâmica
Em tempo de execução, é possível:

      Adicionar novo código

        Extender classes

        Extender objetos

    Alterar o sistema de tipos
Multi-paradigma
     Orientada a objetos


          Funcional


Permite programação imperativa
Open-source
   Você pode...

  Olhar o código
 Estudar o código
  Alterar o código
 Melhorar o código
E ainda mais importante que isso tudo...
Não precisa de “ponto e vírgula”!
Origens
Criada no Japão por Yukihiro Matsumoto (Matz)
Fevereiro/1993 - idéias iniciais
➔



Versão 0.95 lançada no Japão em dezembro/1995.
➔



Versão 1.0 lançada oficialmente em dezembro/1996.
➔



Versão atual (stable) - Ruby 1.8.7
➔
Mas...
   Porque esse cara inventou uma nova
linguagem quando já existiam tantas outras?
Matz queria uma linguagem de script...

          Mais poderosa que Perl

    Mais orientada a objetos que Python

  Funcional como Lisp, Haskell e Scheme

Que tivesse tudo o que ele sempre amou em
          Lisp, Eiffel e Smalltalk
E que fosse...
Aspectos centrais do Ruby
Expressividade
      Diga muito


      Seja claro


 Escreva menos código
Imprimir somente pares
entre 1 e um número
      qualquer
C
#include <stdio.h>

void imprime_pares(int limite)
{
  int i;
  for(i = 1; i < = limite; i++)
    if(i%2 == 0)
      printf(quot;%dnquot;, i);
}
Java
public void imprime_pares(int limite) {
  for(int i = 1; i <= limite; i++)
    if(i%2 == 0)
      System.out.println(i);
}
Ruby
def imprime_pares(limite)
  1.upto(limite) {|i| puts i if i%2 == 0}
end
TUDO é um objeto
3.times { puts quot;Olá!quot; }

# Olá!
# Olá!
# Olá!
puts quot;Ruby eh supimpa!quot;.split.reverse

# ==> [quot;supimpa!quot;, quot;ehquot;, quot;Rubyquot;]
true.class # <= TrueClass
false.class # <= FalseClass
nil.class # <= NilClass
0.123.class # <= Float
Características
interessantes
Métodos
SEMPRE retornam algo, nem que seja nil.
Em geral, o valor retornado é o resultado da
última expressão do método.
def um_metodo   def um_metodo
end               quot;Opa!quot;
                end
um_metodo
# nil           um_metodo
                # quot;Opa!quot;
def um_metodo
  1 == 2 - 1    def um_metodo
end               (1..10).to_a
                end
um_metodo
# true          um_metodo
                #
                [1,2,3,4,5,6,7,8,9,10]
Múltiplos retornos por método
def um_metodo
  return 1, 2, 3
end

a, b, c = um_metodo

puts a, b, c
# 1
# 2
# 3
Duck typing
Classes não são tipos!
Tipos são definidos com base no
   que um objeto pode fazer.
Duck typing


 “Se anda como um pato e fala
como um pato, então é um pato!”
class Logger
  def initialize(file)
    @messages_file = file
  end

  def add_message(msg)
    @messages_file << msg + quot;nquot;
  end
end
puts quot;com um arquivo...quot;
log_file = File.new('logfile.txt', 'r+')
logger = Logger.new(log_file)
logger.add_message(quot;uma mensagemquot;)
logger.add_message(quot;outra mensagemquot;)
log_file.rewind
puts log_file.readlines.join

# uma mensagem
# outra mensagem
puts quot;com uma stringquot;
log_string = String.new
logger = Logger.new(log_string)
logger.add_message(quot;uma mensagemquot;)
logger.add_message(quot;outra mensagemquot;)
puts log_string

# uma mensagem
# outra mensagem
Metaprogramação
class Foo
end
Foo.class_eval do
  define_method(quot;blablaquot;) do |arg|
    puts arg
  end
end
f = Foo.new
f.blabla(quot;123quot;)
# 123
class Blergh
  def call_private_method
    private_method
  end

  private
  def private_method
    puts quot;Sou um método privado...quot;
  end
end
b = Blergh.new
b.call_private_method
# Sou um método privado...

b.private_method
# meta.rb:15: private method
`private_method'
# called for #<Blergh:0xb7c3e940>
(NoMethodError)

b.send(:private_method)
# Sou um método privado...
class Foo
  def method_missing(name)
    puts quot;Nao sei responder a #{name.to_s} :-(quot;
  end
end



      f = Foo.new
      f.blabla
      # Nao sei responder a blabla :-(
DSLs

 Domain
 Specific
Languages
describe quot;A Good Programmerquot; do
  it quot;should learn at least one new programming language per yearquot; do
    @programmer = Programmer.new('Bob')
    @programmer.should_receive(:learn_language).and_return(true)
    @programmer.known_languages << Language.new(quot;Rubyquot;)
    @programmer.known_languages.should have(3).items
    @programmer.status.should be_happy
  end

  it quot;should create automated tests for all code he writesquot; do
    @programmer.should_receive(:write_code).and_return(true)
    lambda {
      @programmer.write_code
    }.should change(@programmer.tests, :length).by(1)
  end
end
Sanduíche de Margarina


ingredientes:
- Duas fatias de pão
- Um pouco de margarina


instruções
- Espalhe margarina em um dos lados da fatia de pão
- Coloque o pedaço com margarina junto com o pedaço sem
 margarina
- Sirva


Rende: Uma porção
Tempo de preparo: 1 minuto
receita quot;Sanduiche de Margarinaquot;

ingredientes quot;duas fatias de paoquot;,
             quot;um pouco de margarinaquot;

instrucoes quot;Espalhe margarina em um dos...quot;,
           quot;coloque o pedaço com margarina...quot;,
           quot;Sirvaquot;

rende 1.porcao
tempo 1.minuto
Gems
 Pacotes com bibliotecas ou aplicações em Ruby

Formato de empacotamento de código padronizado
RubyGems

Instalação e remoção de gems e de suas dependências.
Gerência de dependência de pacotes.
Pesquisa e listagem de pacotes locais ou remotos.
Suporte a múltiplas versões instaladas de um mesmo pacote.
Interface simples para criação de novas gems.
Servidores para distribuição de suas próprias gems.
#include quot;ruby.hquot;

void Init_hello()
{
  /* blablabla */
}
extconf.rb

require 'mkmf'

dir_config(quot;helloquot;)

create_makefile(quot;helloquot;)
$ ruby extconf.rb
creating Makefile
$ make
gcc -fPIC -Wall -g -O2 -fPIC -I.
-I/usr/lib/ruby/1.8/i486-linux
-I/usr/lib/ruby/1.8/i486-linux -I.   -c hello.c
gcc -shared -Lquot;/usr/libquot; -o hello.so hello.o
-lruby1.8 -lpthread -ldl -lcrypt -lm    -lc

$ ls
extconf.rb   hello.c   hello.o   hello.so   Makefile
Para usar...
require 'hello'
Implementações do
interpretador Ruby
MRI

Matz Ruby Interpreter
JRuby
  Implementação em Java do
      interpretador Ruby

Permite utilizar bibliotecas Java
    dentro do código Ruby
Rubinius
Implementação em C++ e Ruby do
      interpretador Ruby
IronRuby
Implementação em .NET do
    interpretador Ruby
Testes Automatizados              Web
  Desktop               Scripting
Computação Científica

            Inteligência Artificial

Bioinformática       Etc, etc, etc...
Plataformas Suportadas
• Mac OS X (all varieties)
• Linux (all varieties)
• MS-DOS
• BSDs (including FreeBSD and OpenBSD)
• Acorn RISC OS
• Microsoft Windows 95, 98, XP and Vista (all varieties)
                              ,
• OS/2
• Amiga
• Celulares Symbian Series 60
• Qualquer plataforma para a qual exista uma Máquina Virtual
Java (Usando JRuby ao invés do interpretador Ruby oficial)
Mercado de Trabalho
Ainda não é tão grande quanto o mercado de trabalho para
Java, .NET, etc

No Brasil, ainda cresce mais lentamente do que nos EUA e
na Europa. O Brasil demora a aceitar novas tecnologias.

O maior uso do Ruby no Brasil e no mundo é através do
framework Web Ruby on Rails.

Tem sido uma das linguagens mais utilizadas por start-ups
de tecnologia
Como aprender?
Dezenas de livros (alguns existem em Português,
a grande maioria somente em Inglês)

Comunidade ativa, com inúmeros blogs, fóruns e
listas de discussão
Alguns endereços na internet

http://rubycorner.com/ - Lista de blogs sobre Ruby


http://www.rubyinside.com/ - site de notícias sobre Ruby


http://rubyonbr.org/ - site brasileiro com notícias sobre Ruby

http://groups.google.com/group/rails-br - lista de discussão
brasileira sobre Ruby e Rails

http://ruby-br.org/ - site brasileiro com notícias sobre Ruby
?
Perguntas
OBRIGADO!

More Related Content

What's hot

Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
Maellson Marques
 
Apresentação ruby + rails
Apresentação ruby + railsApresentação ruby + rails
Apresentação ruby + rails
Marcelo Bohn
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
Maellson Marques
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
Luciano Borges
 

What's hot (20)

JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
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
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Apresentação ruby + rails
Apresentação ruby + railsApresentação ruby + rails
Apresentação ruby + rails
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Ruby
RubyRuby
Ruby
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 

Viewers also liked

Minicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up SystemsMinicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up Systems
WakeUpSystems
 
Ruby vs python
Ruby vs pythonRuby vs python
Ruby vs python
Igor Leroy
 
Rest API's with Ruby on Rails
Rest API's with Ruby on RailsRest API's with Ruby on Rails
Rest API's with Ruby on Rails
Ricardo Silva
 

Viewers also liked (7)

7 coisas que todo desenvolvedor Ruby on Rails deveria fazer
7 coisas que todo desenvolvedor Ruby on Rails deveria fazer7 coisas que todo desenvolvedor Ruby on Rails deveria fazer
7 coisas que todo desenvolvedor Ruby on Rails deveria fazer
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao Framework
 
Minicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up SystemsMinicurso Ruby on Rails - Wake Up Systems
Minicurso Ruby on Rails - Wake Up Systems
 
Ruby vs python
Ruby vs pythonRuby vs python
Ruby vs python
 
Rest API's with Ruby on Rails
Rest API's with Ruby on RailsRest API's with Ruby on Rails
Rest API's with Ruby on Rails
 
Java VS Python
Java VS PythonJava VS Python
Java VS Python
 
Apache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - VerisignApache Storm 0.9 basic training - Verisign
Apache Storm 0.9 basic training - Verisign
 

Similar to Palestra Ruby

Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
Joao Lucas Santana
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell Script
Reinaldo Lima
 
Python Mini Curso V0812
Python Mini Curso V0812Python Mini Curso V0812
Python Mini Curso V0812
Luiz Aldabalde
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 

Similar to Palestra Ruby (20)

Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e Diversão
 
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
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Minicurso Ruby on Rails
Minicurso Ruby on RailsMinicurso Ruby on Rails
Minicurso Ruby on Rails
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on Rails
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Apostila linguagem pascal
Apostila linguagem pascalApostila linguagem pascal
Apostila linguagem pascal
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell Script
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Python Mini Curso V0812
Python Mini Curso V0812Python Mini Curso V0812
Python Mini Curso V0812
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 

Recently uploaded

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Recently uploaded (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Palestra Ruby

  • 1. palestra = { :assunto => quot;Rubyquot;, :autor => quot;Cássio Marquesquot; }
  • 2. Cássio Marques ➔ Programador ➔ Ruby, C, C++, Java, Perl e Javascript ➔ Computação Científica - Universidade de Taubaté – 2007 http://cassiomarques.wordpress.com
  • 3. Antes de mais nada...
  • 4. Esta não é uma palestra sobre Rails!
  • 5. O que é Ruby?
  • 6. Uma Linguagem de Programação... Interpretada Dinâmica Multi-paradigma Open-source
  • 7. Interpretada Não é necessário compilar o código!
  • 8.
  • 9. Dinâmica Em tempo de execução, é possível: Adicionar novo código Extender classes Extender objetos Alterar o sistema de tipos
  • 10. Multi-paradigma Orientada a objetos Funcional Permite programação imperativa
  • 11. Open-source Você pode... Olhar o código Estudar o código Alterar o código Melhorar o código
  • 12. E ainda mais importante que isso tudo...
  • 13. Não precisa de “ponto e vírgula”!
  • 15. Criada no Japão por Yukihiro Matsumoto (Matz)
  • 16. Fevereiro/1993 - idéias iniciais ➔ Versão 0.95 lançada no Japão em dezembro/1995. ➔ Versão 1.0 lançada oficialmente em dezembro/1996. ➔ Versão atual (stable) - Ruby 1.8.7 ➔
  • 17. Mas... Porque esse cara inventou uma nova linguagem quando já existiam tantas outras?
  • 18. Matz queria uma linguagem de script... Mais poderosa que Perl Mais orientada a objetos que Python Funcional como Lisp, Haskell e Scheme Que tivesse tudo o que ele sempre amou em Lisp, Eiffel e Smalltalk
  • 20.
  • 22. Expressividade Diga muito Seja claro Escreva menos código
  • 23. Imprimir somente pares entre 1 e um número qualquer
  • 24. C
  • 25. #include <stdio.h> void imprime_pares(int limite) { int i; for(i = 1; i < = limite; i++) if(i%2 == 0) printf(quot;%dnquot;, i); }
  • 26. Java
  • 27. public void imprime_pares(int limite) { for(int i = 1; i <= limite; i++) if(i%2 == 0) System.out.println(i); }
  • 28. Ruby
  • 29. def imprime_pares(limite) 1.upto(limite) {|i| puts i if i%2 == 0} end
  • 30. TUDO é um objeto
  • 31. 3.times { puts quot;Olá!quot; } # Olá! # Olá! # Olá!
  • 32. puts quot;Ruby eh supimpa!quot;.split.reverse # ==> [quot;supimpa!quot;, quot;ehquot;, quot;Rubyquot;]
  • 33. true.class # <= TrueClass false.class # <= FalseClass nil.class # <= NilClass 0.123.class # <= Float
  • 36. SEMPRE retornam algo, nem que seja nil. Em geral, o valor retornado é o resultado da última expressão do método.
  • 37. def um_metodo def um_metodo end quot;Opa!quot; end um_metodo # nil um_metodo # quot;Opa!quot; def um_metodo 1 == 2 - 1 def um_metodo end (1..10).to_a end um_metodo # true um_metodo # [1,2,3,4,5,6,7,8,9,10]
  • 39. def um_metodo return 1, 2, 3 end a, b, c = um_metodo puts a, b, c # 1 # 2 # 3
  • 41.
  • 42. Classes não são tipos! Tipos são definidos com base no que um objeto pode fazer.
  • 43. Duck typing “Se anda como um pato e fala como um pato, então é um pato!”
  • 44. class Logger def initialize(file) @messages_file = file end def add_message(msg) @messages_file << msg + quot;nquot; end end
  • 45. puts quot;com um arquivo...quot; log_file = File.new('logfile.txt', 'r+') logger = Logger.new(log_file) logger.add_message(quot;uma mensagemquot;) logger.add_message(quot;outra mensagemquot;) log_file.rewind puts log_file.readlines.join # uma mensagem # outra mensagem
  • 46. puts quot;com uma stringquot; log_string = String.new logger = Logger.new(log_string) logger.add_message(quot;uma mensagemquot;) logger.add_message(quot;outra mensagemquot;) puts log_string # uma mensagem # outra mensagem
  • 48. class Foo end Foo.class_eval do define_method(quot;blablaquot;) do |arg| puts arg end end f = Foo.new f.blabla(quot;123quot;) # 123
  • 49. class Blergh def call_private_method private_method end private def private_method puts quot;Sou um método privado...quot; end end
  • 50. b = Blergh.new b.call_private_method # Sou um método privado... b.private_method # meta.rb:15: private method `private_method' # called for #<Blergh:0xb7c3e940> (NoMethodError) b.send(:private_method) # Sou um método privado...
  • 51. class Foo def method_missing(name) puts quot;Nao sei responder a #{name.to_s} :-(quot; end end f = Foo.new f.blabla # Nao sei responder a blabla :-(
  • 52.
  • 54. describe quot;A Good Programmerquot; do it quot;should learn at least one new programming language per yearquot; do @programmer = Programmer.new('Bob') @programmer.should_receive(:learn_language).and_return(true) @programmer.known_languages << Language.new(quot;Rubyquot;) @programmer.known_languages.should have(3).items @programmer.status.should be_happy end it quot;should create automated tests for all code he writesquot; do @programmer.should_receive(:write_code).and_return(true) lambda { @programmer.write_code }.should change(@programmer.tests, :length).by(1) end end
  • 55. Sanduíche de Margarina ingredientes: - Duas fatias de pão - Um pouco de margarina instruções - Espalhe margarina em um dos lados da fatia de pão - Coloque o pedaço com margarina junto com o pedaço sem margarina - Sirva Rende: Uma porção Tempo de preparo: 1 minuto
  • 56. receita quot;Sanduiche de Margarinaquot; ingredientes quot;duas fatias de paoquot;, quot;um pouco de margarinaquot; instrucoes quot;Espalhe margarina em um dos...quot;, quot;coloque o pedaço com margarina...quot;, quot;Sirvaquot; rende 1.porcao tempo 1.minuto
  • 57.
  • 58. Gems Pacotes com bibliotecas ou aplicações em Ruby Formato de empacotamento de código padronizado
  • 59. RubyGems Instalação e remoção de gems e de suas dependências. Gerência de dependência de pacotes. Pesquisa e listagem de pacotes locais ou remotos. Suporte a múltiplas versões instaladas de um mesmo pacote. Interface simples para criação de novas gems. Servidores para distribuição de suas próprias gems.
  • 60.
  • 63. $ ruby extconf.rb creating Makefile $ make gcc -fPIC -Wall -g -O2 -fPIC -I. -I/usr/lib/ruby/1.8/i486-linux -I/usr/lib/ruby/1.8/i486-linux -I. -c hello.c gcc -shared -Lquot;/usr/libquot; -o hello.so hello.o -lruby1.8 -lpthread -ldl -lcrypt -lm -lc $ ls extconf.rb hello.c hello.o hello.so Makefile
  • 68. JRuby Implementação em Java do interpretador Ruby Permite utilizar bibliotecas Java dentro do código Ruby
  • 69. Rubinius Implementação em C++ e Ruby do interpretador Ruby
  • 70. IronRuby Implementação em .NET do interpretador Ruby
  • 71.
  • 72. Testes Automatizados Web Desktop Scripting Computação Científica Inteligência Artificial Bioinformática Etc, etc, etc...
  • 74. • Mac OS X (all varieties) • Linux (all varieties) • MS-DOS • BSDs (including FreeBSD and OpenBSD) • Acorn RISC OS • Microsoft Windows 95, 98, XP and Vista (all varieties) , • OS/2 • Amiga • Celulares Symbian Series 60 • Qualquer plataforma para a qual exista uma Máquina Virtual Java (Usando JRuby ao invés do interpretador Ruby oficial)
  • 76. Ainda não é tão grande quanto o mercado de trabalho para Java, .NET, etc No Brasil, ainda cresce mais lentamente do que nos EUA e na Europa. O Brasil demora a aceitar novas tecnologias. O maior uso do Ruby no Brasil e no mundo é através do framework Web Ruby on Rails. Tem sido uma das linguagens mais utilizadas por start-ups de tecnologia
  • 78. Dezenas de livros (alguns existem em Português, a grande maioria somente em Inglês) Comunidade ativa, com inúmeros blogs, fóruns e listas de discussão
  • 79. Alguns endereços na internet http://rubycorner.com/ - Lista de blogs sobre Ruby http://www.rubyinside.com/ - site de notícias sobre Ruby http://rubyonbr.org/ - site brasileiro com notícias sobre Ruby http://groups.google.com/group/rails-br - lista de discussão brasileira sobre Ruby e Rails http://ruby-br.org/ - site brasileiro com notícias sobre Ruby