CELTAB 
Centro Latino-Americano 
de Tecnologias Abertas
Ruby 
COMEÇANDO COM RUBY: DOS CONCEITOS AO PRIMEIRO CÓDIGO
SEICOM + ruby
Por que ruby ?!
● O que é o ruby? 
● Onde e como nasceu? 
● Para que serve?
Ruby Outras LPs
Vamos instalar o ruby? 
OBS: SO GNU/Linux!
Apt-get 
apt-get install ruby-1.9.3 
apt-get install ruby-2.1 
???
Compilando 
ruby-lang.org/en/downloads/ 
$ tar xfv ruby-2.1.3.tar.gz
Ruby Version Manager 
RVM é uma ferramenta de linha de comando 
que permite instalar, gerenciar e trabalhar com 
múltiplas versões de ruby e diversos conjuntos 
de gems.
rvm.io 
$ curl -sSL https://get.rvm.io | bash -s stable
“Ruby está projetado para fazer os 
programadores felizes.” 
Yukihiro “Matz” Matsumoto - Criador do Ruby
Ruby 
● Interpretada (YARV) 
● Totalmente Orientada a Objetos 
● Dinâmica 
● Fortemente Tipada 
● Gramática complexa, mas expressiva 
● Uma $ RICA $ Core API 
● Inspirada em Smalltalk, Lisp e Perl
➔ Scripts 
➔ Programação OO 
➔ Programação Funcional 
➔ Metaprogramação
Em ruby, tudo é objeto, sem exceções!
Variáveis não são objetos… 
… elas fazem referências a eles
Types 
value = 123 # => Fixnum 
value = “1234” # => String 
number = 1234 
string = “I’m a string” 
# Podemos somar ? 
puts number + string 
# => TypeError: String can't be coerced into Fixnum
Duck Typing 
“Se anda como um pato e faz barulho como um pato, 
então de deve ser um pato. E o interpretador ficará feliz 
em fazer com que o objeto seja tratado como um pato. Na 
prática, isso significa que em vez de fazer verificações de 
tipo de um objeto, você deve se preocupar se este objeto 
é capaz de executar o método que você precisa.” 
- Nando Vieira
Duck Typing 
class Marmot 
def initialize(message) 
@message = message 
end 
def quack 
puts “Quack: #{@message}” 
end 
end 
class Duck 
def initialize 
@name = “John Doe” 
end 
def quack 
puts “Quack, my name is #{@name}” 
end 
end 
duck_1 = Marmot.new “Marmots” 
duck_2 = Duck.new 
duck_1.quack # => “Quack: Marmots” 
duck_2.quack # => “Quack, my name is John Doe”
Strings 
message = “Galera!” 
o_message = ‘Hey’ 
o_message + “, e” + “ ai ” + message 
#=> “Hey, e ai Galera!”
Strings 
message = “Galera!” 
o_message = ‘Hey’ 
“#{o_message}, e ai #{message}” 
#=> “Hey, e ai Galera!” 
“Agora somando #{3 + 5}” 
#=> “Agora somando 8”
Números
Números
Arrays 
items = [ 1, “String”, 1.0, [ 2, 3], nil ] 
# => [ 1, “String”, 1.0, [ 2, 3], nil ] 
items[0] <=> items.first 
# => 1 
items = Array.new 
# => [ ] 
items = Array.new([ 1, 2, 3 ]) 
# => [ 1, 2, 3 ] 
words = %w[aa bb cc dd ee ff] 
# => [ “aa”, “bb”, “cc”, “dd”, “ee”, “ff” ] 
words[1] 
# => “bb”
Hash 
hash = { name: “John”, 
last_name: “Doe”, 
zombie: false, 
age: 1e10 } 
# => { name: “John”, last_name: “Doe”, zombie: false, age: 1e10 } 
hash[:name] 
# => “John” 
hash[:new_value] = { b: “something”, ‘another_value’ => “wow” } 
hash.inspect 
# => { name: “John”, last_name: “Doe”, zombie: false, age: 1e10, { b: 
“something”, ‘another_value’ => “wow” } }
Symbols
Expressões 
regulares
Módulos
Classes 
module Zombie 
class Zombie 
def initialize 
@name = "John Doe" 
@brains_eaten = 0 
end 
def tweet 
"I want brains!" 
end 
def eat(n = 1) 
@brains_eaten += n 
end 
def rooting 
"Yeap" 
end 
def status 
{ :status => "I just ate some delicious brains", 
:zombie => @name } 
end 
end 
end
Herança 
class Walker < Zombie 
def walk 
# do something 
Obs: ‘Não existe herança múltipla em ruby’ 
end 
end
Mixins module SuperHero 
def super_powers 
# Do something 
end 
end 
module Fly 
def fly 
#Do something 
end 
end 
class Goku 
include SuperHero 
include Fly 
def saiyan 
@@force *= :infinite 
end 
end 
class Hulk 
include SuperHero 
def say 
"Hulk smash!" 
end 
end
Self e SingletonClass 
Métodos de classe não existem no Ruby! 
Pelo menos não no sentido de métodos estáticos. 
O que acontece é que estes métodos pertencem a 
um objeto, que por acaso é uma classe. 
- Nando Vieira
E o que mais? 
● Condicionais (if, else, elseif, unless) 
● Seletor Múltiplo (Case) 
● Estruturas de repetição(for...in, while..until, loop) 
● Iteradores (Enumerator, Iterator) 
● Closures 
● Procs e Lambdas 
● Variáveis (Classe, instância) 
● Constantes 
● CallBacks 
● Monkey Patching e Refinements
Como continuar?
Try ruby! 
tryruby.org
Como continuar? 
codeschool.com/paths/ruby
github.com/markets/awesome-ruby 
lista de 100+ ferramentas ruby para tudo!
github.com/bbatsov/ruby-style-guide 
De quem “manja” para a comunidade!
Considerações finais
kenner.hp@gmail.com 
github.com/gnomex 
@KennerKliemann 
slideshare/kennerkliemann 
linkedin.com/in/kennerkliemann
Começando com Ruby - III SEICOM

Começando com Ruby - III SEICOM

  • 1.
    CELTAB Centro Latino-Americano de Tecnologias Abertas
  • 2.
    Ruby COMEÇANDO COMRUBY: DOS CONCEITOS AO PRIMEIRO CÓDIGO
  • 3.
  • 4.
  • 6.
    ● O queé o ruby? ● Onde e como nasceu? ● Para que serve?
  • 7.
  • 8.
    Vamos instalar oruby? OBS: SO GNU/Linux!
  • 9.
    Apt-get apt-get installruby-1.9.3 apt-get install ruby-2.1 ???
  • 10.
  • 11.
    Ruby Version Manager RVM é uma ferramenta de linha de comando que permite instalar, gerenciar e trabalhar com múltiplas versões de ruby e diversos conjuntos de gems.
  • 12.
    rvm.io $ curl-sSL https://get.rvm.io | bash -s stable
  • 16.
    “Ruby está projetadopara fazer os programadores felizes.” Yukihiro “Matz” Matsumoto - Criador do Ruby
  • 17.
    Ruby ● Interpretada(YARV) ● Totalmente Orientada a Objetos ● Dinâmica ● Fortemente Tipada ● Gramática complexa, mas expressiva ● Uma $ RICA $ Core API ● Inspirada em Smalltalk, Lisp e Perl
  • 18.
    ➔ Scripts ➔Programação OO ➔ Programação Funcional ➔ Metaprogramação
  • 19.
    Em ruby, tudoé objeto, sem exceções!
  • 20.
    Variáveis não sãoobjetos… … elas fazem referências a eles
  • 21.
    Types value =123 # => Fixnum value = “1234” # => String number = 1234 string = “I’m a string” # Podemos somar ? puts number + string # => TypeError: String can't be coerced into Fixnum
  • 22.
    Duck Typing “Seanda como um pato e faz barulho como um pato, então de deve ser um pato. E o interpretador ficará feliz em fazer com que o objeto seja tratado como um pato. Na prática, isso significa que em vez de fazer verificações de tipo de um objeto, você deve se preocupar se este objeto é capaz de executar o método que você precisa.” - Nando Vieira
  • 23.
    Duck Typing classMarmot def initialize(message) @message = message end def quack puts “Quack: #{@message}” end end class Duck def initialize @name = “John Doe” end def quack puts “Quack, my name is #{@name}” end end duck_1 = Marmot.new “Marmots” duck_2 = Duck.new duck_1.quack # => “Quack: Marmots” duck_2.quack # => “Quack, my name is John Doe”
  • 24.
    Strings message =“Galera!” o_message = ‘Hey’ o_message + “, e” + “ ai ” + message #=> “Hey, e ai Galera!”
  • 25.
    Strings message =“Galera!” o_message = ‘Hey’ “#{o_message}, e ai #{message}” #=> “Hey, e ai Galera!” “Agora somando #{3 + 5}” #=> “Agora somando 8”
  • 26.
  • 27.
  • 28.
    Arrays items =[ 1, “String”, 1.0, [ 2, 3], nil ] # => [ 1, “String”, 1.0, [ 2, 3], nil ] items[0] <=> items.first # => 1 items = Array.new # => [ ] items = Array.new([ 1, 2, 3 ]) # => [ 1, 2, 3 ] words = %w[aa bb cc dd ee ff] # => [ “aa”, “bb”, “cc”, “dd”, “ee”, “ff” ] words[1] # => “bb”
  • 29.
    Hash hash ={ name: “John”, last_name: “Doe”, zombie: false, age: 1e10 } # => { name: “John”, last_name: “Doe”, zombie: false, age: 1e10 } hash[:name] # => “John” hash[:new_value] = { b: “something”, ‘another_value’ => “wow” } hash.inspect # => { name: “John”, last_name: “Doe”, zombie: false, age: 1e10, { b: “something”, ‘another_value’ => “wow” } }
  • 30.
  • 31.
  • 32.
  • 33.
    Classes module Zombie class Zombie def initialize @name = "John Doe" @brains_eaten = 0 end def tweet "I want brains!" end def eat(n = 1) @brains_eaten += n end def rooting "Yeap" end def status { :status => "I just ate some delicious brains", :zombie => @name } end end end
  • 34.
    Herança class Walker< Zombie def walk # do something Obs: ‘Não existe herança múltipla em ruby’ end end
  • 35.
    Mixins module SuperHero def super_powers # Do something end end module Fly def fly #Do something end end class Goku include SuperHero include Fly def saiyan @@force *= :infinite end end class Hulk include SuperHero def say "Hulk smash!" end end
  • 36.
    Self e SingletonClass Métodos de classe não existem no Ruby! Pelo menos não no sentido de métodos estáticos. O que acontece é que estes métodos pertencem a um objeto, que por acaso é uma classe. - Nando Vieira
  • 37.
    E o quemais? ● Condicionais (if, else, elseif, unless) ● Seletor Múltiplo (Case) ● Estruturas de repetição(for...in, while..until, loop) ● Iteradores (Enumerator, Iterator) ● Closures ● Procs e Lambdas ● Variáveis (Classe, instância) ● Constantes ● CallBacks ● Monkey Patching e Refinements
  • 38.
  • 39.
  • 40.
  • 41.
    github.com/markets/awesome-ruby lista de100+ ferramentas ruby para tudo!
  • 42.
    github.com/bbatsov/ruby-style-guide De quem“manja” para a comunidade!
  • 44.
  • 45.
    kenner.hp@gmail.com github.com/gnomex @KennerKliemann slideshare/kennerkliemann linkedin.com/in/kennerkliemann