Ruby (2/2)

37
Ruby (2/2) André Braga Patrícia Lustosa

description

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 : - PowerPoint PPT Presentation

Transcript of Ruby (2/2)

Page 1: Ruby (2/2)

Ruby(2/2)

André Braga

Patrícia Lustosa

Page 2: Ruby (2/2)

Intro

• Peguem a aula de ontem em /~plvr para ter como referência para os exercícios de hoje

Page 3: Ruby (2/2)

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)

Métodos1)

Page 5: Ruby (2/2)

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)

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)

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)

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)

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)

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)

Declaring Visibility

• Se private for chamado sem argumentos, ele seta para private todos os métodos subsequentes

Page 12: Ruby (2/2)

Declaring Visibility

Page 13: Ruby (2/2)

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)

Blocos2)

Page 15: Ruby (2/2)

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)

Passando blocos• yield()

Page 17: Ruby (2/2)

Blocos com parâmetrosyield() pode receber os parâmetros do bloco

Page 18: Ruby (2/2)

Iteração• each, map, select, reject

Reject funciona da mesma forma

Page 19: Ruby (2/2)

Map & !

new

Page 20: Ruby (2/2)

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)

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)

Exceções3)

Page 23: Ruby (2/2)

Exception Class

• Exceções são implementadas como classes que herdam de Exception

Page 24: Ruby (2/2)

Exception Handling

Page 25: Ruby (2/2)

DSL4)

Page 26: Ruby (2/2)

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)

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)

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)
Page 30: Ruby (2/2)

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)
Page 32: Ruby (2/2)
Page 33: Ruby (2/2)

Ruby on Rails

5)

Page 34: Ruby (2/2)
Page 35: Ruby (2/2)

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)

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)

Scaffolding• Cria “esqueleto”• Prototipação rápida• Padrões para:– Listar– Criar– Atualizar– Remover

• Lógica e template defaults