Download pdf - Curso ruby on rails

Transcript
Page 1: Curso ruby on rails

Ruby on RailsDesenvolvimento ágil para web

Page 2: Curso ruby on rails

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

Page 3: Curso ruby on rails

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...

Page 4: Curso ruby on rails

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.

Page 5: Curso ruby on rails

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

Page 6: Curso ruby on rails

IRB

Page 7: Curso ruby on rails

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

Page 8: Curso ruby on rails

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?

Page 9: Curso ruby on rails

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

Page 10: Curso ruby on rails

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

Page 11: Curso ruby on rails

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

Page 12: Curso ruby on rails

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)

Page 13: Curso ruby on rails

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)

Page 14: Curso ruby on rails

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

Exemplos...

Page 15: Curso ruby on rails

Introdução a RubyDúvidas?

Page 16: Curso ruby on rails

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].

Page 17: Curso ruby on rails

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.")

Page 18: Curso ruby on rails

ArraysVamos iterar por nosso array.

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

end

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

Page 19: Curso ruby on rails

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 ?

Page 20: Curso ruby on rails

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)

Page 21: Curso ruby on rails

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

meu_nome = gets.chomp

Porque chomp?

Leitura do input

Page 22: Curso ruby on rails

Declaração de função

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

end

minha_funcao("Matheus", alunos)

Porque retornou "Matheus"? Chequem alunos

Page 23: Curso ruby on rails

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).

Page 24: Curso ruby on rails

Ruby OO

Page 25: Curso ruby on rails

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?

Page 26: Curso ruby on rails

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).

Page 27: Curso ruby on rails

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.

Page 28: Curso ruby on rails

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='

Page 29: Curso ruby on rails

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

Page 30: Curso ruby on rails

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

Page 31: Curso ruby on rails

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.

Page 32: Curso ruby on rails

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

Page 33: Curso ruby on rails

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.

Page 34: Curso ruby on rails

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.

Page 35: Curso ruby on rails

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.

Page 36: Curso ruby on rails

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.

Page 37: Curso ruby on rails

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.

Page 38: Curso ruby on rails

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

Page 39: Curso ruby on rails

Metaprogramação

Page 40: Curso ruby on rails

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.

Page 41: Curso ruby on rails

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

Page 42: Curso ruby on rails

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

Page 43: Curso ruby on rails

Singleton ClassesTodo objeto em ruby possui duas classes.

1- A class do objeto instanciado;

2- A sua singleton class.

Page 44: Curso ruby on rails

Singleton ClassesSingleton classes guardam os singleton methods.

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

Page 45: Curso ruby on rails

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

Possui uma sintaxe própria.

Page 46: Curso ruby on rails

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

Page 47: Curso ruby on rails

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(!).

Page 48: Curso ruby on rails

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.

Page 49: Curso ruby on rails

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

Page 50: Curso ruby on rails

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.

Page 51: Curso ruby on rails

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)

Page 52: Curso ruby on rails

Duck TypingMas e as classes abstratas?

Page 53: Curso ruby on rails

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

Page 54: Curso ruby on rails

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

Page 55: Curso ruby on rails

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.

Page 56: Curso ruby on rails

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.

Page 57: Curso ruby on rails

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

Page 58: Curso ruby on rails

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 )

Page 59: Curso ruby on rails

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.

Page 60: Curso ruby on rails

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.

Page 61: Curso ruby on rails

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

Page 62: Curso ruby on rails

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.

Page 63: Curso ruby on rails

Duvidas por hoje?

Page 64: Curso ruby on rails

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

Page 65: Curso ruby on rails

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

Page 66: Curso ruby on rails

Ruby on Rails

Page 67: Curso 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.

Page 68: Curso ruby on rails

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.

Page 69: Curso ruby on rails

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.

Page 70: Curso ruby on rails

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

Page 71: Curso ruby on rails

Um pouco de história

CoC: Convention over Configuration.

DRY: Don't Repeat Yourself.

KISS: Keep It Simple, Stupid.

Page 72: Curso ruby on rails

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

MVC

Page 73: Curso ruby on rails

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

MVC

Page 74: Curso ruby on rails

MVC

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