Rubypara programadores PHP
PHPPerguntas iniciais• Quem programa em PHP?• Quem sabe o que é uma “variável variável”?• Quem sabe o que é “paamayim neku...
PHPHistória• Criada por Rasmus Lerdorf em 1994.• Objetivo: Fazer um contador para a página pessoal de Rasmus.• Originalmen...
RubyHistória• Criada por Yukihiro Matsumoto (Matz) em 1993.• Objetivo: Criar uma linguagem poderosa que tenha uma “versão ...
PHPVariáveis$number = 18;$string = “John”;$bool = true;$array = array(7,8,6,5);$hash = array(“foo” => “bar”);$obj = new Cl...
RubyVariáveisnumber = 18string = “John”another_string = %(The man said “Wow”)bool = truearray = [7,8,6,5];word_array = %w{...
PHPParadigma• Procedural com suporte a OO.$a = array(1,2,3);array_shift($a);=> 1array_pop($a);=> 3array_push($a, 4);=> [2,4]
RubyParadigma• Procedural, totalmente OO com classes (Smalltalk-like), um tanto funcional  com o conceito de blocos. Not H...
PHPTipagem• Dinâmica e fraca.10 + “10”;=> 20
RubyTipagem• Dinâmica e forte. (Aberta a mudanças.)10 + “10”=> TypeError: String cant be coerced into Fixnumclass Fixnum  ...
RubyTipagem• ...como???1 + 1=> 21.+(1)=> 21.send(‘+’, 1)=> 2# “Operações”? Métodos!
PHPFluxo• if, switch, ternário;if($i == $j){ ... }$i == $j ? ... : ...switch($i){  case(“valor”){    TODO  }}
RubyFluxo• if, unless ...if i == j  ...endunless cond  ...endputs “Maior” if age >= 18puts “Menor” unless user.adult?
RubyFluxo• ...case...# default usagecase hour  when 1: ...  when 2: ...end# with ranges!case hour  when 0..7, 19..23: puts...
RubyFluxo• ...case...# with regexescase date  when /d{2}-d{2}-d{4}/: ...  when /d{2}/d{2}/d{4}/: ...end# crie seu próprio ...
PHPIteradores• while, for, foreach;while($i < 10){ ... }for($i = 0; $i < length($clients); $i++){ ... }foreach($clients as...
RubyIteradores• for in, each, map, select, inject... enumeradores;5.times{ ... }[5,7,4].each{ ... }[1,2,3].map{|i| i + 1 }...
RubyIteradores / Blocos• crie seu próprio iterador:def hi_five  yield 1; yield 2; yield 3; yield 4; yield 5endhi_five{|i| ...
RubyBlocos• power to the people.File.open(“file”, “w”){|f| f.write(“Wow”) }File.each_line(“file”){|l| ... }Dir.glob(“*.png...
PHPOO• Herança comum, classes abstratas, interfaces. Como Java.
RubyOO• Classes e módulos.module Walker  def walk    ...  endend# módulo como “herança múltipla” ou “mixin”class Johny  in...
RubyOO• Classes e módulos.# módulo como “namescope”module Foo  class Bar    ...  endendvariable = Foo::Bar.new
PHPOO Dinâmico• __call: Chama métodos não existentes.• __get: Chama “atributos” não existentes.• __set: Chama ao tentar se...
RubyOO Dinâmico• method_missing: Tudo em Ruby são chamadas de métodos.obj.metodo # chama o método “metodo”obj.atributo # c...
RubyOO Dinâmico• inherited...# inheritedclass Foo  def self.inherited(subklass)    ...  endendclass Bar < Fooend
RubyOO Dinâmico• included...# includedmodule Foo  def included(klass)    ...  endendclass Bar  include Fooend
RubyOO Dinâmico• class_eval, class_exec....class Foo; endFoo.class_eval(“def bar() ... end”)Foo.class_exec{ def bar() ... ...
RubyOO Dinâmico• instance_eval, instance_exec, define_method....class Foo  define_method(:bar) { ... }  instance_exec{ def ...
RubyOO Dinâmico• attr_(reader|accessor|writer)class Foo  attr_accessor :barend# same as...class Foo  def bar() @bar end  d...
RubyOO Dinâmico• nesting, alias, autoload, class_variable_(set|get|defined?), const_(get|set|  defined?|missing), constanst,...
PHPComunidade• PECL, PEAR. ... PHP Classes?
RubyComunidade• RubyGemsgem install bundler # install gembundler gem my_gem # create my own gemcd my_gemrake release # tha...
RubyComunidade• GitHub
Ruby para-programadores-php
Upcoming SlideShare
Loading in …5
×

Ruby para-programadores-php

423 views

Published on

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
423
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Ruby para-programadores-php

    1. 1. Rubypara programadores PHP
    2. 2. PHPPerguntas iniciais• Quem programa em PHP?• Quem sabe o que é uma “variável variável”?• Quem sabe o que é “paamayim nekudotayim”?• Quem usa GOTO?
    3. 3. PHPHistó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. 4. RubyHistó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. Thats 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. 5. PHPVariáveis$number = 18;$string = “John”;$bool = true;$array = array(7,8,6,5);$hash = array(“foo” => “bar”);$obj = new Class(“param”);
    6. 6. RubyVariáveisnumber = 18string = “John”another_string = %(The man said “Wow”)bool = truearray = [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 # rangecep = /^d{5}-d{3}$/ # regular expression
    7. 7. PHPParadigma• Procedural com suporte a OO.$a = array(1,2,3);array_shift($a);=> 1array_pop($a);=> 3array_push($a, 4);=> [2,4]
    8. 8. RubyParadigma• Procedural, totalmente OO com classes (Smalltalk-like), um tanto funcional com o conceito de blocos. Not Haskell thought.a = [1,2,3]a.shift=> 1a.pop=> 3a.push(4)=> [2,4]
    9. 9. PHPTipagem• Dinâmica e fraca.10 + “10”;=> 20
    10. 10. RubyTipagem• Dinâmica e forte. (Aberta a mudanças.)10 + “10”=> TypeError: String cant be coerced into Fixnumclass Fixnum alias :old_sum :+ def + s old_sum s.to_i endend10 + “10”=> 20
    11. 11. RubyTipagem• ...como???1 + 1=> 21.+(1)=> 21.send(‘+’, 1)=> 2# “Operações”? Métodos!
    12. 12. PHPFluxo• if, switch, ternário;if($i == $j){ ... }$i == $j ? ... : ...switch($i){ case(“valor”){ TODO }}
    13. 13. RubyFluxo• if, unless ...if i == j ...endunless cond ...endputs “Maior” if age >= 18puts “Menor” unless user.adult?
    14. 14. RubyFluxo• ...case...# default usagecase 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. 15. RubyFluxo• ...case...# with regexescase date when /d{2}-d{2}-d{4}/: ... when /d{2}/d{2}/d{4}/: ...end# crie seu próprio caseclass MyClass def === ... endend
    16. 16. PHPIteradores• while, for, foreach;while($i < 10){ ... }for($i = 0; $i < length($clients); $i++){ ... }foreach($clients as $client){ ... }
    17. 17. RubyIteradores• 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. 18. RubyIteradores / Blocos• crie seu próprio iterador:def hi_five yield 1; yield 2; yield 3; yield 4; yield 5endhi_five{|i| ... }
    19. 19. RubyBlocos• 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 “/” { ... } # sinatrap{ span “Ruby is ”; strong “cool” } # markaby
    20. 20. PHPOO• Herança comum, classes abstratas, interfaces. Como Java.
    21. 21. RubyOO• Classes e módulos.module Walker def walk ... endend# módulo como “herança múltipla” ou “mixin”class Johny include Walkerend
    22. 22. RubyOO• Classes e módulos.# módulo como “namescope”module Foo class Bar ... endendvariable = Foo::Bar.new
    23. 23. PHPOO 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. 24. RubyOO 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 ... endend
    25. 25. RubyOO Dinâmico• inherited...# inheritedclass Foo def self.inherited(subklass) ... endendclass Bar < Fooend
    26. 26. RubyOO Dinâmico• included...# includedmodule Foo def included(klass) ... endendclass Bar include Fooend
    27. 27. RubyOO Dinâmico• class_eval, class_exec....class Foo; endFoo.class_eval(“def bar() ... end”)Foo.class_exec{ def bar() ... end }Foo.bar # worksFoo.baz # works
    28. 28. RubyOO Dinâmico• instance_eval, instance_exec, define_method....class Foo define_method(:bar) { ... } instance_exec{ def baz(); ... end } instance_eval(“def qux(); ... end”)endFoo.new.bar # worksFoo.new.baz # worksFoo.new.qux # works
    29. 29. RubyOO Dinâmico• attr_(reader|accessor|writer)class Foo attr_accessor :barend# same as...class Foo def bar() @bar end def bar= val @bar = val endend
    30. 30. RubyOO 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. 31. PHPComunidade• PECL, PEAR. ... PHP Classes?
    32. 32. RubyComunidade• RubyGemsgem install bundler # install gembundler gem my_gem # create my own gemcd my_gemrake release # that’s all folks#alsobundler install # install all dependencies for a project
    33. 33. RubyComunidade• GitHub

    ×