25

Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

  • Upload
    ngohanh

  • View
    227

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Programação WebAula 3

Linguagem Ruby

Bruno Müller Junior

Departamento de Informática

UFPR

24 de Fevereiro de 2014

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 2: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

1 RubyCategorias de Variáveis

Categoria Escalar - NumericCategoria Escalar - StringMétodos e ComparadoresI/OProgramas e execuçãoControle de Fluxo

ClassesEscopo de variáveisMétodos e chamadasControle de acessoMetaprogramação

Arrays - BásicoArrays - MétodosHashesSymbols

Blocos e iteradoresParâmetrosExecução de comandosComplemento de ClassesGemsActiveRecord

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 3: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Ruby

• Interpretada e

• Orientada a objetos.

• C++ e Java tem duas categorias de vars: primitivas ereferências a objeto.

• Em Ruby, TUDO é objeto.• Logo, não há sentido em falar de tipos.

• Aspectos de linguagens funcionais;

• Yukihiro Matsumoto (1996). Perl, Python.

• Muito material na web. Sugestões:

• http://tryruby.org/• http://pine.fm/LearnToProgram/

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 4: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Categorias de Variáveis

Categorias de Variáveis

Variáveis em Ruby não precisam ser declaradas (nem tem como,apesar de poderem ser instanciadas antes do uso) e se dividem emtrês categorias:

• Escalar

• Array Class

• Hash Class

Constantes SEMPRE começam com letra maiúscula (por exemplo,nomes de classes).

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 5: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Categoria Escalar - Numeric

Categoria Escalar - Numeric

As variáveis da categoria �escalar� dividem-se em �Numeric� e�String�.

• Numeric class

• Float class• Integer class

• Fixnum Class (�cabe� na máquina, ex.:32 bits)

• Bignum Class (não �cabe� na máquina)

• Operações aritméticas: seguem o modelo da linguagem�C�.

• Leitura sugerida (e exercícios): http://aprendaaprogramar.rubyonrails.com.br/index.rb?Chapter=01

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 6: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Categoria Escalar - String

Categoria Escalar - String

• String Class (com mais de 75 métodos).

capitalize Faz primeira letra maiúscula e demais minúsculaschop Remove o último caracterechmop Remove caract. nova linha do últim caractereupcase Transforma em maiúsculas...

> s = String.new("Bruno")> s.upcase> s.upcase.reverse> s

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 7: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Métodos e Comparadores

Métodos e Comparadores

• Comparadores: http://www.tutorialspoint.com/ruby/ruby_operators.htm

• Conversão de classe: to_s, to_i, to_f, ...

• Leitura sugerida (e exercícios): http://aprendaaprogramar.rubyonrails.com.br/index.rb?Chapter=02

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 8: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

I/O

I/O

• Saída: putsnome="Auditorio"puts "Aula no #{nome}"

• Entrada: gettsnome=getsputs "Aula no #{nome}"

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 9: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Programas e execução

Programas e execução

Programa Ruby: (ex1.rb)

puts "Digite o valor de a "a = gets.to_iputs "Digite o valor de b "b = gets.to_i# Compute and display the resultresult = a * bputs "a*b = #{result}"

>ruby ex1.rbDigite o valor de a2Digite o valor de b3a*b = 6

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 10: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Controle de Fluxo

Controle de Fluxo

aula em http://aprendaaprogramar.rubyonrails.com.br/index.rb?Chapter=06

• if - else - end

• if - elseif - else - end

• unless

• case - when

• until - end

• for .. in .. - end

• while - end

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 11: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Classes

Classes

aula em http://aprendaaprogramar.rubyonrails.com.br/index.rb?Chapter=09

class Novaclasse # Sempre começa com maiúscula (é uma constante)def initialize(my_num)

@my_num = my_numenddef initialize

@my_num = 0enddef <nome do método>(parâmetros)

... implemenetção ...a=0 # a última expressão é o valor de retorno

endend

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 12: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Escopo de variáveis

Escopo de variáveis

• global: Exemplo: $var_global

• instância: Existe dentro do escopo do objeto.@var_instancia

• de classe: Existe dentro do escopo da classe. @@var_classe

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 13: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Métodos e chamadas

Métodos e chamadas

• passagem por valor.

• passagem por referência, só usando Array e Hash.

• confere número de parâmetros. Para parâmetros variáveis,fun(*params), e o acesso é como em Array.

def swap a,bt=aa=bb=t

end

x=1y=2swap(x,y)puts x

def swap (a,b)t=aa=bb=t

end

x=1y=2swap(x,y)puts x

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 14: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Controle de acesso

Controle de acesso

• Controle de acesso public, private, protected.http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility

• Exemplos de uma classe:

class My_classdef initialize

@one = 1@two = 2

enddef one

@oneenddef one=(inicial)

@one = inicialend

end

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 15: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Metaprogramação

Metaprogramação

• Ruby tem um MONTE de �atalhos�.

class My_classdef initialize

@one = 1@two = 2

endattr_reader :one, :two # getterattr_writer :one, :two # setter

end

class My_classdef initialize

@one = 1@two = 2

endattr_accessor :one, :two # getter e setter

end

• observe que attr_accessor é, na verdade, uma chamada deprocedimento onde os parâms. são os símbolos :one e :two.

• Metaprogramação: http://pt.wikipedia.org/wiki/Metaprograma%C3%A7%C3%A3o

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 16: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Arrays - Básico

Arrays - Básico

aula em http://aprendaaprogramar.rubyonrails.com.br/index.rb?Chapter=07

• tamanho dinâmico;

• pode armazenar tipos de dados diferentes;

lista = Array.new(5)lista = [5, "str", 3.14, Array.new(2,"A"), []]for valor in lista

puts valorend

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 17: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Arrays - Métodos

Arrays - Métodos

• Alguns métodos: push, concat, reverse, sort, sort!, include?, ...(http://www.ruby-doc.org/core-2.1.0/Array.html)

def median(list)list2 = list.sortlen = list2.lengthif(len % 2 == 1) # length is odd

return list2[len / 2]else # length is even

return (list2[len / 2] + list2[len / 2 - 1]) / 2end

end

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 18: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Hashes

Hashes

• São estruturas �bidimensionais� (chave - valor) onde a chavede indexação pode ser de�nida pelo programador (em Array,são sempre números).

• Exemplo:

"John" 41"Genny" 39"Jake" 25"Darcie" 24

irb > idades = { "John" => 41, "Genny" => 39, "Jake" => 25, "Darcie" => 24 }=> {"John"=>41, "Genny"=>39, "Jake"=>25, "Darcie"=>24}

irb > idades["Genny"]=> 39

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 19: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Symbols

Symbols

• é um identi�cador Ruby precedido (ou por vezes sucedido) pordois pontos. Exemplos :categoria, categoria:.

• Normalmente são usados para representar strings (porexemplo, uma chave de Hash), porém:• são imutáveis;• ocupam menos espaço.

• São MUITO utilizados em Rails com Hashes em favor daclareza.

• Todos os symbols são instâncias da classe Symbol.• Leitura complementar de symbols http://www.troubleshooters.com/codecorn/ruby/symbols.htm

• Leitura complementar em Hashes http://rubylearning.com/satishtalim/ruby_hashes.html

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 20: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Blocos e iteradores

Blocos e iteradores

• Um bloco é uma seqüência de código delimitado por abre efecha chaves ou do e end.

• Herança de programação funcional (Só alguns pontos).

• Exemplo de bloco sem parâmetros (iterador times).

4.times {puts "Hey!"}

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 21: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Parâmetros

Parâmetros

• Exemplos de bloco com parâmetros (iterador, método each).

• Uso em Array e em Hash (chave, valor).

vetor = [1,2,3,4,5]vetor.each {|valor| puts valor}

[5,10,15,20].each {|valor| puts valor}

temp={"Segunda"=>25, "Terça" => 27, "Quarta" => 30}temp.each{|dia, temp| puts "A temperatura de #{dia} foi #{temp}"}

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 22: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Execução de comandos

Execução de comandos

• Um bloco só pode ser de�nido na chamada de umprocedimento.

• O bloco é passado como um constante.

• O procedimento pode executar o código com o comandoyield

• Atenção ao escopo (variável no bloco existe no método)

def a_method(a, b)if block_given?

a + yield(a, b)else

a+bend

endputs a_method(1, 2) {|x, y| (x + y) * 3 }puts a_method(1, 2)

def my_methodyield

endtop_level_variable = 1my_method do

top_level_variable += 1local_to_block = 1

endputs top_level_variableputs local_to_block

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 23: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Complemento de Classes

Complemento de Classes

• confere número de parâmetros não iniciados

• Para parâmetros variáveis, *params (passados como Array)

• Permite o uso de symbol como parâmetro, simulando keyword

parameters. (são passados como Hash).

def demo_key_params( options={} )puts options.classoptions.each do

|key, value|puts "Chave=#{key}, Valor=#{value}"

endend

my_list = [1,2,3,4]demo_key_params(:list => my_list,

:num => 50)

def explode(options={})defaults = { :message => "Kabloooie!",

:timer => 10, :count => 1 }options = defaults.merge(options)

options[:count].times dosleep options[:timer]puts options[:message]

endendexplode :message => "Meh.", :count => 3

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 24: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

Gems

Gems

• Por ser interpretado, as bibliotecas Ruby são todas escritas emRuby (fonte).

• Estão disponíveis como rubygems ou só gems.

• Para usar uma gema, tem de usar o programa gem (semelhanteao apt-get ou yum, entre outros).

• Exemplo: gem install activerecord. Este comando irábuscar no repositório (o padrão é http://rubygems.org/) osprogramas-fonte da biblioteca activerecord).

• Exemplos de gemas: rails, test, csv, activerecord, ...

• Por esta razão: Para instalar o Rails, baixe: ruby 1.9.3,gem, bundler e digite gem install rails.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby

Page 25: Programação Web Aula 3 Linguagem Ruby - inf.ufpr.br · PDF fileBruno Müller JuniorDepartamento de Informática UFPR Programação Web Aula 3 Linguagem Ruby. ... index.rb?Chapter=09

Ruby

ActiveRecord

ActiveRecord

• É uma classe ruby que implementa acesso a BD (independe deSGBD).

• Parte 1: criar o banco de dadoswww.inf.ufpr.br/bmuller/CI320/criaSchema.rb

• Parte 2: acesso ao banco de dadoswww.inf.ufpr.br/bmuller/CI320/pessoas.rb

• Em Ruby, padronização NÃO É OPCIONAL. Exemplo emactiverecord: Pluralização.http://stackoverflow.com/questions/4421848/how-does-activerecord-infer-mapping-from-singular-class-and-plural-table-an

• relacionamentos 1x1, 1xn, nxn: http://guides.rubyonrails.org/active_record_querying.html

• sugestão de bibliogra�a http://www.amazon.com/Pro-Active-Record-Databases-Experts/dp/1590598474Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 3 Linguagem Ruby