Ruby – praticamente falandoRuby – praticamente falando
http://www.flickr.com/photos/afternoon_sunlight/135751440http://www.flickr.com/photos/afternoon_sunlight/135751440
Quem eu souQuem eu sou
quem = {
:nome => 'Luiz Sanches',
:link => 'about.me/luizsanches'
}
puts 'Apenas mais um #tasafoemacao'
http://www.flickr.com/photos/brunodaher/4491575723http://www.flickr.com/photos/brunodaher/4491575723
Mais uma parceria!Mais uma parceria!
Rubi: AmbiguidadesRubi: Ambiguidades
http://portaldatvaudiencia.files.wordpress.com/2010/01/rubis.jpghttp://portaldatvaudiencia.files.wordpress.com/2010/01/rubis.jpg
NovelaNovela
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
Pedra preciosa vermelhaPedra preciosa vermelha
http://www.gemsoul.com/images/articles/madagascar-ruby.jpg
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
Usamos a linguagem paraUsamos a linguagem para
http://www.flickr.com/photos/grafayiti/4767764752http://www.flickr.com/photos/grafayiti/4767764752
ComunicarComunicar
http://www.flickr.com/photos/edwardjohnphotography/2522734815http://www.flickr.com/photos/edwardjohnphotography/2522734815
SentirSentir
http://www.flickr.com/photos/ahmadhakym/2459867386http://www.flickr.com/photos/ahmadhakym/2459867386
EnvolverEnvolver
http://www.flickr.com/photos/nunoduarte/2801870408http://www.flickr.com/photos/nunoduarte/2801870408
CriarCriar
http://www.flickr.com/photos/ochblog/379675238
ConectarConectar
http://www.flickr.com/photos/theboywholaughs/3219937865
ExpressarExpressar
http://www.flickr.com/photos/cubagallery/4361297705http://www.flickr.com/photos/cubagallery/4361297705
Enfim, viver!Enfim, viver!
http://www.flickr.com/photos/thinkoutsidethebox2008/5113401458
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'
]
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
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
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
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
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'
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
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
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” # constante
nome = “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
ColeçõesColeções
http://www.flickr.com/photos/jamessharpe/5158660756http://www.flickr.com/photos/jamessharpe/5158660756
arrayarray = [ 1, 'dois', 3, 'quatro' ]
array[1]
# adiciono elementos
feira = [ ]
feira.push 'arroz'
feira.push 'feijão'
feira << 'morango'
feira
# retiro o último elemento
feira.pop
feira
# retiro o primeiro elemento
feira.shift
feira
hashhash = { 1 => 'um', 2 => 'dois' }
hash[1]
cidades = {
'Belém' => 'PA',
'Recife' => 'PE'
}
cidades[ 'Belém' ]
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
comida = %w(açaí vatapá maniçoba feijoada tacacá)
comida.grep(/a$/) # maniçoba feijoada
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
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
ForFor
http://www.flickr.com/photos/pelegrino/3957449915http://www.flickr.com/photos/pelegrino/3957449915
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!' }
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
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}"}
MétodosMétodos
def grita
puts 'TO GRITANDO!'
end
grita
def soma(n1, n2)
n1 + n2
end
soma(5, 6)
soma 7, 3
http://www.flickr.com/photos/olhardefotografas/3006021111http://www.flickr.com/photos/olhardefotografas/3006021111
def executo_bloco(n)
yield(n)
end
executo_bloco(4) {|i| i * i}
executo_bloco(4) {|i| i + i}
nome = 'Marta'
# (?) predicados
nome.include? 'M'
nome.include? 'f'
# (!) destrutivos
nome.upcase, nome
nome.upcase!, nome
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
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!
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')
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
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
Gema: AmbiguidadesGema: Ambiguidades
Botão ou gomoBotão ou gomo
http://www.flickr.com/photos/eduardo_cabral/4541045230
Parte de um ovoParte de um ovo
http://www.flickr.com/photos/chrismferreira/3010064235
Município da EspanhaMunicípio da Espanha
http://www.panoramio.com/photo/39548016
Mineral utilizado em joalheriaMineral utilizado em joalheria
http://www.flickr.com/photos/raymond_li/3844312974http://www.flickr.com/photos/raymond_li/3844312974
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
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
VisiteVisite
> Site oficial com versão em português (de Portugal)
ruby-lang.org/pt
> Ruby Brasil
ruby-br.org
> GURU-PA
guru-pa.blogspot.com
http://www.flickr.com/photos/a7design1/3961877456http://www.flickr.com/photos/a7design1/3961877456
Obrigado!Obrigado!
http://www.flickr.com/photos/bu7amd/3444535642http://www.flickr.com/photos/bu7amd/3444535642
> slideshare.net/luizsanches/ruby-praticamente-falando
> github.com/luizsanches/ruby-praticamente-falando
“A felicidade está na simplicidade.”
#tasafoemacao

Ruby - praticamente falando