Ruby para-programadores-php

536 views
476 views

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
536
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×