Ruby para programadores PHP

1,101 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
1,101
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
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

    ×