Dojo Ruby
Vinícius Alonso
Quem sou eu ?
- Formado em Tecnologia em Sistemas para a Internet - UTFPR/GP
- Trabalho com Ruby desde 2013
- Membro do Grupo de Usuários Ruby do Paraná (GURU PR) e do PHP PR
Ruby
Ruby On Rails
Ou
Linguagem de Programação


Framework
A linguagem Ruby
- Criada no Japão em 1993 por Yukihiro "Matz" Matsumoto
- Porém, só foi levada ao público em 1995
- Matz queria desenvolver uma linguagem mais poderosa que Perl e mais orientada a objetos que Python

Quem usa Ruby ?






Ruby
- Linguagem Interpretada
- Multiparadigma
- Orientada a Objetos
- Funcional
- Imperativa
- Tipagem dinâmica e forte


irb
- Interactive Ruby
- Ferramenta por meio da qual é possível testar código ruby
Ruby
puts "Hello Ruby!"
Variáveis
@name #variável do objeto
@@name #variável da classe
name #local
$name #global
Símbolos
- São objetos instanciados da classe Symbol
- Implementão o design pattern Flyweight
Símbolos
#Syntax de um símbolo
:name
:'name'
:'full-name'
Símbolos
'ola'.object_id == 'ola'.object_id #false
:ola.object_id == :ola.object_id #true
Range
(1..10) # Intervalo de 1 à 10
(1...10) # Intervalo de 1 à 9
('a'..'z') # Intervalo de a à z
(1..10).to_a # Convertendo para array
Condicional
age = 18
if age >= 18
puts "Maior de idade"
else
puts "Menor de idade"
end
Loop
for number in (0..10)
puts number
end
Loop
i = 0
MAX = 5
until i > MAX do
puts("Valor de i = #{i}")
i += 1
end
Loop
5.times { puts "Vai Timão!!!" }
Array
# Declarando um novo array
array = []
array = Array.new
Array
array = [1,2,3,4,5]
# Percorrendo um array
array.each { |value| puts value }
Array
array = []
# Adicionando elementos
array.push("FTSL")
array << 10
array << :utfpr
Array
array = ["FTSL", 10, :name]
# Removendo elementos
array.delete("FTSL")
array.pop
array.clear
Array
array = [1,2,3,4,5]
array.length # Tamanho do array
array.first # Primeiro elemento
array.last # Último elemento
array.index(3) # Retorna a posição
array.include?('m') # Contém o elemento
Hash
- É uma coleção de chaves e valores
- Também chamados de arrays associativos
- Diferente do array, um hash pode utilizar qualquer elemento como chave
Hash
# Declarando um novo hash
h = Hash.new
h = {}
Hash
hash = {
1 => 'Curitiba',
true => 20,
'utfpr' => :college,
}
hash[:event] = "FTSL" #Adicionando
hash.delete(:event) #Removendo elemento
Blocos de código
- São blocos à serem executados, semelhantes a funções anônimas em outras linguagens
Blocos de código
# Syntax de um bloco
puts { "Hello!!!" }
puts do
"Hello!!!"
end
Blocos de código
# Exemplo de uso
pairs = [1,2,3,4,5,6].select do |n|
n % 2 == 0
end
pairs.each { |n| puts "valor: #{n}" }
Orientação a Objetos
- Tudo em ruby é um objeto
- Não existem tipos primitivos
Classes
# Definindo uma classe
class Person
end
# Instanciando um objeto
person = Person.new
Atributos
class Person
def initalize name, age
@name, @age = name, age
end
end
# Instanciando
Person.new 'Vinícius', 25
Atributos
class Person
attr_reader :name
attr_writer :age
@@count = 0
def initialize hash
@name = hash[:name]
@age = hash[:age]
@@count += 1
end
end
Visibilidade
class Person
def talk
puts "Estou falando ..."
end
private
def other_behavior; end
protected
def different_behavior; end
end
Herança
class Person
def initialize name
@name = name
end
end
class Worker < Person
def initialize name, profession
super name
@profession = profession
end
end
Módulos
- São coleções de métodos e constantes
- Geralmente utilizados como namespaces ou mixins
Módulos
module Example
end
module Example
PI = 3.14159
def show_message
puts "Estou aqui ..."
end
end
Módulos
# Módulo usado como namespace
module API
class Book
end
end
module ADMIN
class Book
end
end
Módulos
# Módulo usado como mixin
module Calculator
def sum_numbers(*numbers)
numbers.map.reduce(:+)
end
end
Módulos
# Módulo usado como mixin
class Example
include Calculator
end
class Example
extend Calculator
end
obj = Object.new
obj.extend Calculator
Metaprogramação
- Uma técnica que permite manipular as classes e objetos em tempo de execução
- Tornou possível a existência do framework Ruby on Rails
Metaprogramação
- method_missing
- class_eval
- define_method
Metaprogramação
class Person
def method_missing name, args=nil
puts "method_missing: #{name}"
end
end
person = Person.new
person.test_missing
Metaprogramação
class Person
def method_missing(name,*args,&block)
name = name.to_s
_class = class << self; self; end
_class.class_eval do
define_method(name) do
puts "Método novo: #{name}"
end
end
end
end
Bibliotecas Ruby
- São chamadas de gems
- Existe um vasto número de gems os mais diversos tipos de uso
Bibliotecas Ruby
# Instala uma nova gem
gem install <nome_da_gem>
# Lista as gems instaladas
gem list
# Carrega um servidor local com a
# documentação das gems instaladas
gem server
Bibliotecas Ruby
- O comado gem vem de um serviço chamado Rubygems
- Que é onde as gems são salvas, após serem publicadas
TDD
TDD

xUnit
- Setup: quando você prepara o cenário para o teste
- Exercise: executa a ação que será testada
- Verify: Verifica o comportamento esperado
- Teardown: Volta ao estado inicial, antes do teste
Exemplo
describe Person do
describe "#save" do
it "save new Person" do
#setup
person = Person.new params
#exercise
person.save
#verify
expect(person.new_record?).to be_true
end
#teardown
after do
Person.destroy_all
end
end
end
Jogo FizzBuzz
- É feita uma listagem sequêncial de números
- Toda vez que um número a ser listado é multiplo de 3 em seu lugar é mostrado "Fizz"
- Para os múltiplos de 5 mostra-se "Buzz"
- E para os múltipos de ambos "FizzBuzz"
Referências
Dojo sobre Ruby
By Vinícius Alonso
Dojo sobre Ruby
Dojo coordenado por mim em Pato Branco , junto ao grupo Pato Livre.
- 1,050