Ruby (2/2) André Braga Patrícia Lustosa. Intro Peguem a aula de ontem em /~plvr para ter como...
Transcript of Ruby (2/2) André Braga Patrícia Lustosa. Intro Peguem a aula de ontem em /~plvr para ter como...
![Page 1: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/1.jpg)
Ruby(2/2)
André Braga
Patrícia Lustosa
![Page 2: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/2.jpg)
Intro
• Peguem a aula de ontem em /~plvr para ter como referência para os exercícios de hoje
![Page 3: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/3.jpg)
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
![Page 4: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/4.jpg)
Métodos
1)
![Page 5: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/5.jpg)
Return Values
• Métodos retornam o valor do último statement avaliado
• Um return statement explícito também pode ser usado
![Page 6: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/6.jpg)
Default Value Argument
• Valor default de um parâmetro pode ser especificado durante a definição de um método
![Page 7: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/7.jpg)
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
![Page 8: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/8.jpg)
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
![Page 9: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/9.jpg)
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
![Page 10: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/10.jpg)
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
![Page 11: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/11.jpg)
Declaring Visibility
• Se private for chamado sem argumentos, ele seta para private todos os métodos subsequentes
![Page 12: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/12.jpg)
Declaring Visibility
![Page 13: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/13.jpg)
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
![Page 14: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/14.jpg)
Blocos
2)
![Page 15: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/15.jpg)
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
![Page 16: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/16.jpg)
Passando blocos• yield()
![Page 17: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/17.jpg)
Blocos com parâmetros
yield() pode receber os parâmetros do bloco
![Page 18: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/18.jpg)
Iteração• each, map, select, reject
Reject funciona da mesma forma
![Page 19: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/19.jpg)
Map & !
new
![Page 20: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/20.jpg)
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.
![Page 21: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/21.jpg)
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.
![Page 22: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/22.jpg)
Exceções
3)
![Page 23: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/23.jpg)
Exception Class
• Exceções são implementadas como classes que herdam de Exception
![Page 24: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/24.jpg)
Exception Handling
![Page 25: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/25.jpg)
DSL
4)
![Page 26: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/26.jpg)
Embedded DSL
• Embutir uma DSL em uma linguagem host pode ser usada para defini-la, no lugar de construir um compilador ou interpretador
![Page 27: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/27.jpg)
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
![Page 28: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/28.jpg)
Meta-modelos
• Meta-modelo define a sintaxe abstrata de uma DSL
• Uma linguagem de meta-modelagem pode ser considerada uma DSL para definir meta-modelos
![Page 29: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/29.jpg)
![Page 30: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/30.jpg)
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
![Page 31: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/31.jpg)
![Page 32: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/32.jpg)
![Page 33: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/33.jpg)
Ruby on Rails
5)
![Page 34: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/34.jpg)
![Page 35: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/35.jpg)
Convention over Configuration
Don’t Repeat Yourself (DRY)
Agile Development Environment
Práticas-padrão
Adaptabilidade
Geração de códigoTestesRecompilação, deploy…
![Page 36: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/36.jpg)
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
![Page 37: 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.](https://reader036.fdocument.pub/reader036/viewer/2022062700/552fc161497959413d8e9800/html5/thumbnails/37.jpg)
Scaffolding• Cria “esqueleto”• Prototipação rápida• Padrões para:– Listar– Criar– Atualizar– Remover
• Lógica e template defaults