SlideShare uma empresa Scribd logo
Ruby
para programadores PHP
PHP

Perguntas iniciais

• Quem programa em PHP?


• Quem sabe o que é uma “variável variável”?


• Quem sabe o que é “paamayim nekudotayim”?


• Quem usa GOTO?
PHP

História

• Criada por Rasmus Lerdorf em 1994.


• Objetivo: Fazer um contador para a página pessoal de Rasmus.


• Originalmente era apenas uma biblioteca Perl.


• PHP3 escrito por Andi Gutmans e Zeev Suraski (Zend) em 1997/98
Ruby

História

• Criada por Yukihiro Matsumoto (Matz) em 1993.


• Objetivo: Criar uma linguagem poderosa que tenha uma “versão simplificada”
  de programação funcional com ótima OO.


• Matz: “I wanted a scripting language that was more powerful than Perl, and
  more object-oriented than Python. That's why I decided to design my own
  language”


• Matz: “I hope to see Ruby help every programmer in the world to be
  productive, and to enjoy programming, and to be happy. That is the primary
  purpose of Ruby language.”
PHP

Variáveis

$number = 18;
$string = “John”;
$bool = true;
$array = array(7,8,6,5);
$hash = array(“foo” => “bar”);
$obj = new Class(“param”);
Ruby

Variáveis

number = 18
string = “John”
another_string = %(The man said “Wow”)
bool = true
array = [7,8,6,5];
word_array = %w{hello ruby world}
hash = {:foo => ‘bar’} # new_hash = {foo:‘bar’}
obj = Class.new(“param”)

# news!

ages = 18..45 # range
cep = /^d{5}-d{3}$/ # regular expression
PHP

Paradigma

• Procedural com suporte a OO.


$a = array(1,2,3);
array_shift($a);
=> 1
array_pop($a);
=> 3
array_push($a, 4);
=> [2,4]
Ruby

Paradigma

• Procedural, totalmente OO com classes (Smalltalk-like), um tanto funcional
  com o conceito de blocos. Not Haskell thought.

a = [1,2,3]
a.shift
=> 1
a.pop
=> 3
a.push(4)
=> [2,4]
PHP

Tipagem

• Dinâmica e fraca.

10 + “10”;
=> 20
Ruby

Tipagem

• Dinâmica e forte. (Aberta a mudanças.)

10 + “10”
=> TypeError: String can't be coerced into Fixnum

class Fixnum
  alias :old_sum :+
  def + s
    old_sum s.to_i
  end
end
10 + “10”
=> 20
Ruby

Tipagem

• ...como???

1 + 1
=> 2

1.+(1)
=> 2

1.send(‘+’, 1)
=> 2

# “Operações”? Métodos!
PHP

Fluxo

• if, switch, ternário;

if($i == $j){ ... }

$i == $j ? ... : ...

switch($i){
  case(“valor”){
    TODO
  }
}
Ruby

Fluxo

• if, unless ...

if i == j
  ...
end

unless cond
  ...
end

puts “Maior” if age >= 18

puts “Menor” unless user.adult?
Ruby

Fluxo

• ...case...

# default usage
case hour
  when 1: ...
  when 2: ...
end

# with ranges!
case hour
  when 0..7, 19..23: puts “Good nite”
  when 8..12: puts “Good mornin’”
end
Ruby

Fluxo

• ...case...

# with regexes
case date
  when /d{2}-d{2}-d{4}/: ...
  when /d{2}/d{2}/d{4}/: ...
end

# crie seu próprio case
class MyClass
  def ===
    ...
  end
end
PHP

Iteradores

• while, for, foreach;

while($i < 10){ ... }

for($i = 0; $i < length($clients); $i++){ ... }

foreach($clients as $client){ ... }
Ruby

Iteradores

• for in, each, map, select, inject... enumeradores;

5.times{ ... }

[5,7,4].each{ ... }

[1,2,3].map{|i| i + 1 }
=> [2,3,4]

[16,19,22].select{|i| i >= 18 }
=> [19,22]

[5,7,8].inject{|s,i| s + i }
=> 20
Ruby

Iteradores / Blocos

• crie seu próprio iterador:

def hi_five
  yield 1; yield 2; yield 3; yield 4; yield 5
end

hi_five{|i| ... }
Ruby

Blocos

• power to the people.

File.open(“file”, “w”){|f| f.write(“Wow”) }

File.each_line(“file”){|l| ... }

Dir.glob(“*.png”){ ... }

“Ruby para programadores PHP”.gsub(/PHP/){|m| ... }

get “/” { ... } # sinatra

p{ span “Ruby is ”; strong “cool”   } # markaby
PHP

OO

• Herança comum, classes abstratas, interfaces. Como Java.
Ruby

OO

• Classes e módulos.

module Walker
  def walk
    ...
  end
end

# módulo como “herança múltipla” ou “mixin”
class Johny
  include Walker
end
Ruby

OO

• Classes e módulos.

# módulo como “namescope”
module Foo
  class Bar
    ...
  end
end



variable = Foo::Bar.new
PHP

OO Dinâmico

• __call: Chama métodos não existentes.


• __get: Chama “atributos” não existentes.


• __set: Chama ao tentar setar atributos não existentes;


$obj->metodo();

$obj->atributo;

$obj->atributo = “valor”;
Ruby

OO Dinâmico

• method_missing: Tudo em Ruby são chamadas de métodos.

obj.metodo # chama o método “metodo”

obj.atributo # chama o método “atributo”

obj.atributo = “valor” # chama o método “atributo=”

class Foo
  def method_missing m, *args
    ...
  end
end
Ruby

OO Dinâmico

• inherited...

# inherited
class Foo
  def self.inherited(subklass)
    ...
  end
end

class Bar < Foo
end
Ruby

OO Dinâmico

• included...

# included
module Foo
  def included(klass)
    ...
  end
end

class Bar
  include Foo
end
Ruby

OO Dinâmico

• class_eval, class_exec....

class Foo; end

Foo.class_eval(“def bar() ... end”)
Foo.class_exec{ def bar() ... end }

Foo.bar # works
Foo.baz # works
Ruby

OO Dinâmico

• instance_eval, instance_exec, define_method....

class Foo
  define_method(:bar) { ... }
  instance_exec{ def baz(); ... end }
  instance_eval(“def qux(); ... end”)
end



Foo.new.bar # works
Foo.new.baz # works
Foo.new.qux # works
Ruby

OO Dinâmico

• attr_(reader|accessor|writer)

class Foo
  attr_accessor :bar
end

# same as...
class Foo
  def bar() @bar end
  def bar= val
    @bar = val
  end
end
Ruby

OO Dinâmico

• nesting, alias, autoload, class_variable_(set|get|defined?), const_(get|set|
  defined?|missing), constanst, instance_(method|methods), method_(added|
  defined?|removed|undefined), remove_(class_variable|const|method),
  undef_method, and so much more...
PHP

Comunidade

• PECL, PEAR. ... PHP Classes?
Ruby

Comunidade

• RubyGems

gem install bundler # install gem

bundler gem my_gem # create my own gem

cd my_gem

rake release # that’s all folks

#also
bundler install # install all dependencies for a project
Ruby

Comunidade

• GitHub
Ruby para-programadores-php

Mais conteúdo relacionado

PDF
Introdução à programação em Ruby
PDF
Introdução a Linguagem de Programação Ruby
PDF
Apresentação ruby + rails 2014
PDF
Paradigmas do Ruby
PDF
Palestra Ruby
PDF
Apresentação ruby + rails
PPT
Ruby, Simples e Expressivo
Introdução à programação em Ruby
Introdução a Linguagem de Programação Ruby
Apresentação ruby + rails 2014
Paradigmas do Ruby
Palestra Ruby
Apresentação ruby + rails
Ruby, Simples e Expressivo

Mais procurados (18)

PDF
Começando com ruby
PDF
Começando com Ruby - III SEICOM
PDF
UPF Senainfo - Passo Fundo-RS
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
KEY
Python, a arma secreta do Google
PDF
Minicurso Ruby on Rails
PPT
A Linguagem Ruby
PDF
O mundo visto de dentro do Ruby
PDF
Minicurso de Rails - WTISC 2014
PPT
Apresentação Ruby no Dojo da UFBA
PDF
Introdução a linguagem Python
PDF
Ruby and Rails intro
ODP
Construindo um Google Pyrate
PPTX
JavaScript "for dummies"
PPT
Ruby, Rails e Diversão
PDF
Arduino e Python: Do It Yourself
PPT
Prazer,Ruby On Rails
PPTX
Palestra Apresentando Python e Suas Aplicações
Começando com ruby
Começando com Ruby - III SEICOM
UPF Senainfo - Passo Fundo-RS
Palestra Desenvolvimento Ágil para Web com ROR UVA
Python, a arma secreta do Google
Minicurso Ruby on Rails
A Linguagem Ruby
O mundo visto de dentro do Ruby
Minicurso de Rails - WTISC 2014
Apresentação Ruby no Dojo da UFBA
Introdução a linguagem Python
Ruby and Rails intro
Construindo um Google Pyrate
JavaScript "for dummies"
Ruby, Rails e Diversão
Arduino e Python: Do It Yourself
Prazer,Ruby On Rails
Palestra Apresentando Python e Suas Aplicações
Anúncio

Destaque (7)

KEY
Ruby para programadores PHP
PDF
Tree top
PDF
Ruby para-programadores-php
PPT
rails_and_agile
KEY
SaaS - RubyMastersConf.com.br
PDF
Reasoning about Code with React
PDF
Saas
Ruby para programadores PHP
Tree top
Ruby para-programadores-php
rails_and_agile
SaaS - RubyMastersConf.com.br
Reasoning about Code with React
Saas
Anúncio

Semelhante a Ruby para-programadores-php (20)

PPTX
Curso ruby on rails
PDF
Introdução a ruby
ODP
Curso Ruby
PDF
Aprendendo ruby
PDF
Introdução a Linguagem Ruby
PDF
Ruby com Singleton class, Metaprogramação e muito mais
PDF
Curso de introdução ao ruby
PPT
Aula 1
PDF
Conhecendo Ruby on Rails
PDF
Workshop Ruby on Rails dia 1 ruby-pt
PPTX
Trabalho sobre Ruby(Linguagem de programação )
PDF
Ruby - Criando código para máquinas e humanos
PDF
Introdução à Linguagem Ruby
PDF
Esta começando a programar para a web? Então começe com Rails
PPTX
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
PDF
Ruby, Rails e Diversão (Campus Party Brasil 2009)
PDF
Crash Course Ruby & Rails
PPTX
PDF
Ruby
PPTX
Ruby (1)
Curso ruby on rails
Introdução a ruby
Curso Ruby
Aprendendo ruby
Introdução a Linguagem Ruby
Ruby com Singleton class, Metaprogramação e muito mais
Curso de introdução ao ruby
Aula 1
Conhecendo Ruby on Rails
Workshop Ruby on Rails dia 1 ruby-pt
Trabalho sobre Ruby(Linguagem de programação )
Ruby - Criando código para máquinas e humanos
Introdução à Linguagem Ruby
Esta começando a programar para a web? Então começe com Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Crash Course Ruby & Rails
Ruby
Ruby (1)

Último (19)

PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Processos na gestão de transportes, TM100 Col18
Apple Pippin Uma breve introdução. - David Glotz
COBITxITIL-Entenda as diferença em uso governança TI
Custos e liquidação no SAP Transportation Management, TM130 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula 18 - Manipulacao De Arquivos python
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula04-Academia Heri- Tecnologia Geral 2025
Otimizador de planejamento e execução no SAP Transportation Management, TM120...

Ruby para-programadores-php

  • 2. PHP Perguntas iniciais • Quem programa em PHP? • Quem sabe o que é uma “variável variável”? • Quem sabe o que é “paamayim nekudotayim”? • Quem usa GOTO?
  • 3. PHP História • Criada por Rasmus Lerdorf em 1994. • Objetivo: Fazer um contador para a página pessoal de Rasmus. • Originalmente era apenas uma biblioteca Perl. • PHP3 escrito por Andi Gutmans e Zeev Suraski (Zend) em 1997/98
  • 4. Ruby História • Criada por Yukihiro Matsumoto (Matz) em 1993. • Objetivo: Criar uma linguagem poderosa que tenha uma “versão simplificada” de programação funcional com ótima OO. • Matz: “I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python. That's why I decided to design my own language” • Matz: “I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy. That is the primary purpose of Ruby language.”
  • 5. PHP Variáveis $number = 18; $string = “John”; $bool = true; $array = array(7,8,6,5); $hash = array(“foo” => “bar”); $obj = new Class(“param”);
  • 6. Ruby Variáveis number = 18 string = “John” another_string = %(The man said “Wow”) bool = true array = [7,8,6,5]; word_array = %w{hello ruby world} hash = {:foo => ‘bar’} # new_hash = {foo:‘bar’} obj = Class.new(“param”) # news! ages = 18..45 # range cep = /^d{5}-d{3}$/ # regular expression
  • 7. PHP Paradigma • Procedural com suporte a OO. $a = array(1,2,3); array_shift($a); => 1 array_pop($a); => 3 array_push($a, 4); => [2,4]
  • 8. Ruby Paradigma • Procedural, totalmente OO com classes (Smalltalk-like), um tanto funcional com o conceito de blocos. Not Haskell thought. a = [1,2,3] a.shift => 1 a.pop => 3 a.push(4) => [2,4]
  • 9. PHP Tipagem • Dinâmica e fraca. 10 + “10”; => 20
  • 10. Ruby Tipagem • Dinâmica e forte. (Aberta a mudanças.) 10 + “10” => TypeError: String can't be coerced into Fixnum class Fixnum alias :old_sum :+ def + s old_sum s.to_i end end 10 + “10” => 20
  • 11. Ruby Tipagem • ...como??? 1 + 1 => 2 1.+(1) => 2 1.send(‘+’, 1) => 2 # “Operações”? Métodos!
  • 12. PHP Fluxo • if, switch, ternário; if($i == $j){ ... } $i == $j ? ... : ... switch($i){ case(“valor”){ TODO } }
  • 13. Ruby Fluxo • if, unless ... if i == j ... end unless cond ... end puts “Maior” if age >= 18 puts “Menor” unless user.adult?
  • 14. Ruby Fluxo • ...case... # default usage case hour when 1: ... when 2: ... end # with ranges! case hour when 0..7, 19..23: puts “Good nite” when 8..12: puts “Good mornin’” end
  • 15. Ruby Fluxo • ...case... # with regexes case date when /d{2}-d{2}-d{4}/: ... when /d{2}/d{2}/d{4}/: ... end # crie seu próprio case class MyClass def === ... end end
  • 16. PHP Iteradores • while, for, foreach; while($i < 10){ ... } for($i = 0; $i < length($clients); $i++){ ... } foreach($clients as $client){ ... }
  • 17. Ruby Iteradores • for in, each, map, select, inject... enumeradores; 5.times{ ... } [5,7,4].each{ ... } [1,2,3].map{|i| i + 1 } => [2,3,4] [16,19,22].select{|i| i >= 18 } => [19,22] [5,7,8].inject{|s,i| s + i } => 20
  • 18. Ruby Iteradores / Blocos • crie seu próprio iterador: def hi_five yield 1; yield 2; yield 3; yield 4; yield 5 end hi_five{|i| ... }
  • 19. Ruby Blocos • power to the people. File.open(“file”, “w”){|f| f.write(“Wow”) } File.each_line(“file”){|l| ... } Dir.glob(“*.png”){ ... } “Ruby para programadores PHP”.gsub(/PHP/){|m| ... } get “/” { ... } # sinatra p{ span “Ruby is ”; strong “cool” } # markaby
  • 20. PHP OO • Herança comum, classes abstratas, interfaces. Como Java.
  • 21. Ruby OO • Classes e módulos. module Walker def walk ... end end # módulo como “herança múltipla” ou “mixin” class Johny include Walker end
  • 22. Ruby OO • Classes e módulos. # módulo como “namescope” module Foo class Bar ... end end variable = Foo::Bar.new
  • 23. PHP OO Dinâmico • __call: Chama métodos não existentes. • __get: Chama “atributos” não existentes. • __set: Chama ao tentar setar atributos não existentes; $obj->metodo(); $obj->atributo; $obj->atributo = “valor”;
  • 24. Ruby OO Dinâmico • method_missing: Tudo em Ruby são chamadas de métodos. obj.metodo # chama o método “metodo” obj.atributo # chama o método “atributo” obj.atributo = “valor” # chama o método “atributo=” class Foo def method_missing m, *args ... end end
  • 25. Ruby OO Dinâmico • inherited... # inherited class Foo def self.inherited(subklass) ... end end class Bar < Foo end
  • 26. Ruby OO Dinâmico • included... # included module Foo def included(klass) ... end end class Bar include Foo end
  • 27. Ruby OO Dinâmico • class_eval, class_exec.... class Foo; end Foo.class_eval(“def bar() ... end”) Foo.class_exec{ def bar() ... end } Foo.bar # works Foo.baz # works
  • 28. Ruby OO Dinâmico • instance_eval, instance_exec, define_method.... class Foo define_method(:bar) { ... } instance_exec{ def baz(); ... end } instance_eval(“def qux(); ... end”) end Foo.new.bar # works Foo.new.baz # works Foo.new.qux # works
  • 29. Ruby OO Dinâmico • attr_(reader|accessor|writer) class Foo attr_accessor :bar end # same as... class Foo def bar() @bar end def bar= val @bar = val end end
  • 30. Ruby OO Dinâmico • nesting, alias, autoload, class_variable_(set|get|defined?), const_(get|set| defined?|missing), constanst, instance_(method|methods), method_(added| defined?|removed|undefined), remove_(class_variable|const|method), undef_method, and so much more...
  • 31. PHP Comunidade • PECL, PEAR. ... PHP Classes?
  • 32. Ruby Comunidade • RubyGems gem install bundler # install gem bundler gem my_gem # create my own gem cd my_gem rake release # that’s all folks #also bundler install # install all dependencies for a project

Notas do Editor