ruby - praticamente falando

53
Ruby – praticamente falando Ruby – praticamente falando http://www.flickr.com/photos/afternoon_sunlight/135751440 http://www.flickr.com/photos/afternoon_sunlight/135751440

Upload: luiz-sanches

Post on 13-Jan-2015

2.173 views

Category:

Technology


2 download

DESCRIPTION

Apresentação realizada no #safaDojo, dia 7 de Julho de 2011, na FabSoft do Cesupa - Belém - Pará.

TRANSCRIPT

Page 1: Ruby - praticamente falando

Ruby – praticamente falandoRuby – praticamente falando

http://www.flickr.com/photos/afternoon_sunlight/135751440http://www.flickr.com/photos/afternoon_sunlight/135751440

farol = {

'Nome' => 'Luiz Sanches',

'E-mail' => '[email protected]',

'Blog' => 'luizsanches.wordpress.com',

'Twitter' => '@luizgrsanches'

}.each {|chave, valor| puts "#{chave}: #{valor}"}

puts

puts '#tasafoemacao'

Page 2: Ruby - praticamente falando

Quem eu souQuem eu sou

farol = {

:nome => 'Luiz Sanches',

:email => '[email protected]',

:blog => 'luizsanches.wordpress.com',

:twitter => '@luizgrsanches'

}

puts 'Apenas mais um #tasafoemacao'

http://www.flickr.com/photos/brunodaher/4491575723http://www.flickr.com/photos/brunodaher/4491575723

Page 3: Ruby - praticamente falando

Rubi: AmbiguidadesRubi: Ambiguidades

Page 4: Ruby - praticamente falando

http://portaldatvaudiencia.files.wordpress.com/2010/01/rubis.jpghttp://portaldatvaudiencia.files.wordpress.com/2010/01/rubis.jpg

NovelaNovela

Page 5: Ruby - praticamente falando

http://s0.flogao.com.br/s60/15/05/07/155/103805997.jpghttp://s0.flogao.com.br/s60/15/05/07/155/103805997.jpg

Aparelhagem de somAparelhagem de som

Page 6: Ruby - praticamente falando

Pedra preciosa vermelhaPedra preciosa vermelha

http://www.gemsoul.com/images/articles/madagascar-ruby.jpg

Page 7: Ruby - praticamente falando

LinguagemLinguagem

http://www.flickr.com/photos/shawnecono/149172094http://www.flickr.com/photos/shawnecono/149172094

É qualquer e todo sistema de signos que serve de meio de comunicação de ideias ou sentimentos.

Fonte: http://pt.wikipedia.org

Page 8: Ruby - praticamente falando

Usamos a linguagem paraUsamos a linguagem para

http://www.flickr.com/photos/grafayiti/4767764752http://www.flickr.com/photos/grafayiti/4767764752

Page 9: Ruby - praticamente falando

ComunicarComunicar

http://www.flickr.com/photos/edwardjohnphotography/2522734815http://www.flickr.com/photos/edwardjohnphotography/2522734815

Page 10: Ruby - praticamente falando

SentirSentir

http://www.flickr.com/photos/ahmadhakym/2459867386http://www.flickr.com/photos/ahmadhakym/2459867386

Page 11: Ruby - praticamente falando

EnvolverEnvolver

http://www.flickr.com/photos/nunoduarte/2801870408http://www.flickr.com/photos/nunoduarte/2801870408

Page 12: Ruby - praticamente falando

CriarCriar

http://www.flickr.com/photos/ochblog/379675238

Page 13: Ruby - praticamente falando

ConectarConectar

http://www.flickr.com/photos/theboywholaughs/3219937865

Page 14: Ruby - praticamente falando

ExpressarExpressar

http://www.flickr.com/photos/cubagallery/4361297705http://www.flickr.com/photos/cubagallery/4361297705

Page 15: Ruby - praticamente falando

Enfim, viver!Enfim, viver!

http://www.flickr.com/photos/thinkoutsidethebox2008/5113401458

Page 16: Ruby - praticamente falando

A linguagem RubyA linguagem Ruby

http://www.ubuntu-sp.org/wp-content/uploads/2011/04/ruby.png

foi_inspirada_em = [

'Python',

'Perl',

'Smalltalk',

'Eiffel',

'Ada',

'Lisp'

]

Page 17: Ruby - praticamente falando

Quando? Onde? Quem? Por quê?Quando? Onde? Quem? Por quê?

Em 1995, no Japão, Yukihiro "Matz" Matsumoto queria uma linguagem de script poderosa, totalmente orientada a objetos e a pessoas.

Ruby era a pedra zodiacal de um amigo de Matz.

http://www.hephesto.com/agrega/wp-content/uploads/2008/11/yukihiro_matsumoto.jpg

Page 18: Ruby - praticamente falando

Bem depois, um framework web a colocou nos trilhosBem depois, um framework web a colocou nos trilhos

http://www.flickr.com/photos/shahrashoob/2036409933http://www.flickr.com/photos/shahrashoob/2036409933

Page 19: Ruby - praticamente falando

Seus tipos de dados são:Seus tipos de dados são:

1.class # Fixnum

10000000000.class # Bignum

1.0.class # Float

"palavra".class # String

:nome.class # Symbol

(1..10).class # Range

[1, 'dois'].class # Array

traduz = {'um' => 'one', 'dois' => 'two'}.class # Hash

/expressao/.class # Regexp

true.class # TrueClass

false.class # FalseClass

nil.class # NilClass

http://www.flickr.com/photos/shockcr/3753474120

Page 20: Ruby - praticamente falando

Mas no final, TUDO éMas no final, TUDO é

self.class # Object

1.class # Fixnum

1.class.superclass # Integer

1.class.superclass.superclass # Numeric

1.class.superclass.superclass.superclass # Object

http://www.flickr.com/photos/58782395@N03/5518992555

Page 21: Ruby - praticamente falando

VariáveisVariáveis

http://www.flickr.com/photos/beijos/2556560841

sou_local = 'meu escopo é local'

@sou_de_instancia = 'sirvo ao objeto instanciado'

@@tenho_classe = 'sirvo a minha classe'

Constante = 'devo ser constante, mas aviso se mudar'

$sou_global = 'sou globalizada e indesejada'

Page 22: Ruby - praticamente falando

NumericsNumerics

http://www.flickr.com/photos/dazbergman/4934851809

sou_inteiro = 101

tambem_sou_inteiro = -453

sou_big_inteiro = 2000000000

tambem_sou_um_big_inteiro = 2_000_000_000

sou_float = 1.25

continuo_sendo_float = 2_000_000_000.45

Page 23: Ruby - praticamente falando

StringsStrings

http://www.flickr.com/photos/claddaghofrome/175351981http://www.flickr.com/photos/claddaghofrome/175351981

'Quero saber quem fez essa bagunça?'

suspeito = 'Apolônio'

'Será que foi o ' + suspeito + '?'

'Mas o ' << suspeito << ' não é disso.'

“Tudo indica ter sido mesmo o #{suspeito}.”

'culpado! ' * 3

<<CONDENACAO

Se o #{suspeito} for condenado, sofrerá as consequências e passará um ano sem hamburguer e batata frita.

CONDENACAO

Page 24: Ruby - praticamente falando

SymbolsSymbols

http://www.flickr.com/photos/catandkitty/2644303771http://www.flickr.com/photos/catandkitty/2644303771

simbolo_nao_e = ['string', CONSTANTE=0, variavel=nil]

:simbolo_e_um_identificador_que_representa_ele_mesmo

Nome = “nome” # constantenome = “nome” # variável:nome # símbolo

# strings são mutáveis, assim como floats. Exemplo:'nome'.object_id # -606174638'nome'.object_id # -606183698

# symbols são únicos, assim como inteiros. Exemplo::nome.object_id # 166898:nome.object_id # 166898

Page 25: Ruby - praticamente falando

ColeçõesColeções

http://www.flickr.com/photos/jamessharpe/5158660756http://www.flickr.com/photos/jamessharpe/5158660756

arrayarray = [1, 'dois', 3, 'quatro']array[1]

# adiciono elementosfeira = []feira.push 'arroz'feira.push 'feijão'feira << 'morango'feira# retiro o último elementofeira.popfeira# retiro o primeiro elementofeira.shiftfeira

hashhash = {1=>'um', 2=>'dois'}hash[1]

cidades = { 'Belém'=>'PA', 'Recife'=>'PE'}cidades['Belém']

info = { :nome=>'Manoel Carlos', :email=>'[email protected]'}info[:email]info.keys, info.values

Page 26: Ruby - praticamente falando

RegexpRegexp

http://www.flickr.com/photos/otrojubilo/2226079728

# (=~) corresponde e (!~) não-corresponde

er = /^[0-9]/

'123' =~ er # 0

'123' !~ er # false

'abc' =~ er # nil

'abc' !~ er # true

'me acha'.index(/me/) # 0

'gato'.gsub(/g/,'p') # pato

comida = %w(açaí vatapá maniçoba feijoada tacacá)

comida.grep(/a$/) # maniçoba feijoada

Page 27: Ruby - praticamente falando

SeSe

http://www.flickr.com/photos/golbenge/5400710724

n1, n2 = 5, 10

if n1 > n2

puts "#{n1} é maior que #{n2}"

elsif n2 > n1

puts "#{n2} é maior que #{n1}"

else

puts 'Os números são iguais'

end

unless n1 > n2 # senão

puts "#{n2} é maior que #{n1}"

end

puts "#{n1} é " + (n1 % 2 == 0 ? 'par' : 'ímpar')

puts “só imprimo se a condição for verdadeira” if n1 > n2

Page 28: Ruby - praticamente falando

CasoCaso

http://www.flickr.com/photos/golbenge/5400710724

menu = :saldo

case menu

when :promocoes

puts 'nossas promoções'

when :creditos

puts 'inserir créditos'

when :saldo

puts 'consultar saldo'

else

puts 'ouça mais música'

end

opcao = 15

faixa =

case opcao

when 0..10

"de 0 a 10"

when 11..20

"de 11 a 20"

else

"não encontrada"

end

puts "Faixa #{faixa}"

Page 29: Ruby - praticamente falando

ForFor

http://www.flickr.com/photos/pelegrino/3957449915http://www.flickr.com/photos/pelegrino/3957449915

for r in (1..5)

puts r

end

for r in (1...5)

puts r

end

for a in ('a'..'f')

puts a

end

1.upto(5) do |u|

puts u

end

5.downto(1) {|d| puts d}

3.times {puts 'Tá safo!'}

Page 30: Ruby - praticamente falando

FaçaFaça

http://www.flickr.com/photos/pelegrino/3957449915http://www.flickr.com/photos/pelegrino/3957449915

w = 1

while w < 5 # enquanto

puts w

w += 1 # em Ruby não tem ++ nem --

end

u = 1

until u == 5 # até que

puts u

u += 1

end

Page 31: Ruby - praticamente falando

Blocos e ProcsBlocos e Procs

http://www.flickr.com/photos/lassochist/4013140613http://www.flickr.com/photos/lassochist/4013140613

fala = Proc.new {puts 'oi'}

fala.call

chama = Proc.new do

puts 'ei'

puts 'vem aqui!'

end

chama.call

despede = proc {puts 'tchau'}

despede.call

sauda = lambda {|nome| puts "Olá #{nome}"}

sauda.call 'Fábio'

Page 32: Ruby - praticamente falando

Blocos e IteradoresBlocos e Iteradores

http://www.flickr.com/photos/lassochist/4013140613http://www.flickr.com/photos/lassochist/4013140613

compras = ['arroz', 'feijão', 'açúcar']

compras.each do |item|

puts item

end

compras.each {|item| puts item}

documentos = {:rg=>'86474837', :cpf=>'3653364645'}

documentos.each {|chave, valor| puts "#{chave} = #{valor}"}

Page 33: Ruby - praticamente falando

MétodosMétodos

def grita puts 'TO GRITANDO!'endgrita

def soma(n1, n2) n1 + n2endsoma(5, 6)soma 7, 3

http://www.flickr.com/photos/olhardefotografas/3006021111http://www.flickr.com/photos/olhardefotografas/3006021111

def executo_bloco(n) yield(n)endexecuto_bloco(4) {|i| i * i}executo_bloco(4) {|i| i + i}

nome = 'Marta'

# (?) predicadosnome.include? 'M'nome.include? 'f'

# (!) destrutivosnome.upcase, nomenome.upcase!, nome

Page 34: Ruby - praticamente falando

Classes e herançaClasses e herança

http://www.flickr.com/photos/doobious/51242759

class Pessoa

def initialize(nome) # construtor

@nome = nome # de instância

end

def nome # get

@nome

end

def nome=(novo_nome) # set

@nome = novo_nome

end

end

class Homem < Pessoa

def initialize(nome)

super(nome)

end

end

# instanciando um objeto

fulano = Homem.new('Ambrósio')

fulano.nome

fulano.nome = 'Vanderlucio'

fulano.nome

Page 35: Ruby - praticamente falando

Metaprogramação e variáveis de classeMetaprogramação e variáveis de classe

http://www.flickr.com/photos/goda/2440513646

class Pessoa

attr_accessor :nome

@@pessoas = 0 # de classe

def initialize(nome)

@nome = nome

@@pessoas += 1

end

def Pessoa.qtde_pessoas

@@pessoas

end

end

class Homem < Pessoa

end

# instanciando objetos

fulano = Homem.new('Ambrósio')

sicrano = Homem.new('Mariano')

fulano.nome

sicrano.nome

Pessoa::qtde_pessoas

Page 36: Ruby - praticamente falando

Tipagem dinâmica e forteTipagem dinâmica e forte

http://www.flickr.com/photos/mermaid/78134957http://www.flickr.com/photos/mermaid/78134957

# posso ser o que eu quiser

variavel = 'sou uma string'

variavel = 10

# mas não posso abusar

valor1 = 100

valor2 = '200'

# soma = valor1 + valor2 # erro na certa!

soma = valor1 + valor2.to_i # agora funfa!

junta = valor1.to_s + valor2 # também funfa!

Page 37: Ruby - praticamente falando

Tipagem dinâmica e forteTipagem dinâmica e forte

http://www.flickr.com/photos/mermaid/78134957http://www.flickr.com/photos/mermaid/78134957

def calcular(a, b, c)

(a + b) * c

end

calcular(1, 2, 3)

calcular('mangas ', 'e uvas, ', 2)

calcular([1,2,3], [4,5,6], 2)

def calcular(a, b, c)

(a + b) * c

end

calcular(1, 2, 3)

calcular([1,2,3], [4,5,6], 2)

calcular('mangas ', 'e uvas, ', 3)

puts <<DUCK_TYPING

Se ele anda como um pato, nada como um pato e faz 'quá quá' como um pato, então ele é um pato.

DUCK_TYPING

Page 38: Ruby - praticamente falando

Açúcar Sintático (Legibilidade)Açúcar Sintático (Legibilidade)

http://www.flickr.com/photos/ronaldpeixoto/5203811885http://www.flickr.com/photos/ronaldpeixoto/5203811885

# quando você faz

calculo = 2 + 3

apelido = 'Farol'

class Mulher

attr_writer :nome

end

fulana = Mulher.new

fulana.nome = 'Ana'

# Ruby está fazendo

calculo = 2.+(3)

apelido = String.new('Farol')

class Mulher

def nome=(nome)

@nome=nome

end

end

fulana = Mulher.new

fulana.nome=('Ana')

Page 39: Ruby - praticamente falando

MódulosMódulos

http://www.flickr.com/photos/glitchpunk/5320924205

class Ave

def voar

'bate as asas'

end

end

sabia = Ave.new

sabia.voar

module Mamifero

def mergulhar

'prende a respiração'

end

module_function :mergulhar

public :mergulhar

end

Mamifero.mergulhar

class AveSelvagem < Ave

include Mamifero

end

pato = AveSelvagem.new

pato.voar

pato.mergulhar

# Mais um pouco de módulos

Math::PI

Math.sqrt(9)

Math.class # Module

Page 40: Ruby - praticamente falando

ExceçõesExceções

http://www.flickr.com/photos/32627348@N06/3633209399http://www.flickr.com/photos/32627348@N06/3633209399

valor1 = 1

valor2 = '2'

begin

puts valor1 + valor2

rescue TypeError => motivo

puts "Deu bronca! TyperError: #{motivo}"

ensure

puts "De qualquer forma, tô por aqui"

end

Page 41: Ruby - praticamente falando

Testes unitáriosTestes unitários

# calculadora.rb

class Calculadora

def soma(a, b)

a + b

end

def subtrai(a, b)

a - b

end

end

# teste_calculadora.rbrequire 'test/unit'require 'calculadora'

class TesteCalculadora < Test::Unit::TestCase def setup @calc = Calculadora.new end def test_soma assert_equal(4, @calc.soma(1, 3), "1 + 3 = 4") end def test_subtrai assert_equal(2, @calc.subtrai(5, 2), "5 - 2 = 3") end def teardown @calc = nil endend

http://www.flickr.com/photos/grantbw/2943151784http://www.flickr.com/photos/grantbw/2943151784

Page 42: Ruby - praticamente falando

irb (Ruby interativo)irb (Ruby interativo)

irb(main):001:0> numero = 10

=> 10

irb(main):002:0> if numero % 2 == 0

irb(main):003:1> puts 'par'

irb(main):004:1> else

irb(main):005:1* puts 'impar'

irb(main):006:1> end

par

=> nil

http://www.flickr.com/photos/webloes/468463423http://www.flickr.com/photos/webloes/468463423

Page 43: Ruby - praticamente falando

GemologiaGemologia

http://www.flickr.com/photos/rogerbarker/4942857592

=begin

É a especialidade da Geologia que estuda o caráter físico e químico dos materiais de valores gemológicos.

Fonte: http://pt.wikipedia.org

=end

material_gemologico_deve_ter = [

'Beleza',

'Raridade',

'Durabilidade'

]

Page 44: Ruby - praticamente falando

Gema: AmbiguidadesGema: Ambiguidades

Page 45: Ruby - praticamente falando

Botão ou gomoBotão ou gomo

http://www.flickr.com/photos/eduardo_cabral/4541045230

Page 46: Ruby - praticamente falando

Parte de um ovoParte de um ovo

http://www.flickr.com/photos/chrismferreira/3010064235

Page 47: Ruby - praticamente falando

Município da EspanhaMunicípio da Espanha

http://www.panoramio.com/photo/39548016

Page 48: Ruby - praticamente falando

Mineral utilizado em joalheriaMineral utilizado em joalheria

http://www.flickr.com/photos/raymond_li/3844312974http://www.flickr.com/photos/raymond_li/3844312974

Page 49: Ruby - praticamente falando

RubyGemsRubyGems

- Gerenciador de pacotes (programas e bibliotecas) do Ruby

- Pacote = Gema

- Gerencia dependências (similar ao apt-get do Debian)

- Fonte padrão das gemas: http://rubygems.org

Exemplos:

gem install rails

gem install mongoid

gem list

gem uninstall dbi

http://marcgrabanski.com/img/rubygems.png

Page 50: Ruby - praticamente falando

ReferênciasReferências

> Aprenda a programar (Chris Pine)

aprendaaprogramar.rubyonrails.pro.br

> Tutorial de Ruby (Eustáquio "TaQ" Rangel)

eustaquiorangel.com/downloads

> O (comovente) guia de Ruby do Why

why.nomedojogo.com

> The Book Of Ruby (Huw Collingbourne)

sapphiresteel.com/The-Book-Of-Ruby

http://www.flickr.com/photos/estopa/176637167http://www.flickr.com/photos/estopa/176637167

Page 51: Ruby - praticamente falando

VisiteVisite

> Site oficial com versão em português (de Portugal)

ruby-lang.org/pt

> Ruby Brasil

ruby-br.org

> Ruby Inside Brasil

rubyinside.com.br

> GURU-PA

groups.google.com/group/guru-pa

http://www.flickr.com/photos/a7design1/3961877456http://www.flickr.com/photos/a7design1/3961877456

Page 52: Ruby - praticamente falando

Mas afinal, a quem puts pertence?Mas afinal, a quem puts pertence?

Kernel.puts('Ele é um método do módulo Kernel do Ruby, assim como gets.')

Kernel.puts('Só confirmando que tudo em Ruby é')

Kernel.class # Module

Kernel.class.superclass # Object

http://www.flickr.com/photos/58782395@N03/5518992555

Page 53: Ruby - praticamente falando

Obrigado!Obrigado!

http://www.flickr.com/photos/bu7amd/3444535642http://www.flickr.com/photos/bu7amd/3444535642

puts 'A felicidade está na simplicidade.'

puts '#tasafoemacao'