Ruby Introdução
Ruby O que é Ruby? Interpretada / Orientada a Objetos Sintaxe simples / Case Sensitive Herança Única Blocos delimitados por { ... } ou do ... end Não requer declaração de variáveis É Livre!
Ruby Operadores aritméticos: Operadores relacionais: + - / * ** % Operadores relacionais: == != > < >= <= Operadores lógicos: and or
Ruby Tipos Númericos Integer 2.is_a?(Integer) Float 2.5.is_a?(Float)
Ruby String “Hello World” “Hello World” + “ Hello Bahia” “Hello World ” * 3 (Estranho não?)
Ruby Variáveis Constantes Exemplo: nome = “João” Dinamicamente tipada nome = “João” (String) nome = 25.6 (Float) Constantes Iniciam com primeira letra maiúscula e pode ser redefinida Pi = 3,14
Ruby Funções Métodos Predicados def soma(x,y) end Terminam com ? e retornam true ou false Utilizados para testar uma condição Ex: [1,2,3].include? 1 => true
Ruby Condicional - IF If ... elsif ... else ... End Ex: If 2>1 and 2>0 puts “oi” elsif 2>3 puts “oi2” else puts “oi3” end
Ruby Condicional – Unless Significa “Se não” Negativa do if Ex: achou = true unless achou puts “não achou” else puts “achou” end
Ruby Loops 4.times do puts “oi\n” end
Ruby Loops Loops While: For while(a<5) end i=0 f=5 for i in (i..f) puts a a++ end Loops For i=0 f=5 for i in (i..f) puts i end
Ruby Arrays – Índice inicia em 0 num = [1,2,3,4] num[0] => 1 num << 45 OU num.push 45 num.sort num.reverse num.length
Ruby Arrays – Iterator friends = ["Melissa", "Jeff", "Ashley", "Rob"] friends.each do |friend| puts "I have a friend called " + friend end
Ruby Hashes friend = { } puts friend[city] => “Toronto” "first name" => "Jeffrey", "last name" => "Biggs", "address" => "34 Airport Rd", "city" => "Toronto", :province" => "Ontario" } puts friend[city] => “Toronto”
Ruby Exercício
Ruby Classes Objetos
Orientação a Objetos Em Ruby .... Exemplo: Classe: String Método: to_i Exemplo: “oi”.methods
Em Ruby... Declarando Classes #Classe Address.rb Class Address => Define uma classe def initialize(street) => Construtor com um parâmetro @street = street => @street variável de instância privada end => fim do método end => fim da classe
Em Ruby... Com instanciar a classe? Métodos “Especiais” addr = Address.new(“Av. Adhemar de Barros”) Métodos “Especiais” getters => Objetivo de recuperar o valor de um detrminado atributo do objeto setter => Objetivo de setar o valor de um determinado atributo do objeto
Em Ruby... Ainda na classe Address def street @street end def street=(value) @street = value
Em Ruby... Podemos fazer... addr.address => Retorna “Av. Adhemar de Barros” addr.address= “Campo Grande” addr.address => Retorna “Campo Grande”
Em Ruby... Exemplo: Class Person attr_accessor :first_name, :address def initialize @first_name = “ ” @address = Address.new end
Em Ruby... Herança Sobrecarga de métodos Variável de Classe Operador: < Sobrecarga de métodos Não existe em Ruby! Variável de Classe Iniciam com @@ Método de classe Nome_classe.Nome_Metodo
Ruby Exercício
Ruby Testes Unitários
Ruby Testes Unitários ???????
Ruby - Classe a ser testada class Fatorial def fatorial(n) if(n == 0 or n==1) 1 else n*fatorial(n-1) end
Ruby – Unidade de Testes require 'test/unit' require "Fatorial" class TC_Fatorial < Test::Unit::TestCase def setup @fatorial = Fatorial.new puts "setup" end def test_fatorial_0 assert_equal(1,@fatorial.fatorial(0), "fat(0) = 1") def test_fatorial_1 assert_equal(1,@fatorial.fatorial(1), "fat(1) = 1") def test_fatorial_6 assert_equal(1,@fatorial.fatorial(1), "fat(6) = 24") end def test_numero_negativo assert_raise(SystemStackError) do @fatorial.fatorial(-1) def teardown @fatorial = nil puts "teardown"