Ruby       para programadores PHPMonday, April 25, 2011
PHP       História       • Criada por Rasmus Lerdorf em 1994.       • Objetivo: Fazer um contador para a página pessoal de...
Ruby       História       • Criada por Yukihiro Matsumoto (Matz) em 1993.       • Objetivo: Criar uma linguagem poderosa q...
PHP       Variáveis       $number = 18;       $string = “John”;       $bool = true;       $array = array(7,8,6,5);       $...
Ruby       Variáveis       number = 18       string = “John”       another_string = %(The man said “Wow”)       bool = tru...
PHP       Paradigma       • Procedural com suporte a OO.       $a = array(1,2,3);       array_shift($a);       => 1       ...
Ruby       Paradigma       • Procedural, totalmente OO com classes (Smalltalk-like), um tanto funcional         com o conc...
PHP       Tipagem       • Dinâmica e fraca.       10 + “10”;       => 20Monday, April 25, 2011
Ruby       Tipagem       • Dinâmica e forte. (Aberta a mudanças.)       10 + “10”       => TypeError: String cant be coerc...
Ruby       Tipagem       • ...como???       1 + 1       => 2       1.+(1)       => 2       1.send(‘+’, 1)       => 2      ...
PHP       Fluxo       • if, switch, ternário;       if($i == $j){ ... }       $i == $j ? ... : ...       switch($i){      ...
Ruby       Fluxo       • if, unless ...       if i == j         ...       end       unless cond         ...       end     ...
Ruby       Fluxo       • ...case...       # default usage       case hour         when 1: ...         when 2: ...       en...
Ruby       Fluxo       • ...case...       # with regexes       case date         when /d{2}-d{2}-d{4}/: ...         when /...
PHP       Iteradores       • while, for, foreach;       while($i < 10){ ... }       for($i = 0; $i < length($clients); $i+...
Ruby       Iteradores       • for in, each, map, select, inject... enumeradores;       5.times{ ... }       [5,7,4].each{ ...
Ruby       Iteradores / Blocos       • crie seu próprio iterador:       def hi_five         yield 1; yield 2; yield 3; yie...
Ruby       Blocos       • power to the people.       File.open(“file”, “w”){|f| f.write(“Wow”) }       File.each_line(“fil...
PHP       OO       • Herança comum, classes abstratas, interfaces. Como Java.Monday, April 25, 2011
Ruby       OO       • Classes e módulos.       module Walker         def walk           ...         end       end       # ...
Ruby       OO       • Classes e módulos.       # módulo como “namescope”       module Foo         class Bar           ... ...
PHP       OO Dinâmico       • __call: Chama métodos não existentes.       • __get: Chama “atributos” não existentes.      ...
Ruby       OO Dinâmico       • method_missing: Tudo em Ruby são chamadas de métodos.       obj.metodo # chama o método “me...
Ruby       OO Dinâmico       • inherited...       # inherited       class Foo         def self.inherited(subklass)        ...
Ruby       OO Dinâmico       • included...       # included       module Foo         def included(klass)           ...    ...
Ruby       OO Dinâmico       • class_eval, class_exec....       class Foo; end       Foo.class_eval(“def bar() ... end”)  ...
Ruby       OO Dinâmico       • instance_eval, instance_exec, define_method....       class Foo         define_method(:bar) ...
Ruby       OO Dinâmico       • attr_(reader|accessor|writer)       class Foo         attr_accessor :bar       end       # ...
Ruby       OO Dinâmico       • nesting, alias, autoload, class_variable_(set|get|defined?), const_(get|set|         defined?...
PHP       Comunidade       • PECL, PEAR. ... PHP Classes?Monday, April 25, 2011
Ruby       Comunidade       • RubyGems       gem install bundler # install gem       bundler gem my_gem # create my own ge...
Ruby       Comunidade       • GitHubMonday, April 25, 2011
Monday, April 25, 2011
Upcoming SlideShare
Loading in...5
×

Ruby para-programadores-php

408

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
408
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Ruby para-programadores-php"

  1. 1. Ruby para programadores PHPMonday, April 25, 2011
  2. 2. 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/98Monday, April 25, 2011
  3. 3. 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. 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.”Monday, April 25, 2011
  4. 4. PHP Variáveis $number = 18; $string = “John”; $bool = true; $array = array(7,8,6,5); $hash = array(“foo” => “bar”); $obj = new Class(“param”);Monday, April 25, 2011
  5. 5. 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 expressionMonday, April 25, 2011
  6. 6. 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]Monday, April 25, 2011
  7. 7. 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]Monday, April 25, 2011
  8. 8. PHP Tipagem • Dinâmica e fraca. 10 + “10”; => 20Monday, April 25, 2011
  9. 9. Ruby Tipagem • Dinâmica e forte. (Aberta a mudanças.) 10 + “10” => TypeError: String cant be coerced into Fixnum class Fixnum alias :old_sum :+ def + s old_sum s.to_i end end 10 + “10” => 20Monday, April 25, 2011
  10. 10. Ruby Tipagem • ...como??? 1 + 1 => 2 1.+(1) => 2 1.send(‘+’, 1) => 2 # “Operações”? Métodos!Monday, April 25, 2011
  11. 11. PHP Fluxo • if, switch, ternário; if($i == $j){ ... } $i == $j ? ... : ... switch($i){ case(“valor”){ TODO } }Monday, April 25, 2011
  12. 12. Ruby Fluxo • if, unless ... if i == j ... end unless cond ... end puts “Maior” if age >= 18 puts “Menor” unless user.adult?Monday, April 25, 2011
  13. 13. 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’” endMonday, April 25, 2011
  14. 14. 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 endMonday, April 25, 2011
  15. 15. PHP Iteradores • while, for, foreach; while($i < 10){ ... } for($i = 0; $i < length($clients); $i++){ ... } foreach($clients as $client){ ... }Monday, April 25, 2011
  16. 16. 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 } => 20Monday, April 25, 2011
  17. 17. 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| ... }Monday, April 25, 2011
  18. 18. 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” } # markabyMonday, April 25, 2011
  19. 19. PHP OO • Herança comum, classes abstratas, interfaces. Como Java.Monday, April 25, 2011
  20. 20. 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 endMonday, April 25, 2011
  21. 21. Ruby OO • Classes e módulos. # módulo como “namescope” module Foo class Bar ... end end variable = Foo::Bar.newMonday, April 25, 2011
  22. 22. 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”;Monday, April 25, 2011
  23. 23. 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 endMonday, April 25, 2011
  24. 24. Ruby OO Dinâmico • inherited... # inherited class Foo def self.inherited(subklass) ... end end class Bar < Foo endMonday, April 25, 2011
  25. 25. Ruby OO Dinâmico • included... # included module Foo def included(klass) ... end end class Bar include Foo endMonday, April 25, 2011
  26. 26. 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 # worksMonday, April 25, 2011
  27. 27. 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 # worksMonday, April 25, 2011
  28. 28. 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 endMonday, April 25, 2011
  29. 29. 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...Monday, April 25, 2011
  30. 30. PHP Comunidade • PECL, PEAR. ... PHP Classes?Monday, April 25, 2011
  31. 31. 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 projectMonday, April 25, 2011
  32. 32. Ruby Comunidade • GitHubMonday, April 25, 2011
  33. 33. Monday, April 25, 2011
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×