O documento fornece uma introdução ao Ruby, incluindo sua história, características, tipos de dados, classes e módulos. Também discute como Ruby pode ser usado para programação orientada a objetos, imperativa e funcional, além de metaprogramação.
8. 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
8
9. “Ruby está projetado para fazer os
programadores felizes.”
Yukihiro “Matz” Matsumoto - Criador do Ruby
9
10. Ruby
● Interpretada
● Totalmente Orientada a Objetos
● Dinâmica e fortemente Tipada
● Gramática complexa, mas expressiva
● Inspirada em Smalltalk, Lisp, Perl,
Ada, python...
10
11. ➔ Programação OO
➔ Programação imperativa
➔ Programação Funcional
➔ Metaprogramação
➔ ...
O que podemos fazer?
11
14. “[...] a não ser as variáveis...
… elas fazem referências a eles.”
14
15. Core Classes
➔ String
➔ Números
➔ Array
➔ Hash
➔ Symbol
➔ Boolean
➔ nil
➔ Range
➔ Regex
➔ Procs, blocks e lambdas
15
16. 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
16
17. 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
17
18. 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”
18
27. 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 27
28. Herança
Obs: ‘Não existe herança múltipla em ruby’
class Walker < Zombie
def walk
# do something
end
end
28
29. 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_something_smart
"Hulk smash!"
end
end
29
30. Erros?
filename = 'testfile'
begin
# .. process
f = File.open('testfile')
rescue Exception => e
# .. handle error
filename = 'testfile.rb'
retry
ensure
f.close if f
end
30