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 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 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 def soma(x,y) x+y end Métodos Predicados 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 While: while(a<5) Loops For i=0 puts a f=5 a++ for i in (i..f) end 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 = { "first name" => "Jeffrey", "last name" => "Biggs", "address" "city" => "34 Airport Rd", => "Toronto", :province" => "Ontario" } puts friend[city] => “Toronto” Ruby Exercício Ruby Classes Objetos Orientação a Objetos Em Ruby .... Classe: String Objeto: “456” 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 end => fim do método => fim da classe Em Ruby... Com instanciar a classe? 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 end 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 end Em Ruby... Herança Sobrecarga de métodos Não existe em Ruby! Variável de Classe Operador: < 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 end end Ruby – Unidade de Testes require 'test/unit' def test_fatorial_6 require "Fatorial" assert_equal(1,@fatorial.fatorial(1), "fat(6) = 24") class TC_Fatorial < Test::Unit::TestCase end def setup def test_numero_negativo @fatorial = Fatorial.new assert_raise(SystemStackError) do puts "setup" @fatorial.fatorial(-1) end end def test_fatorial_0 end assert_equal(1,@fatorial.fatorial(0), "fat(0) = 1") end def teardown def test_fatorial_1 @fatorial = nil assert_equal(1,@fatorial.fatorial(1), "fat(1) = 1") puts "teardown" end end end