Your SlideShare is downloading. ×
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

870

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
870
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
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

    ×