programação web aula 3 linguagem ruby - inf.ufpr.br · pdf filebruno müller...
Post on 01-Feb-2018
227 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
top related