Ruby
(2/2)
André Braga
Patrícia Lustosa
Intro
• Peguem a aula de ontem em /~plvr para ter
como referência para os exercícios de hoje
Exercício
• Construa uma Expressão Regular para buscar
por padrões que contenham a expressão
“~if734” e que não tenham:
– Nenhum número imediatamente após
– Nenhum espaço em branco diretamente antes,
mas haja algum outro dígito
• Faça um método para calcular o fatorial de um
número usando a estrutura de controle
times
1)
Métodos
Return Values
• Métodos retornam o valor do último
statement avaliado
• Um return statement explícito também pode
ser usado
Default Value Argument
• Valor default de um parâmetro pode ser
especificado durante a definição de um
método
Variable Length Argument List
• Último parâmetro de um método pode ser
precedido por * indicando que mais de um
parâmetro pode ser passado para a função
• Esses parâmetros são colecionados e um array
é criado
Array Argument
• Asterístico (*) também pode ser usado para
preceder um array passado como parâmetro
para um método
• O array é expandido e os parâmetros são
passados como se tivessem separados por
vírgulas
Hash Argument
• Hash pode ser passado quando uma função é
invocada
• Une o melhor dos dois mundos: paramêtros
com nome e quantidade de parâmetros
variável
Declarando Visibilidade
• Por default, todos os métodos são public
• O acesso pode ser restringido através dos
métodos public, protected ou private
– Não são palavras chave, mas sim métodos que
operam na classe, alterando dinamicamente a
visibilidade dos métodos
Declaring Visibility
• Se private for chamado sem argumentos, ele
seta para private todos os métodos
subsequentes
Declaring Visibility
Exercício
• Defina uma classe Funcionário que contém
um construtor que recebe um nome e n
dependentes (n >= 0)
• Crie um novo funcionário com 3 dependentes
e imprima-os
2)
Blocos
O que são blocos?
• Funções (ou pedaçoes de código) anônimas
• Bloco como parâmetro para uma função
– Realizar iterações passando elementos como
parâmetro para a “função anônima”-parâmetro
Passando blocos
• yield()
Blocos com parâmetros
yield() pode receber os parâmetros do bloco
Iteração
• each, map, select, reject
Reject funciona da mesma forma
Map & !
new
Exercício 1
• Faça um programa que crie uma PG com fator
7 de 15 números e:
– Exclua os elementos menores que 36
– Crie um Hash com os elementos que sobrarem,
onde a chave de cada elemento é o próprio valor
no formato de String.
– No final, imprima as chaves e valores do Hash.
Dica: Vá no irb (Hash.methods) ou no fxri para descorir
métodos da classe Hash.
Exercício 2
• Use o código da questão anterior de forma
que ele seja passado como um bloco para
uma outra função. Esse bloco deve receber
como parâmetro a quantidade de elementos
da PG, o fator e o valor mínimo.
3)
Exceções
Exception Class
• Exceções são implementadas como classes
que herdam de Exception
Exception Handling
4)
DSL
Embedded DSL
• Embutir uma DSL em uma linguagem host
pode ser usada para defini-la, no lugar de
construir um compilador ou interpretador
Embedded DSL
• Embutir uma DSL em uma linguagem dinâmica
é uma técnica conhecida
– Sintaxe não-intrusiva
– Habilidade de avaliar expressões a medida que
elas aparecem no programa
• Em uma embedded DSL, o designer extende
as construções da linguagem host com
construções de domínio específico ao invés de
construir um parser
Meta-modelos
• Meta-modelo define a sintaxe abstrata de
uma DSL
• Uma linguagem de meta-modelagem pode ser
considerada uma DSL para definir metamodelos
Embedded DSL
• Essa abordagem para implementar uma DSL
gasta menos tempo do que um gerador de
parser
– Não há necessidade de lidar com gramática ou
árvore sintática abstrata
• Por outro lado, definir uma sintaxe abstrata
arbitrária é impossível, porque há a limitação
da sintaxe da linguagem host
5)
Ruby on
Rails
Práticas-padrão
Convention over Configuration
Adaptabilidade
Don’t Repeat Yourself (DRY)
Agile Development Environment
Geração de código
Testes
Recompilação, deploy…
Alguns pontos
• Migrations
– Gerencia evolução de um schema (BD)
• Rake
– Linguagem de “build” para Ruby
– Automatiza tarefas: create e drop de tabelas,
testes, atualiza arquivos de suporte, etc.
• Generator
• URL Routing
– Permite expressões regulares
Scaffolding
• Cria “esqueleto”
• Prototipação rápida
• Padrões para:
– Listar
– Criar
– Atualizar
– Remover
• Lógica e template defaults
Download

RubyCompiladores