Your SlideShare is downloading. ×
0
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Ruby para programadores PHP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ruby para programadores PHP

881

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
881
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
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
  • \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
  • Transcript

    • 1. Rubypara programadores PHP
    • 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. 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. 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. PHPVariáveis$number = 18;$string = “John”;$bool = true;$array = array(7,8,6,5);$hash = array(“foo” => “bar”);$obj = new Class(“param”);
    • 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. PHPParadigma• Procedural com suporte a OO.$a = array(1,2,3);array_shift($a);=> 1array_pop($a);=> 3array_push($a, 4);=> [2,4]
    • 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. PHPTipagem• Dinâmica e fraca.10 + “10”;=> 20
    • 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. RubyTipagem• ...como???1 + 1=> 21.+(1)=> 21.send(‘+’, 1)=> 2# “Operações”? Métodos!
    • 12. PHPFluxo• if, switch, ternário;if($i == $j){ ... }$i == $j ? ... : ...switch($i){ case(“valor”){ TODO }}
    • 13. RubyFluxo• if, unless ...if i == j ...endunless cond ...endputs “Maior” if age >= 18puts “Menor” unless user.adult?
    • 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. 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. PHPIteradores• while, for, foreach;while($i < 10){ ... }for($i = 0; $i < length($clients); $i++){ ... }foreach($clients as $client){ ... }
    • 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. RubyIteradores / Blocos• crie seu próprio iterador:def hi_five yield 1; yield 2; yield 3; yield 4; yield 5endhi_five{|i| ... }
    • 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. PHPOO• Herança comum, classes abstratas, interfaces. Como Java.
    • 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. RubyOO• Classes e módulos.# módulo como “namescope”module Foo class Bar ... endendvariable = Foo::Bar.new
    • 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. 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. RubyOO Dinâmico• inherited...# inheritedclass Foo def self.inherited(subklass) ... endendclass Bar < Fooend
    • 26. RubyOO Dinâmico• included...# includedmodule Foo def included(klass) ... endendclass Bar include Fooend
    • 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. 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. 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. 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. PHPComunidade• PECL, PEAR. ... PHP Classes?
    • 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. RubyComunidade• GitHub

    ×