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.

  • 935