Ruby para-programadores-php
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
569
On Slideshare
569
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ruby para programadores PHPMonday, April 25, 2011
  • 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. 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. 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. 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. 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. 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. PHP Tipagem • Dinâmica e fraca. 10 + “10”; => 20Monday, April 25, 2011
  • 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. Ruby Tipagem • ...como??? 1 + 1 => 2 1.+(1) => 2 1.send(‘+’, 1) => 2 # “Operações”? Métodos!Monday, April 25, 2011
  • 11. PHP Fluxo • if, switch, ternário; if($i == $j){ ... } $i == $j ? ... : ... switch($i){ case(“valor”){ TODO } }Monday, April 25, 2011
  • 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. 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. 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. PHP Iteradores • while, for, foreach; while($i < 10){ ... } for($i = 0; $i < length($clients); $i++){ ... } foreach($clients as $client){ ... }Monday, April 25, 2011
  • 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. 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. 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. PHP OO • Herança comum, classes abstratas, interfaces. Como Java.Monday, April 25, 2011
  • 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. Ruby OO • Classes e módulos. # módulo como “namescope” module Foo class Bar ... end end variable = Foo::Bar.newMonday, April 25, 2011
  • 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. 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. Ruby OO Dinâmico • inherited... # inherited class Foo def self.inherited(subklass) ... end end class Bar < Foo endMonday, April 25, 2011
  • 25. Ruby OO Dinâmico • included... # included module Foo def included(klass) ... end end class Bar include Foo endMonday, April 25, 2011
  • 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. 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. 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. 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. PHP Comunidade • PECL, PEAR. ... PHP Classes?Monday, April 25, 2011
  • 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. Ruby Comunidade • GitHubMonday, April 25, 2011
  • 33. Monday, April 25, 2011