curso ruby on rails

Post on 14-Jul-2015

171 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ruby on RailsDesenvolvimento ágil para web

Linguagem RubyFoi criada com o intuito de parecer natural, não necessariamente simples.

Seu idealizador buscou o equilíbrio entre programação funcional e programação imperativa.

"O Ruby é simples na aparência, mas muito complexo no interior, tal como o corpo humano." - Yukishiro 'Matz' Matsumoto

Linguagem RubyParte de sua naturalidade vem do fato de Ruby utilizar tipagem dinâmica.

Outras propriedades interessantes:● Compilação just-in-time (tradução dinâmica)● Garbage Collector● Tipagem forte● E o mais interessante...

Linguagem RubyTudo em Ruby é um objeto.

Ou seja, cada pedaço de informação em um código Ruby pode possuir suas próprias propriedades e métodos.

Lembrando: em programação orientada a objetos, chamamos propriedades de variáveis de instância e ações de métodos. Veremos isso melhor mais adiante.

IRBGrande recurso para os desenvolvedores Ruby é o console interativo Ruby, ou IRB.

IRB

StringsSão delimitadas por aspas simples ou duplas. Aspas simples não comportam interpolação.

Strings são mutáveis. Através do operador '<<', por exemplo, a string é modificada na mesma instancia

Strings (primeira convenção)O método capitalize transforma a primeira letra de uma String em maiúscula.

Quantos outros métodos uma String possui?

Tipos e operações básicasComo era de se esperar o Ruby consegue lidar com expressões matemáticas.

Possui 3 tipos numéricos básicos: Fixnum, Bignum e Float

Tipos e operações básicas+: Soma-: Subtração*: Multiplicação/: Divisão%: Mod (vulgo resto)**: Potência

Tipos e operações básicas (Range)

Range: Maneira simples de se trabalhar com sequências.(1..9): Sequência de 1 a 9('a'..'z'): Sequência de a a z minúsculo(0...5): Sequência de 0 a 4

Symbol: São textos como as Strings.

São imutáveis e compartilhados; por conta disso, são usados como identificadores e nomenclatura.

Tipos e operações básicas (Symbol)

Operações booleanasRuby possui operações booleanas como qualquer outra linguagem.São elas: <, >, <=, >=, ==.

Estas operações ainda podem ser combinadas com && (and) e || (or)

Estruturas de controle- if- Case when- for- while

Exemplos...

Introdução a RubyDúvidas?

ArraysSão delimitados por colchetes [ ] e podem guardar qualquer objeto. Por padrão, seu tamanho não é definido. Vejamos:

alunos = Array.new ou alunos = []

Quando tentamos acessar um índice não existente do array, ele nos retorna nil: alunos[0] ou alunos[1000000].

ArraysPara recebermos algum erro ao tentar acessar um índice inexistente de um Array, devemos utilizar o método fetch.

alunos.fetch(100)

Para retornar uma mensagem padrão ao invés do IndexError: alunos.fetch(100, "Não temos tantos alunos.")

ArraysVamos iterar por nosso array.

alunos.each do |aluno|puts aluno + " sobrenome"

end

Ao invés de puts aluno, tentem aluno = aluno + " sobrenome".

ArraysO método map pode ser usado para criarmos um novo array a partir do nosso.

alunos.map do |aluno|aluno = aluno + " sobrenome"

end

E se usarmos map! ao invés de map ?

São delimitados por chaves {} e representam uma estrutura de chave-valor. Podemos usar qualquer tipo de chave e qualquer tipo de valor (por convenção, usamos symbols como chaves).

idades_alunos = {} ou idades_alunos = Hash.new

Quando tentamos acessar o valor de uma chave não existente, ele nos retorna nil: idade_alunos["workshop"]

Hashes (~= Arrays associativos)

Equivalente ao cin de C++, temos o gets em Ruby.

meu_nome = gets.chomp

Porque chomp?

Leitura do input

Declaração de função

def minha_funcao(param1, param2 = [])param2[0] = param1

end

minha_funcao("Matheus", alunos)

Porque retornou "Matheus"? Chequem alunos

Exercício: troco mínimo (+-)Queremos uma função que devolva um determinado troco com o menor número de moedas possível, dado um conjunto de moedas.

Mais do que isso, queremos um programa que leia o valor do troco e também o valor das moedas que estarão no tal conjunto. Para o conjunto de moedas brasileiras (50, 25, 10, 5, 1), a solução precisa estar correta (mas não precisa ser ótima :P).

Ruby OO

Ruby OORuby é considerada uma linguagem puramente orientada à objetos.

Como foi dito antes, em Ruby tudo é objeto.

● Classe Aberta: Hmm?● Herança: como funciona em Ruby?

Atributos e PropriedadesAtributos, ou variáveis de instancia, são sempre privados e começam com @.

Para alterá-los precisamos usar métodos do objeto (Encapsulamento).

Atributos e PropriedadesÉ comum que precise de algum código a ser executado ao criar um objeto. Para isto usamos o método initiliaze.

Initializers são métodos privados, ou seja, não podem ser chamados fora da classe.

Atributos e PropriedadesNos nossos exemplos utilizamos os nomes get e set para resgatar e modificar alguma variável de instancia.

Em Ruby esses métodos são definidos como 'nome_atributo' para o 'get' e 'nome_atributo='

Atributos e PropriedadesComo criar um método set e um get para cada um dos atributos pode ser muito trabalhoso, a linguagem ruby disponibiliza um método para fazer isto automaticamente: attr_accessor

SelfAnálogo ao this de outras linguagens como C# e Java.

HashesAlém de guardar vários valores em uma variável de forma legível, hashes podem ser usados para passar opções a métodos.

BlocksEm ruby também podemos passar bloco de código como parâmetro em algum método.

BlocksPodemos com isso deixar nossos métodos mais genéricos.

No exemplo, temos uma função que precisa ser alterada para imprimir as somas parciais, mas não queremos que isto influencie em outros lugares onde este método é chamado nem duplicar código.

BlocksPodemos até melhorar a legibilidade da chamada do block utilizando o yield.

Yield é uma palavra reservada do ruby e substitui a expressão block.call.

Tratamento de exceçõesExceções são tipos particulares de objetos, instanciados ou entendidos da classe Exception.

Assim como em Java, lançar uma exceção significa que algo não esperado aconteceu. Com isso é preciso passar um bloco para ser chamado se algo ocorrer.

Tratamento de exceçõesSeguem as exceções mais utilizadas no ruby (todas filhas de Exception):

RuntimeError: Exceção padrão, lançada pelo método raise.

NoMethodError: Como o nome já diz é lançada quando o objeto recebe um método que não pode ser encontrado.

Tratamento de exceçõesNameError: Lançada quando o interpretador não encontra uma variável ou método com o nome passado.

IOError: É lançada ao tentar ler um stream que foi fechado ou escrever em um arquivo read-only.

TypeError: É lançada quando um método recebe como argumento algo que não pode tratar.

Tratamento de exceçõesArgumentError: É lançada quando foi passado um número errado de argumentos à um método.

Metaprogramação

Métodos de classeComo já falamos, tudo em Ruby é objeto, até mesmo as classes.

Sabendo disso é natural que possamos adicionar métodos ao objeto que representa a classe.

Métodos de classeO mais usual é definirmos os métodos de classe na própria classe, mas como?

Singleton ClassesMas e se nossa classe tiver muitos métodos de classe, vamos ter que colocar self. antes de cada método?

Singleton ClassesTodo objeto em ruby possui duas classes.

1- A class do objeto instanciado;

2- A sua singleton class.

Singleton ClassesSingleton classes guardam os singleton methods.

Aquele método que criamos para um objeto é um singleton method.

Singleton ClassesOs singleton methods são definidos na singleton class.

Possui uma sintaxe própria.

Singleton ClassesUtilizando esta sintaxe conseguimos definir os métodos de classe sem precisar colocar o self. antes de cada método. =)

ConvençõesO ruby permite que seus métodos possuam caracteres como "?" e "!"

De olho nisto foram criadas convenções para métodos que retornam booleanos (?) e que alterem o estado do objeto(!).

ConvençõesComparações entre objetos são feitas com o método "==".

A versão original deste apenas verifica se as referências são iguais. Se precisarmos é só definí-lo na classe que estamos usando.

PolimorfismoComo já vimos em ruby temos suporte à herança simples em classes.

PolimorfismoEm ruby a tipagem é implicita, então precisamos declarar quais os tipos dos atributos.

Assim basta que o objeto saiba como "faz_barulho" seguindo nosso exemplo.

Duck Typing"If it walks like a duck and quacks like a duck, I would call it a duck."

Traduzindo: Para que a classe PatoDoente responda como Pato, só precisamos implementar os métodos da classe Pato. (Ruby não precisa de Interface)

Duck TypingMas e as classes abstratas?

MódulosEm ruby podemos definir módulos, servem como namespaces.

MódulosOu também podem guardar um conjunto de métodos que serão inclusos em alguma classe.

MetaprogramaçãoHoje nós modificamos vários objetos, adicionamos métodos a eles em tempo de execução, passamos blocos de código como parâmtro dentre outras coisas. Tudo isso é Metaprogramação.

MetaprogramaçãoMetaprogramação é uma grande vantagem das linguagens interpretadas.

Podemos levar a metaprogramação ao extremo quando criamos um método que cria métodos.

MetaprograçãoTambém podemos definir métodos dinamicamente.

MetaprogramaçãoA definição de métodos de acesso a atributos em ruby é feita através de metaprogramação.

Utilizamos o método de classe attr_accessor.

Qual seria a possível implementação deste método de classe? (dica: class_eval ou )

MetaprogramaçãoOutro exemplo são os métodos de classe 'private', 'public' e 'protected'.

Estes métodos alteram a visibilidade do método. Não existe palavra reservada para isto em Ruby.

MetaprogramaçãoA visibilidade de métodos em ruby lembra um pouco C++ que possui regiões de visibilidade dentro da classe.

Um método privado no Ruby só pode ser chamado por objeto self implícito. Ou seja, a expressão self.vai_ao_banheiro, causaria um erro.

MetaprogramaçãoCaso precise, podemos fazer com que a visiblidade dos métodos a baixo de private sejam publicos novamente com a palavra public.

MetaprogramaçãoOutro modificador de visibilidade em ruby é o protected.

protected, diferente do private, permite que utilize os métodos através do metodo self implícito ou explícito.

Duvidas por hoje?

Bibliografiahttp://www.caelum.com.br/apostila-ruby-on-rails/http://stackoverflow.com/questions/895747/how-can-rubys-attr-accessor-produce-class-variables-or-class-instance-variables

BibliografiaLivros:● The Ruby Way● Why's poignant guide to Ruby

Ruby on Rails

Um pouco de história

Ruby on Rails foi criado por David Heinemeier Hansson, mais conhecido como DHH, para ser usado em um dos projetos da 37signals, o Basecamp.

Um pouco de história

Rails foi anunciado oficialmente em setembro de 2004.

Teve sua versão 1.0 lançada em dezembro de 2005.

Um pouco de história

Foi criado pensando na praticidade que proporcionaria ao escrever os aplicativos web.

Além disso, comparado aos outros, o Rails permite que as funcionalidades do sistema possam ser implementadas de forma incremental.

Um pouco de história

Por isto o Rails é bastante usado em projetos e empresas que adotam metodologias ágeis de gerencia de projeto e desenvolvimento.

Principais pilares: CoC, DRY e KISS

Um pouco de história

CoC: Convention over Configuration.

DRY: Don't Repeat Yourself.

KISS: Keep It Simple, Stupid.

Model: Classes que representam as entidades no banco de dados e outras que ajudam na busca e armazenamento dos dados.

MVC

View: Responsavel por apresentar os dados. Também chamada de camada de apresentação.

MVC

MVC

Controller: Responsavel por tratar as requisições e seus parâmetros e direcioná-las para as respectivas camadas.

top related