370 likes | 503 Views
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 :
E N D
Ruby (2/2) André Braga PatríciaLustosa
Intro • Peguem a aula de ontemem /~plvrparatercomoreferênciaparaosexercícios de hoje
Exercício • ConstruaumaExpressão Regular parabuscarporpadrõesquecontenham a expressão “~if734” e quenãotenham: • Nenhumnúmeroimediatamenteapós • Nenhumespaçoembrancodiretamente antes, mashajaalgumoutrodígito • Faça um métodoparacalcular o fatorial de um númerousando a estrutura de controletimes
Métodos 1)
Return Values • Métodosretornam o valor do último statement avaliado • Um return statement explícitotambémpode ser usado
Default Value Argument • Valor default de um parâmetropode ser especificadodurante a definição de um método
VariableLengthArgumentList • Últimoparâmetro de um métodopode ser precedidopor * indicandoquemais de um parâmetropode ser passadopara a função • Essesparâmetrossãocolecionados e um array é criado
Array Argument • Asterístico (*) tambémpode ser usadoparapreceder um array passadocomoparâmetropara um método • O array é expandido e osparâmetrossãopassadoscomo se tivessemseparadosporvírgulas
Hash Argument • Hash pode ser passadoquandoumafunção é invocada • Une o melhor dos doismundos: paramêtros com nome e quantidade de parâmetrosvariável
DeclarandoVisibilidade • Por default, todososmétodossão public • O acessopode ser restringidoatravés dos métodos public, protected ou private • Nãosãopalavraschave, massimmétodosqueoperamnaclasse, alterandodinamicamente a visibilidade dos métodos
Declaring Visibility • Se private for chamadosemargumentos, ele seta para private todososmétodossubsequentes
Exercício • DefinaumaclasseFuncionárioquecontém um construtorquerecebe um nome e n dependentes (n >= 0) • Crie um novo funcionário com 3 dependentes e imprima-os
Blocos 2)
O quesãoblocos? • Funções (oupedaçoes de código) anônimas • Blococomoparâmetroparaumafunção • Realizariteraçõespassandoelementoscomoparâmetropara a “funçãoanônima”-parâmetro
Passandoblocos • yield()
Blocos com parâmetros yield() podereceberosparâmetros do bloco
Iteração • each, map, select, reject Rejectfuncionadamesma forma
Map & ! new
Exercício 1 • Faça um programaquecrieuma PG com fator 7 de 15 números e: • Excluaoselementosmenoresque 36 • Crie um Hash com oselementosquesobrarem, onde a chave de cadaelemento é 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 fxriparadescorirmétodosdaclasse Hash.
Exercício 2 • Use o códigodaquestão anterior de forma queelesejapassadocomo um blocoparaumaoutrafunção. Esseblocodeverecebercomoparâmetro a quantidade de elementosda PG, o fator e o valor mínimo.
Exceções 3)
Exception Class • Exceçõessãoimplementadascomo classes queherdam de Exception
DSL 4)
Embedded DSL • EmbutirumaDSL emumalinguagem host pode ser usadaparadefini-la, no lugar de construir um compiladorouinterpretador
Embedded DSL • EmbutirumaDSL emumalinguagemdinâmica é umatécnicaconhecida • Sintaxenão-intrusiva • Habilidade de avaliarexpressões a medidaqueelasaparecem no programa • Emuma embedded DSL, o designer extende as construçõesdalinguagem host com construções de domínioespecíficoaoinvés de construir um parser
Meta-modelos • Meta-modelo define a sintaxeabstrata de uma DSL • Umalinguagem de meta-modelagempode ser consideradauma DSL paradefinir meta-modelos
Embedded DSL • Essaabordagemparaimplementaruma DSL gastamenos tempo do que um gerador de parser • Nãohánecessidade de lidar com gramáticaouárvoresintáticaabstrata • Poroutrolado, definirumasintaxeabstrataarbitrária é impossível, porquehá a limitaçãodasintaxedalinguagem host
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…
Algunspontos • Migrations • Gerenciaevolução de um schema (BD) • Rake • Linguagem de “build” para Ruby • Automatizatarefas: create e drop de tabelas, testes, atualizaarquivos de suporte, etc. • Generator • URL Routing • Permiteexpressõesregulares
Scaffolding • Cria “esqueleto” • Prototipaçãorápida • Padrõespara: • Listar • Criar • Atualizar • Remover • Lógica e template defaults