SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Maurício Linhares

APRENDENDO RUBY
O que?
—  Do   Japão
  ◦  Yukihiko “Matz” Matsumoto

—  Trazida
         ao mundo ocidental pelos
  Pragmatic Programmers
  ◦  Andy Hunt e Dave Thomas (livro da
     machadinha)

—  Completamente    orientada a objetos
  ◦  Não existem tipos primitivos
Como?
—  Linguagem “de   script” interpretada;

—  Muito   influenciada por Smalltalk e Perl;

—  Contém conceitos de linguagens
  funcionais (closures – blocos de código);

—  Completamente
                dinâmica (tudo pode
  mudar em tempo de execução);
RVM – Ruby Version Manager
—  Solução
          pra instalar vários
  interpretadores Ruby ao mesmo tempo
  na sua máquina;

—  Possibilita
            criar aplicações completamente
  independentes no seu ambiente de
  desenvolvimento, isolando tudo e todos;
Instalando o RVM
—  Instale   o Git na sua máquina

—  bash
       < <(curl –s
  https://rvm.beginrescueend.com/install/rvm)

—  Feche     o console e abra outra vez

—  rvm    notes
  ◦  E faça o que ele mandar
Instalando um Ruby com o RVM
—  rvm   install ruby-1.9.2

—  rvm   use 1.9.2

—  rvm   --default use 1.9.2
Rubygems!
—  gem   install bundler rails

—  ORubygems é o gerenciador de pacotes
  do Ruby, é com ele que você vai instalar
  as dependências da sua aplicação;

—  Na
     sua máquina ele é chamado pelo
  comando “gem”;
Bundler -> bundle install
—  É
    quem garante que todas as
  dependências da sua aplicação estão
  disponíveis para que ela possa executar;

—  Usaum arquivo chamando Gemfile onde
  você define as suas dependências e ele as
  instala usando o Rubygems;

—  Garante
          que todos os desenvolvedores
  usam as mesmas coisas no trabalho;
Começando a brincar com o IRB
—  IRBé o “Interactive Ruby”, o console da
  linguagem;

—  Pode-se enviar comandos ou se definir
  classes, módulos, funções e qualquer
  outra coisa pra se utilizar durante uma
  sessão;
Brincando
numero = 30
outro_numero = -20
numero + outro_numero

numero + outro_numero.abs
Primeiras tres regras de Ruby
—  Nãose usam ‘;’ ou qualquer outra coisa pra
  indicar o fim de uma linha, o fim da linha é o
  fim da linha, oras;

—  Variáveis
          não tem tipo, elas simplesmente
  guardam um objeto qualquer, de qualquer
  tipo;

—  Quando nós vamos dar nomes a variáveis,
  normalmente separamos nomes compostos
  com “_”;
Continuando a brincadeira,
definindo um método
def soma( primeiro, segundo)
 primeiro + segundo
end

soma( 10, 20)

soma 50, 90
Mais quatro regrinhas – 1
—  A
    definição de um método começa com
  “def” depois vem o nome do método e
  depois seus parâmetros entre parenteses;

—  Blocosde código, como métodos, classes,
  “ifs” são sempre fechados com “end”, aqui
  não tem “{}” não;
Mais quatro (5) regrinhas - 2
—  EmRuby não se usa “return”, se a última
  expressão no corpo de um método for
  avaliada para um valor, esse valor é
  retornado;

—  O
    uso de parênteses não é obrigatório na
  chamada de métodos, mas tenha cuidado
  com a legibilidade;

—  Bem, vocêainda pode usar “return” se
  quiser, mas é feio, oras;
Classes
class Song
  def initialize(name, artist, duration)
      @name = name
      @artist = artist
      @duration = duration
  end
end

musica = Song.new “Denied”, “Sonic
 Syndicate”, 3
musica.inspect
Mais regras
—  A
    definição de uma classe começa com a
  palavra “class”;

—  As
     classes são sempre “abertas”, você pode
  redefinir os métodos de uma classe em
  qualquer lugar, é só declarar ela outra vez;

—  Nomesde classe normalmente são definidos
  usando CamelCase (como em
  NomeDeClasse);
Mais regras
—  Os contrutores são os métodos “initialize
  ()”, que são invocados indiretamente,
  através do método de classe “new”;

—  Nãoé possível fazer sobrecarga de
  construtores em Ruby =( ;

—  Variáveis
         de instância tem o nome
  começado por “@”;
Atributos
class Song
  attr_writer :duration
  attr_reader :duration
  attr_acessor :title
end
song = Song.new("Bicylops", "Fleck", 260)
song.duration = 257
song.title = ‘Triciclops’
Regras denovo
—  attr_reader
             define métodos de acesso a
 um atributo de instância de um objeto;

—  attr_writer
            define métodos de alteraçao a
 um atributo de instância de um objeto,
 assim como o reader, ele cria a variável
 dentro do objeto;

—  attr_acessor
              faz o mesmo que os dois
 anteriores juntos;
Definindo atributos virtuais
class Song
  def duration_in_minutes
      @duration/60.0
  end
  def duration_in_minutes=(new_duration)
      @duration = (new_duration * 60).to_i
  end
end
O que é que nós fizemos?
—  Criamosmétodos de acesso a um
 atributo, mas o cliente não sabe se são
 métodos ou se ele está acessando os
 atributos diretamente;

—  Sobrescrevemos o operador
 “=“ (atribuição) para a nossa propriedade,
 Ruby tem sobrecarga de operadores
 (alguns, apenas)!
Constantes,Variáveis e métodos de
classe
class SongList
  @@calls_total
  MAX_TIME = 5*60 # 5 minutos
  MIN_TIME = 1*60 # 1 minuto
  def SongList.is_too_long(song)
       song.duration > MAX_TIME
  end
  def self.is_too_short(song)
       song.duration < MIN_TIME
  end
end
E aí?
—  Variáveis
          de classe são definidas com dois
  “@”, como em “@@variavel_de_classe”;

—  Constantessão definidas com o seu nome
  completo em “caixa alta” (na verdade é só a
  primeira letra, mas use o NOME
  COMPLETO);

—  Métodos
          de classe são definidos colocando
  o nome da classe antes do nome do método
  ou usando “self” (é o “this” em Ruby);
acesso aos objetos
class MyClass
        def method1 # o padrão é public
        end
   protected
        def method2
        end
   private
        def method3
        end
   public
        def method4
        end
end
Como acessar?
—  Osníveis de acesso são definidos em
  blocos, quando não há definição, é public,
  quando se quer definir um nível de
  acesso, deve-se utilizar um bloco de
  acesso;

—  Um bloco termina assim que outro se
  iniciar;
Mas não é ruim não ter tipos?



           Eu faço “quack()”, “nadar()”
           e “voar()”, igual a qualquer
           outro pato, eu sou ou não
                    um pato?
Tudo são mensagens!
—  Pois   é, você perdeu a aula de Smalltalk né?

—  Nãoimporta qual o tipo do objeto, o que
  importa são as mensagens (métodos?)
  que ele é capaz de responder;

—  Se
     faz quack, nada e voa feito um pato,
  então pra mim é um pato;
Arrays
a = [ 3.14159, "pie", 99 ]
a[0] # 3.14159
a[3] # nil
a << 123 # adicionando um item
a[4] = 456 #adicionando outro item
a[-1] # 456 – acessando de trás pra frente
a[2..4] # [99, 123, 456]
Explicando arrays
—  Arrays
         são definidos pela simples
  declaração de “[]”, como em “a = []”,
  também pode-se fazer “a = Array.new”;

—  Arrayssão acessados pelo índice, tanto
  positivo (ordem crescente) como
  negativo (ordem decrescente);

—  Quando se acessa um índice que não
  existe em um array, ele retorna “nil”;
Explicando arrays
—  Novos items podem ser colocados no array
  simplesmente utilizando o próprio operador
  “[]”, como em “a[10] = 10”;

—  Para
       se adicionar um item no fim do array
  usa-se o operador “<<“, como em “a <<
  10”;

—  Arrays
         podem ser pegos em ‘pedaços’ como
  em “a[1..3]”, que cria um novo array com os
  itens do índice 1 ao 3;
hashes
h = { 'dog' => 'canine', 'cat' => 'feline',
  'donkey' => 'asinine' }
h.length # 3
h['dog'] # "canine"
h['cow'] = 'bovine'
h[12] = 'dodecine'
h['cat'] = 99
Entendendo hashes
—  São
     conjuntos de “chave-valor” (Lembra
  do Map em Java?);

—  São
      declarados com o uso de “{}” como
  em “h = {}”, ou usando Hash.new;

—  Para
       se adicionar itens basta usar o
  operador [], como em “h[‘chave’] =
  ‘valor’”;
Você consegue explicar isso?
class SongList
  def with_title(title)
      for i in 0...@songs.length
             return @songs[i] if title ==
  @songs[i].name
      end
      return nil
  end
end
E isso?
class SongList
  def with_title(title)
      @songs.find {|song| title ==
  song.name }
  end
end
Código solto?
—  Blocossão pedaços de código que podem
  ser passados como parâmetros para
  funções, para fazer algum trabalho
  especial, como filtragem, ordenação e
  outros;

—  Você
      pode definir os seus próprios
  métodos que aceitam blocos;
Strings
'escape using ""' # escape using ""

'That's right' ! #That's right

"Seconds/day: #{24*60*60}" # Seconds/day:
  86400
def to_s
  “Song: #@song Artist: #{@artist}”
end
strings
#Q!String de muitas linhas com aspas
 duplas e acessando variáveis #{variavel}!

#q( String de muitas linhas com aspas
 simples, aqui não pode ter variável )

‘a’ << ‘b’ << ‘c’ # ‘abc’
Como é?
—  Strings
          são sequências de caracteres de 8
  bits, não necessariamente Unicode;

—  Elas
      podem ser definidas usando ‘’ (aspas
  simples) ou “” (aspas duplas);

—  Usando aspas duplas você pode colocar
  expressões ou variáveis com o uso do
  caracter “#” seguido de “{}” para variáveis de
  método ou funções ou apenas ‘@’ para
  variáveis de instância;
ranges
1..10 # [1,2,3,4,5,6,7,8,9,10]

'a'..'z‘ # lembra do alfabeto?

my_array = [ 1, 2, 3 ]

0...my_array.length # [0,1,2,3,4]

(1..10).to_a # [1, 2, 3, 4, 5, 6, 7, 8, 9,10]

('bar'..'bat').to_a # ["bar", "bas", "bat"]
O que são ranges?
—  São
      um conjunto de objetos em
  sequência, normalmente caracteres ou
  números;

—  São definidos através da declaração de
  [ ‘valor inicial’ .. ‘valor final’ ], como em
  [1..100];

—  Você
      pode definir os seus próprios ranges
  com o operador “<=>” (disco voador?);
Criando Seu próprio range
class VU include Comparable
   attr :volume
   def initialize(volume)
          @volume = volume
   end
   def to_s
          '#' * @volume
   end
   def <=>(other)
          self.volume <=> other.volume
   end
   def succ
          raise(IndexError, "Volume too big") if @volume >= 9
          VU.new(@volume.succ)
   end
end
Numeros
num = 81
6.times do
  puts "#{num.class}: #{num}"
  num *= num
end
Um pouco mais sobre métodos
def cool_dude(arg1="Miles", arg2="Coltrane",
  arg3="Roach")
  "#{arg1}, #{arg2}, #{arg3}."
end

cool_dude # "Miles, Coltrane, Roach."
cool_dude("Bart") # "Bart, Coltrane, Roach."
cool_dude("Bart", "Elwood") # "Bart, Elwood,
  Roach."
cool_dude("Bart", "Elwood", "Linus") # "Bart,
  Elwood, Linus."
Um pouco mais sobre métodos
def meth_three
 100.times do |num|
     square = num*num
     return num, square if square > 1000
 end
end

num, square = meth_three
Um pouco mais sobre metodos
def five(a, b, c, d, e)
 "I was passed #{a} #{b} #{c} #{d} #{e}"
end

five(1, 2, 3, 4, 5 ) # "I was passed 1 2 3 4 5"
five(1, 2, 3, *['a', 'b']) # "I was passed 1 2 3 a
   b"
five(*(10..14).to_a) # "I was passed 10 11
   12 13 14"
Ainda em métodos
class SongList
  def create_search(name, params)
      # ...
  end
end

list.create_search('short jazz songs',
       :genre => :jazz,
       :duration_less_than => 270)
If/unless
puts "a = #{a}" if debug

print total unless total.zero?

if x == 2
   puts x
elsif x < 0
   puts “#{x} é menor que zero”
else
   puts ‘Caiu no else’
end
Case/when (conhece o swiTch?)
leap = case
     when year % 400 == 0 then true
     when year % 100 == 0 then false
     else year % 4 == 0
     end
Que lindo switch
case input_line
  when "debug"
       dump_debug_info
       dump_symbols
  when /ps+(w+)/
       dump_variable($1)
  when "quit", "exit"
       exit
  else
       print "Illegal command: #{input_line}"
  end
while
print "Hellon" while false

begin
  print "Goodbyen"
end while false

while x < 10
  puts “X é #{x}”
  x=x+1
end
Quem precisa de um for?
3.times do
  print "Ho! “
end

0.upto(9) do |x|
  print x, " "
end

[ 1..5 ].each {|val| puts “ #{val} ” }
Mas você ainda quer um for?
for i in ['fee', 'fi', 'fo', 'fum']
  print i, " "
end

for i in 1..3
  print i, " "
end
Break, redo e next
while line = gets
 next if line =~ /^s*#/ # pular comentários
 break if line =~ /^END/ # parar no fim
 # executar coisas
 redo if line.gsub!(/`(.*?)`/) { eval($1) }
 # process line ...
end
Tente outra vez
for i in 1..100
  print "Now at #{i}. Restart? "
  retry if gets =~ /^y/i
end
DÚVIDAS?

Mais conteúdo relacionado

Mais procurados

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Tchelinux
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicasHelder da Rocha
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe VectorWesley R. Bezerra
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Paulo Henrique Lerbach Rodrigues
 

Mais procurados (18)

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Java 06 Strings Arrays
Java 06 Strings ArraysJava 06 Strings Arrays
Java 06 Strings Arrays
 
Java 07
Java 07Java 07
Java 07
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicas
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe Vector
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
 

Semelhante a Aprendendo Ruby

Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyDiego Rubin
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
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
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell scriptbrunobione
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
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
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaCristiano Almeida
 
Ruby
RubyRuby
Rubybesen
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 

Semelhante a Aprendendo Ruby (20)

Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on 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
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
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)
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Ruby
RubyRuby
Ruby
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Ruby (1)
Ruby (1)Ruby (1)
Ruby (1)
 

Mais de Maurício Linhares

Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropMaurício Linhares
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMaurício Linhares
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemMaurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Maurício Linhares
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Maurício Linhares
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Maurício Linhares
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em redeMaurício Linhares
 

Mais de Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 
Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010Introdução ao desenvolvimento web - 2 - iDez 2010
Introdução ao desenvolvimento web - 2 - iDez 2010
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
Projeto e desenvolvimento de sistemas de informação   4 - computação em redeProjeto e desenvolvimento de sistemas de informação   4 - computação em rede
Projeto e desenvolvimento de sistemas de informação 4 - computação em rede
 
Extreme programming explicada
Extreme programming explicadaExtreme programming explicada
Extreme programming explicada
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Java wsdp
Java wsdpJava wsdp
Java wsdp
 

Aprendendo Ruby

  • 2. O que? —  Do Japão ◦  Yukihiko “Matz” Matsumoto —  Trazida ao mundo ocidental pelos Pragmatic Programmers ◦  Andy Hunt e Dave Thomas (livro da machadinha) —  Completamente orientada a objetos ◦  Não existem tipos primitivos
  • 3. Como? —  Linguagem “de script” interpretada; —  Muito influenciada por Smalltalk e Perl; —  Contém conceitos de linguagens funcionais (closures – blocos de código); —  Completamente dinâmica (tudo pode mudar em tempo de execução);
  • 4. RVM – Ruby Version Manager —  Solução pra instalar vários interpretadores Ruby ao mesmo tempo na sua máquina; —  Possibilita criar aplicações completamente independentes no seu ambiente de desenvolvimento, isolando tudo e todos;
  • 5. Instalando o RVM —  Instale o Git na sua máquina —  bash < <(curl –s https://rvm.beginrescueend.com/install/rvm) —  Feche o console e abra outra vez —  rvm notes ◦  E faça o que ele mandar
  • 6. Instalando um Ruby com o RVM —  rvm install ruby-1.9.2 —  rvm use 1.9.2 —  rvm --default use 1.9.2
  • 7. Rubygems! —  gem install bundler rails —  ORubygems é o gerenciador de pacotes do Ruby, é com ele que você vai instalar as dependências da sua aplicação; —  Na sua máquina ele é chamado pelo comando “gem”;
  • 8. Bundler -> bundle install —  É quem garante que todas as dependências da sua aplicação estão disponíveis para que ela possa executar; —  Usaum arquivo chamando Gemfile onde você define as suas dependências e ele as instala usando o Rubygems; —  Garante que todos os desenvolvedores usam as mesmas coisas no trabalho;
  • 9. Começando a brincar com o IRB —  IRBé o “Interactive Ruby”, o console da linguagem; —  Pode-se enviar comandos ou se definir classes, módulos, funções e qualquer outra coisa pra se utilizar durante uma sessão;
  • 10. Brincando numero = 30 outro_numero = -20 numero + outro_numero numero + outro_numero.abs
  • 11. Primeiras tres regras de Ruby —  Nãose usam ‘;’ ou qualquer outra coisa pra indicar o fim de uma linha, o fim da linha é o fim da linha, oras; —  Variáveis não tem tipo, elas simplesmente guardam um objeto qualquer, de qualquer tipo; —  Quando nós vamos dar nomes a variáveis, normalmente separamos nomes compostos com “_”;
  • 12. Continuando a brincadeira, definindo um método def soma( primeiro, segundo) primeiro + segundo end soma( 10, 20) soma 50, 90
  • 13. Mais quatro regrinhas – 1 —  A definição de um método começa com “def” depois vem o nome do método e depois seus parâmetros entre parenteses; —  Blocosde código, como métodos, classes, “ifs” são sempre fechados com “end”, aqui não tem “{}” não;
  • 14. Mais quatro (5) regrinhas - 2 —  EmRuby não se usa “return”, se a última expressão no corpo de um método for avaliada para um valor, esse valor é retornado; —  O uso de parênteses não é obrigatório na chamada de métodos, mas tenha cuidado com a legibilidade; —  Bem, vocêainda pode usar “return” se quiser, mas é feio, oras;
  • 15. Classes class Song def initialize(name, artist, duration) @name = name @artist = artist @duration = duration end end musica = Song.new “Denied”, “Sonic Syndicate”, 3 musica.inspect
  • 16. Mais regras —  A definição de uma classe começa com a palavra “class”; —  As classes são sempre “abertas”, você pode redefinir os métodos de uma classe em qualquer lugar, é só declarar ela outra vez; —  Nomesde classe normalmente são definidos usando CamelCase (como em NomeDeClasse);
  • 17. Mais regras —  Os contrutores são os métodos “initialize ()”, que são invocados indiretamente, através do método de classe “new”; —  Nãoé possível fazer sobrecarga de construtores em Ruby =( ; —  Variáveis de instância tem o nome começado por “@”;
  • 18. Atributos class Song attr_writer :duration attr_reader :duration attr_acessor :title end song = Song.new("Bicylops", "Fleck", 260) song.duration = 257 song.title = ‘Triciclops’
  • 19. Regras denovo —  attr_reader define métodos de acesso a um atributo de instância de um objeto; —  attr_writer define métodos de alteraçao a um atributo de instância de um objeto, assim como o reader, ele cria a variável dentro do objeto; —  attr_acessor faz o mesmo que os dois anteriores juntos;
  • 20. Definindo atributos virtuais class Song def duration_in_minutes @duration/60.0 end def duration_in_minutes=(new_duration) @duration = (new_duration * 60).to_i end end
  • 21. O que é que nós fizemos? —  Criamosmétodos de acesso a um atributo, mas o cliente não sabe se são métodos ou se ele está acessando os atributos diretamente; —  Sobrescrevemos o operador “=“ (atribuição) para a nossa propriedade, Ruby tem sobrecarga de operadores (alguns, apenas)!
  • 22. Constantes,Variáveis e métodos de classe class SongList @@calls_total MAX_TIME = 5*60 # 5 minutos MIN_TIME = 1*60 # 1 minuto def SongList.is_too_long(song) song.duration > MAX_TIME end def self.is_too_short(song) song.duration < MIN_TIME end end
  • 23. E aí? —  Variáveis de classe são definidas com dois “@”, como em “@@variavel_de_classe”; —  Constantessão definidas com o seu nome completo em “caixa alta” (na verdade é só a primeira letra, mas use o NOME COMPLETO); —  Métodos de classe são definidos colocando o nome da classe antes do nome do método ou usando “self” (é o “this” em Ruby);
  • 24. acesso aos objetos class MyClass def method1 # o padrão é public end protected def method2 end private def method3 end public def method4 end end
  • 25. Como acessar? —  Osníveis de acesso são definidos em blocos, quando não há definição, é public, quando se quer definir um nível de acesso, deve-se utilizar um bloco de acesso; —  Um bloco termina assim que outro se iniciar;
  • 26. Mas não é ruim não ter tipos? Eu faço “quack()”, “nadar()” e “voar()”, igual a qualquer outro pato, eu sou ou não um pato?
  • 27. Tudo são mensagens! —  Pois é, você perdeu a aula de Smalltalk né? —  Nãoimporta qual o tipo do objeto, o que importa são as mensagens (métodos?) que ele é capaz de responder; —  Se faz quack, nada e voa feito um pato, então pra mim é um pato;
  • 28. Arrays a = [ 3.14159, "pie", 99 ] a[0] # 3.14159 a[3] # nil a << 123 # adicionando um item a[4] = 456 #adicionando outro item a[-1] # 456 – acessando de trás pra frente a[2..4] # [99, 123, 456]
  • 29. Explicando arrays —  Arrays são definidos pela simples declaração de “[]”, como em “a = []”, também pode-se fazer “a = Array.new”; —  Arrayssão acessados pelo índice, tanto positivo (ordem crescente) como negativo (ordem decrescente); —  Quando se acessa um índice que não existe em um array, ele retorna “nil”;
  • 30. Explicando arrays —  Novos items podem ser colocados no array simplesmente utilizando o próprio operador “[]”, como em “a[10] = 10”; —  Para se adicionar um item no fim do array usa-se o operador “<<“, como em “a << 10”; —  Arrays podem ser pegos em ‘pedaços’ como em “a[1..3]”, que cria um novo array com os itens do índice 1 ao 3;
  • 31. hashes h = { 'dog' => 'canine', 'cat' => 'feline', 'donkey' => 'asinine' } h.length # 3 h['dog'] # "canine" h['cow'] = 'bovine' h[12] = 'dodecine' h['cat'] = 99
  • 32. Entendendo hashes —  São conjuntos de “chave-valor” (Lembra do Map em Java?); —  São declarados com o uso de “{}” como em “h = {}”, ou usando Hash.new; —  Para se adicionar itens basta usar o operador [], como em “h[‘chave’] = ‘valor’”;
  • 33. Você consegue explicar isso? class SongList def with_title(title) for i in 0...@songs.length return @songs[i] if title == @songs[i].name end return nil end end
  • 34. E isso? class SongList def with_title(title) @songs.find {|song| title == song.name } end end
  • 35. Código solto? —  Blocossão pedaços de código que podem ser passados como parâmetros para funções, para fazer algum trabalho especial, como filtragem, ordenação e outros; —  Você pode definir os seus próprios métodos que aceitam blocos;
  • 36. Strings 'escape using ""' # escape using "" 'That's right' ! #That's right "Seconds/day: #{24*60*60}" # Seconds/day: 86400 def to_s “Song: #@song Artist: #{@artist}” end
  • 37. strings #Q!String de muitas linhas com aspas duplas e acessando variáveis #{variavel}! #q( String de muitas linhas com aspas simples, aqui não pode ter variável ) ‘a’ << ‘b’ << ‘c’ # ‘abc’
  • 38. Como é? —  Strings são sequências de caracteres de 8 bits, não necessariamente Unicode; —  Elas podem ser definidas usando ‘’ (aspas simples) ou “” (aspas duplas); —  Usando aspas duplas você pode colocar expressões ou variáveis com o uso do caracter “#” seguido de “{}” para variáveis de método ou funções ou apenas ‘@’ para variáveis de instância;
  • 39. ranges 1..10 # [1,2,3,4,5,6,7,8,9,10] 'a'..'z‘ # lembra do alfabeto? my_array = [ 1, 2, 3 ] 0...my_array.length # [0,1,2,3,4] (1..10).to_a # [1, 2, 3, 4, 5, 6, 7, 8, 9,10] ('bar'..'bat').to_a # ["bar", "bas", "bat"]
  • 40. O que são ranges? —  São um conjunto de objetos em sequência, normalmente caracteres ou números; —  São definidos através da declaração de [ ‘valor inicial’ .. ‘valor final’ ], como em [1..100]; —  Você pode definir os seus próprios ranges com o operador “<=>” (disco voador?);
  • 41. Criando Seu próprio range class VU include Comparable attr :volume def initialize(volume) @volume = volume end def to_s '#' * @volume end def <=>(other) self.volume <=> other.volume end def succ raise(IndexError, "Volume too big") if @volume >= 9 VU.new(@volume.succ) end end
  • 42. Numeros num = 81 6.times do puts "#{num.class}: #{num}" num *= num end
  • 43. Um pouco mais sobre métodos def cool_dude(arg1="Miles", arg2="Coltrane", arg3="Roach") "#{arg1}, #{arg2}, #{arg3}." end cool_dude # "Miles, Coltrane, Roach." cool_dude("Bart") # "Bart, Coltrane, Roach." cool_dude("Bart", "Elwood") # "Bart, Elwood, Roach." cool_dude("Bart", "Elwood", "Linus") # "Bart, Elwood, Linus."
  • 44. Um pouco mais sobre métodos def meth_three 100.times do |num| square = num*num return num, square if square > 1000 end end num, square = meth_three
  • 45. Um pouco mais sobre metodos def five(a, b, c, d, e) "I was passed #{a} #{b} #{c} #{d} #{e}" end five(1, 2, 3, 4, 5 ) # "I was passed 1 2 3 4 5" five(1, 2, 3, *['a', 'b']) # "I was passed 1 2 3 a b" five(*(10..14).to_a) # "I was passed 10 11 12 13 14"
  • 46. Ainda em métodos class SongList def create_search(name, params) # ... end end list.create_search('short jazz songs', :genre => :jazz, :duration_less_than => 270)
  • 47. If/unless puts "a = #{a}" if debug print total unless total.zero? if x == 2 puts x elsif x < 0 puts “#{x} é menor que zero” else puts ‘Caiu no else’ end
  • 48. Case/when (conhece o swiTch?) leap = case when year % 400 == 0 then true when year % 100 == 0 then false else year % 4 == 0 end
  • 49. Que lindo switch case input_line when "debug" dump_debug_info dump_symbols when /ps+(w+)/ dump_variable($1) when "quit", "exit" exit else print "Illegal command: #{input_line}" end
  • 50. while print "Hellon" while false begin print "Goodbyen" end while false while x < 10 puts “X é #{x}” x=x+1 end
  • 51. Quem precisa de um for? 3.times do print "Ho! “ end 0.upto(9) do |x| print x, " " end [ 1..5 ].each {|val| puts “ #{val} ” }
  • 52. Mas você ainda quer um for? for i in ['fee', 'fi', 'fo', 'fum'] print i, " " end for i in 1..3 print i, " " end
  • 53. Break, redo e next while line = gets next if line =~ /^s*#/ # pular comentários break if line =~ /^END/ # parar no fim # executar coisas redo if line.gsub!(/`(.*?)`/) { eval($1) } # process line ... end
  • 54. Tente outra vez for i in 1..100 print "Now at #{i}. Restart? " retry if gets =~ /^y/i end