SlideShare uma empresa Scribd logo
1 de 34
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

Mais procurados

Começando com Ruby - III SEICOM
Começando com Ruby - III SEICOMComeçando com Ruby - III SEICOM
Começando com Ruby - III SEICOMKenner Kliemann
 
UPF Senainfo - Passo Fundo-RS
UPF Senainfo - Passo Fundo-RSUPF Senainfo - Passo Fundo-RS
UPF Senainfo - Passo Fundo-RSFabio Akita
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 
Construindo um Google Pyrate
Construindo um Google PyrateConstruindo um Google Pyrate
Construindo um Google PyrateRoselma Mendes
 
JavaScript "for dummies"
JavaScript "for dummies"JavaScript "for dummies"
JavaScript "for dummies"Murilo Beltrame
 
Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e DiversãoJulio Monteiro
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It YourselfBruno Nascimento
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On RailsAlberto Leal
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 

Mais procurados (18)

Começando com ruby
Começando com rubyComeçando com ruby
Começando com ruby
 
Começando com Ruby - III SEICOM
Começando com Ruby - III SEICOMComeçando com Ruby - III SEICOM
Começando com Ruby - III SEICOM
 
UPF Senainfo - Passo Fundo-RS
UPF Senainfo - Passo Fundo-RSUPF Senainfo - Passo Fundo-RS
UPF Senainfo - Passo Fundo-RS
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Minicurso Ruby on Rails
Minicurso Ruby on RailsMinicurso Ruby on Rails
Minicurso Ruby on Rails
 
A Linguagem Ruby
A Linguagem RubyA Linguagem Ruby
A Linguagem Ruby
 
O mundo visto de dentro do Ruby
O mundo visto de dentro do RubyO mundo visto de dentro do Ruby
O mundo visto de dentro do Ruby
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
Construindo um Google Pyrate
Construindo um Google PyrateConstruindo um Google Pyrate
Construindo um Google Pyrate
 
JavaScript "for dummies"
JavaScript "for dummies"JavaScript "for dummies"
JavaScript "for dummies"
 
Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e Diversão
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On Rails
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 

Destaque

Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHPJuan Maiz
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-phpJuan Maiz
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agileJuan Maiz
 
SaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.brSaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.brJuan Maiz
 
Reasoning about Code with React
Reasoning about Code with ReactReasoning about Code with React
Reasoning about Code with ReactJuan Maiz
 

Destaque (7)

Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
 
Tree top
Tree topTree top
Tree top
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-php
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agile
 
SaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.brSaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.br
 
Reasoning about Code with React
Reasoning about Code with ReactReasoning about Code with React
Reasoning about Code with React
 
Saas
SaasSaas
Saas
 

Semelhante a Ruby para-programadores-php

Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPJonata Weber
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaJonata Weber
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
Crash Course Ruby & Rails
Crash Course Ruby & RailsCrash Course Ruby & Rails
Crash Course Ruby & RailsFrevo on Rails
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4javamanrj
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHPAugusto das Neves
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptPedro Sousa
 

Semelhante a Ruby para-programadores-php (20)

Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Ruby
RubyRuby
Ruby
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Crash Course Ruby & Rails
Crash Course Ruby & RailsCrash Course Ruby & Rails
Crash Course Ruby & Rails
 
Php
PhpPhp
Php
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Aula 1
Aula 1Aula 1
Aula 1
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-pt
 
Ruby learning
Ruby learningRuby learning
Ruby learning
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 

Último

Apresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfApresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfCarlos Gomes
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfRodolpho Concurde
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)Alessandro Almeida
 
Certificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfCertificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfLarissa Souza
 
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfConcurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfGuilhermeRodrigues896381
 

Último (6)

Apresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfApresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdf
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
Certificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfCertificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdf
 
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfConcurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
 

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

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n