Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Ruby - Introdução

Introdução aos fundamentos da linguagem de programação Ruby
by

Eduardo Mendes de Oliveira

on 6 August 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Ruby - Introdução

AGENDA
Introdução
Ruby
AO
Eduardo Mendes
OBjetos em ruby
Revisão dos conceitos de OO
Introdução Ruby



# criação da instância da classe,
# o objeto
maria = Pessoa.new

# executa métodos
maria.set_nome('Maria da Silva')
maria.crescer(0.1)
maria.envelhecer(1)
Pessoa
- nome: string
- altura: float
- idade: int
Classes em RUBY
<?php

// inclui a classe
include 'pessoa.class.php';

// instancia o objeto
$maria = new Pessoa();

// define valor para atributos
$maria->altura = 1.7;
$maria->idade = 28;

// executa métodos
$maria->setNome('Maria da Silva');
$maria->crescer(0.1);
$maria->envelhecer(1);

// imprime o objeto
var_dump($maria);

?>
OBjetos em PHP
são instâncias de uma
class Pessoa

//os atributos
ou
propriedades
@nome
@altura
@idade
end
ORIENTAÇÃO A OBJETOs
O que é
um Objeto
?
?
?
?
?
?
?
?
?
?
?
?
O que uma
é classe?
O que é
Orientação
a Objetos
Quais são os
membros
de uma classe
O que é
herança
O que é
superclasse
e subclasse
O que é
hierarquia
de classes
O que é
método
sobrescrito
O que é
encapsulamento
O que é
associação
O que é
construtor
O que é
polimorfismo
Pessoa
-nome: string
-altura: float
-idade: int
end

//definição dos métodos
def set_nome(nome)
@nome = nome
end

def crescer(centimetros)
@altura += centimetros
end

def envelhercer(anos)
@idade += anos
end
Classes em RUBY

class Pessoa
+set_nome(string)
+crescer(float)
+envelhecer(int)
CONSTRUTOR EM RUBY
initialize([parametros]) { }
class Pessoa


def initialize(nome)
@nome= nome
end

end
maria = Pessoa.new("Maria")
Exercício de fixação
Msc Eduardo Mendes de Oliveira
edumendes@gmail.com

Música
Sistemas de Informação
Engenharia de Teleinformática

FA7
Coordenador do DESI
Professor
Introdução Ao Ruby:
o Que é Ruby?

Linguagem de Programação
Criada no Japão em 1995 por Yukihito "Matz" Matsunomoto
Sintaxe baseada em Perl, Python e Smalltalk
Não é uma linguagem compilada (como C++, Java, Visual Basic)
Linguagem interpretada, exige um interpretador Ruby
Introdução Ao Ruby:
Por que Ruby?

Orientado a objeto
Código fácil de ler
Sintaxe, nomeações e comportamentos sem surpresas
Independente de espaços em branco
Sem ponto e vírgulas
Muito de "syntatic sugar"
http://eduardopires.net.br/2012/08/c-sharp-iniciantes-syntactic-sugar/
Introdução Ao Ruby:
Ruby X Ruby on rails

Framework web escrito em Ruby
Ruby on Rails
Linguagem de propósito geral

Não é apenas para web
Ruby
INTRODUÇÃO
AO RUBY

USANDO
RUBY

Usando Ruby:
03 maneiras

Comandos simples
Arquivo ruby (.rb)
Interactive Ruby Shell (IRB)
Comandos simples
ruby -e 'puts abc'

ruby -e 'print abc'

Arquivo ruby
extensão .rb
IRB (INTERACTIVE RUBY SHELL)
nome_do_arquivo.rb
executar
ruby nome_do_arquivo.rb
Digitar comandos
Criar um arquivo inteiro dentro
Permite interagir com o código em tempo real
Funciona como uma calculadora
Excelente para testar códigos
Basta digitar
irb
em linha de comando ou terminal
- variação irb --simple-prompt
Documentação
www.ruby-doc.org/core
ou
ri comando
RUBY
TIPOS DE OBJETO
constantes não são objetos

qualquer identificador que inicializa com letra maiúscula é uma constante
CONSTANTeS
VARIÁVEIS
são indefinidas ou atuam como um objeto
permite-nos referenciar objetos
precisam ser inicializadas
letras_minusculas_separadas_por_sublinhados
convenções
Global
ESCOPOs
primeiro_nome = 3
primeiroNome
primeiro-nome
primeironome
dê às suas variáveis
nomes que as identifiquem
$variavel
Classe
@@variavel
Instância
@variavel
Local
variavel
Bloco
variavel
Inteiros
INTEGERS
Ponto flutuante / decimal
FLOATS
sequência de caracteres
STRINGS
[]
ARRAYS
coleções não-ordenadas de objetos indexados por objetos
HASHES
parecem com Strings
SYMBOLS
é uma sequência de números ou strings
RANGES
TRUE / FALSE
BOOLEANS
Ruby é uma linguagem orientada a objetos
O objeto é a célula fundamental da linguagem
OBJETOS
RUBY
FUNDAMENTOS
DA LINGUAGEM

Numéricos
Operadores
+
-
=
/
*
**
+=
Fixnum
Bignum
métodos
.abs
.next
métodos
.round
.to_i
.floor
.ceil
métodos
.reverse
.capitalize
.downcase
.upcase
utilizadas com " ou '
concatenação
+
"Oba"*5
# => "ObaObaObaObaOba"
saudacao = "Hello"
# => "Hello"

algo = 'world'
# => "world"

saudacao + ' ' + algo
# => "Hello world"
puts "Este é o meu #{saudacao} #{algo}."
# Este é o meu Hello world.
# => nil
puts
'
Este é o meu #{saudacao} #{algo}.
'
# Este é o meu #{saudacao} #{algo}.
# => nil
Atenção
.length
podem ser de tipos mistos
<< para adicionar
um elemento
métodos
.inspect
.reverse
.join
.split
.to_s
.uniq
.sort
!
.reverse!

.uniq!

.sort!
.delete_at()
.delete()
.push
.pop
.shift
.unshift()
coleção ordenada de objetos indexados por inteiros
BACANA
array = [1, 2, 5, 0, 3]
# => [1, 2, 5, 0, 3]
chave -> valor
{}
# irb
pessoa = ['Eduardo', "Mendes", 'masculino', 'preto', 'preto']
# => ["Eduardo", "Mendes", "masculino", "preto", "preto"]

pessoa = { 'primeiro_nome' => 'Eduardo', 'sobre_nome' => 'Mendes' }
# => {"primeiro_nome"=>"Eduardo", "sobre_nome"=>"Mendes"}
pessoa['primeiro_nome']
# => "Eduardo"
pessoa['sobre_nome']
# => "Mendes"
pessoa.index('Eduardo')
# => "primeiro_nome"
.clear()
novo_array = array + [9,10]
# => [1, 2, 5, 0, 3, 9, 10]
novo_array = array - [9,10]
# => [1, 2, 5, 0, 3]
novo_array = array - [2]
# => [1, 5, 0, 3]
1 * 5
# => 5
'1' * 5
# => "11111"
'Gota d\'água'
# => "Gota d'água"
métodos
.keys
.size
.length
.values
.to_a
.clear
pessoa['sexo'] = 'masculino'
# => {"sexo"=>"masculino", "primeiro_nome"=>"Eduardo", "sobre_nome"=>"Mendes"}
mas... não
parecem variáveis
mas... não
Um símbolo é uma "etiqueta"(label) utilizada para identificar um pedaço de dado
Um símbolo é armazenado na memória apenas uma vez
:nome_do_simbolo
:
útil para representar
chaves de hashes
Operadores lógicos e comparação
Igualdade

Menor do que

Maior do que

Menor ou igual do que

Maior ou igual do que
==

<

>

<=

>=
Negação

Diferente

Conjunção: 'E'

Disjunção: 'OU'

!

!=

&&

||
expressões
2.between?(1,4)
# => true

2.between?(3,4)
# => false
[1,2,3].empty?
# => false

[].empty?
# => true
[1,2,3].include?(2)
# => true

[1,2,3].include?(5)
# => false
{'a' => 1, 'b' => 2}.has_key?('a')
# => true

{'a' => 1, 'b' => 2}.has_key?(:a)
# => false

{'a' => 1, 'b' => 2}.has_value?(2)
# => true
..
...
Array
Range
[1,2,3,4,5,6,7,8,9,10]
1..10
Inclusivos 1..10
Exclusivos 1...10
[1,2,3,4,5,6,7,8,9,10]
[1,2,3,4,5,6,7,8,9]
métodos
.begin
.include?()
.end
BACANA
x = 1..10
# => 1..10
z = [*x]
#splat
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
'a'..'m'
# => "a".."m"

alfa = 'a'..'m'
# => "a".."m"


alfa.include?('g')
RUBY
ESTRUTURAS
DE CONTROLE
if, else, elsif
unless, case
Laços
iteradores
if
boolean
...
end
if
boolean
...
else
...
end
if
boolean
...
elsif
...
else
...
end
unless
boolean
...
end
if !
boolean
...
end
case
when
boolean
...
when
boolean
...
end
case
when
boolean
...
when
boolean
...
else
...
end
ternário
boolean
? código1 : código2
loop do
...
end
controles
break: finaliza o laço

next: pula para a próxima iteração

redo: refaz a iteração atual

retry: repete o laço inteiro
x = 0
# => 0

loop do
x += 2

break if
x >= 20

next if
x == 6
puts x
end
while
boolean
...
end
until
boolean
...
end

... while
boolean

... until
boolean
x = 0
while
x < 5
puts "Hello"
x +=1
end

5.
times
puts "Hello"
end

1.
upto(5) {
puts "Hello"
}

5.
downto(1) {
puts "Hello"
}

(1..5).
each {
puts "Hello"
}

1.
upto(5) do |i|
puts "Hello" + i.to_s
end

frutas = ["pera", "uva", "maca"]
for
fruta
in
frutas

puts fruta.capitalize
end
RUBY
OUTROS
BLOCOS
FIND
find / detect
find_all / select
any?
all?
delete_if()
Object ou nil
Array
Boolean
Boolean
Array
merge
somente para hashes
não altera os hashes originais
RUBY
MÉTODOS
Definindo
e chamando
métodos
def
algum_nome
...
end
argumentos: lista de valores separados por vírgulas
def
algum_nome(valores)
...
end
argumentos podem receber
valores default
retornos
todos os métodos possuem retorno
Nomes de classes devem ser em CamelCase
Utilizados para encontrar objetos
em um grupo de dados
dataset
identificador
do bloco
{ }
(1..10)
.find
{ }
|i|
i == 5
retorna o próprio objeto, caso encontre
senão, retorna nil
retorna apenas um elemento, o 1.º que encontrar
DETECT
Possui o mesmo comportamento do FIND
(1..10).detect {|i| i % 3 == 0}
FIND_ALL
(1..10)
.find_all
{ }
|i|
i % 3 == 0
retorna um array todos os que satisfaçam a expressão
senão, retorna nil
SELECT
Possui o mesmo comportamento do FIND_ALL
(1..10).select {|i| i % 3 == 0}
any?
(1..10)
.any?
{ }
|i|
i % 3 == 0
retornam booleano
all?
(1..10)
.all?
{ }
|i|
i % 3 == 0
delete_if
[*1..10].delete_if { |i| i % 3 == 0 }
retorna um array
expressao
booleana
h1 = { "a" => 111, "b" => 222}
h2 = { "b" => 333, "c" => 444}
h1.merge(h2)
h2.merge(h1)
!=
resolução de conflitos
h1.merge(h2) { | key, old, new | #resolucao }
collect/map
array = [1,2,3,4,5]
arrays , hashes, ranges
retorna sempre um novo array
número de elementos de retorno é ao igual ao da entrada
=> [1, 2, 3, 4, 5]
>> array.collect {|i| i + 1}
=> [2, 3, 4, 5, 6]
['maca', 'banana'].map {|f| f.capitalize}
=> ["Maca", "Banana"]
['maca', 'banana'].map {|f| f.capitalize if f == 'banana'}
=> ["maca", "Banana"]
>> hash = {"a" => '111', "b"=> '222', "c" => '333'}

{"c"=>"333", "b"=>"222", "a"=>"111"}

>> hash.map { |k,v| k }

=> ["c", "b", "a"]
?
E se colocar
puts
<=>
valor 1 <=> valor2
operador de comparação
-1
0
1
valor1 == valor2
valor1 > valor2
valor1 < valor2
>> array
=> [3, 1, 5, 2, 4]
>> array.sort { |v1,v2| v1 <=> v2 }
def
algum_nome(valor = 1, valor2 = "teste")
...
end
argumentos
a última linha é avaliada como retorno
def nome
@nome
end
Métodos
leitores/escritores

Reader/Writer
Pessoa
-nome
-altura
-idade
E se pudéssemos:
p = Pessoa.new
p.nome = "Luiz"
puts p.nome
def nome=(nome)
@nome = nome
end
E se existissem
20 propriedades na classe?
attr_reader
attr_writer
attr_accessor
cria leitores de um grupo de propriedades
cria escritores de um grupo de propriedades
cria ambos
Exemplo
class Pessoa
attr_accessor :nome
attr_reader: altura
attr_writer: idade

end
métodos de classe
Podem ser chamados na classe,
sem necessidade de uma instância
def
self
.nome_do_metodo
....
end
Exemplo
class Fabrica
def self.produtos
['Produto 1', 'Produto 2', 'Produto 2']
end
end
puts Fabrica.produtos
Atributos de classe
- valores para serem aplicados às classes de modo geral

Ex :
controlar quantos objetos foram criados
ter o controle de todos os objetos
@@nome_da_variavel
Relação entre estruturas orientadas a objetos
onde subtipos herdam código de supertipos
HERANÇA
Em Ruby só há herança simples
Veiculo
Carro
class Veiculo
end
class Carro < Veiculo
end
Você pode sobrescrever métodos na superclasse

Não há diferença entre sobrescrita e sobrecarga

É possível sobrescrever na mesma classe

A implementação válida é a última
Métodos sobrescritos
SUPER
PAra utilizar comportamento
da super classe
- Serve para evitar conflitos entre nomes de classes
de suas classes para as classes originais do Ruby
de suas classes para outras classes
NAMESPACING
module Teste
class NomeDaClasse

end
end
MODULE
variavel = Teste::NomeDaClasse.new
alternativa para a ausência de herança múltipla
cria-se funcionalidade extra em um módulo e mixa-o
o código que deveria ser herdado de outra classe pode ser herdade de um módulo
MIX-ins
module InformacoesDeContato
attr_accessor :primeiro_nome, :ultimo_nome, :cidade, :estado

def nome_completo
return @primeiro_nome + “ “ + @ultimo_nome
end
end
class Pessoa
include InforamacoesDeContato
end
O que é
Utilização
Objetos
Classes
Blocos
Laços
Métodos
Herança
Namespacing
Mix-ins
Full transcript