O documento apresenta uma introdução ao Ruby, incluindo sua história, propósito, características e conceitos fundamentais como orientação a objetos, tipagem dinâmica, duck typing e classes. Também mostra como instalar o Ruby e gerenciador de versões RVM, e exemplos básicos de uso de strings, arrays, hashes, classes, módulos e herança.
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.
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
“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
23. 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”
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”
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 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