SlideShare a Scribd company logo
Ruby
       para programadores PHP




Monday, April 25, 2011
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/98




Monday, April 25, 2011
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. That's 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
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
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 expression


Monday, April 25, 2011
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
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
PHP

       Tipagem

       • Dinâmica e fraca.

       10 + “10”;
       => 20




Monday, April 25, 2011
Ruby

       Tipagem

       • Dinâmica e forte. (Aberta a mudanças.)

       10 + “10”
       => TypeError: String can't be coerced into Fixnum

       class Fixnum
         alias :old_sum :+
         def + s
           old_sum s.to_i
         end
       end
       10 + “10”
       => 20

Monday, April 25, 2011
Ruby

       Tipagem

       • ...como???

       1 + 1
       => 2

       1.+(1)
       => 2

       1.send(‘+’, 1)
       => 2

       # “Operações”? Métodos!



Monday, April 25, 2011
PHP

       Fluxo

       • if, switch, ternário;

       if($i == $j){ ... }

       $i == $j ? ... : ...

       switch($i){
         case(“valor”){
           TODO
         }
       }




Monday, April 25, 2011
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
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’”
       end

Monday, April 25, 2011
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
       end
Monday, April 25, 2011
PHP

       Iteradores

       • while, for, foreach;

       while($i < 10){ ... }

       for($i = 0; $i < length($clients); $i++){ ... }

       foreach($clients as $client){ ... }




Monday, April 25, 2011
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 }
       => 20
Monday, April 25, 2011
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
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”   } # markaby

Monday, April 25, 2011
PHP

       OO

       • Herança comum, classes abstratas, interfaces. Como Java.




Monday, April 25, 2011
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
       end



Monday, April 25, 2011
Ruby

       OO

       • Classes e módulos.

       # módulo como “namescope”
       module Foo
         class Bar
           ...
         end
       end



       variable = Foo::Bar.new




Monday, April 25, 2011
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
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
       end

Monday, April 25, 2011
Ruby

       OO Dinâmico

       • inherited...

       # inherited
       class Foo
         def self.inherited(subklass)
           ...
         end
       end

       class Bar < Foo
       end




Monday, April 25, 2011
Ruby

       OO Dinâmico

       • included...

       # included
       module Foo
         def included(klass)
           ...
         end
       end

       class Bar
         include Foo
       end



Monday, April 25, 2011
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 # works




Monday, April 25, 2011
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 # works



Monday, April 25, 2011
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
       end

Monday, April 25, 2011
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
PHP

       Comunidade

       • PECL, PEAR. ... PHP Classes?




Monday, April 25, 2011
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 project



Monday, April 25, 2011
Ruby

       Comunidade

       • GitHub




Monday, April 25, 2011
Monday, April 25, 2011

More Related Content

PPTX
Ruby :: Training 1
PDF
Strong typing @ php leeds
PPTX
Strong typing : adoption, adaptation and organisation
PPTX
C++ overview
PDF
Boost your-oop-with-fp
KEY
Java to Scala: Why & How
PPTX
Beginning Java for .NET developers
ODP
A Tour Of Scala
Ruby :: Training 1
Strong typing @ php leeds
Strong typing : adoption, adaptation and organisation
C++ overview
Boost your-oop-with-fp
Java to Scala: Why & How
Beginning Java for .NET developers
A Tour Of Scala

Viewers also liked (7)

KEY
Ruby para-programadores-php
PPT
rails_and_agile
PDF
Tree top
KEY
Ruby para programadores PHP
PDF
Reasoning about Code with React
KEY
SaaS - RubyMastersConf.com.br
PDF
Saas
Ruby para-programadores-php
rails_and_agile
Tree top
Ruby para programadores PHP
Reasoning about Code with React
SaaS - RubyMastersConf.com.br
Saas
Ad

Similar to Ruby para-programadores-php (20)

PDF
Ruby — An introduction
PPTX
Ruby basics
PPT
Rubyforjavaprogrammers 1210167973516759-9
PPT
Rubyforjavaprogrammers 1210167973516759-9
PPTX
Code for Startup MVP (Ruby on Rails) Session 2
PDF
Ruby an overall approach
PPTX
From Ruby to Scala
KEY
Ruby on Rails Training - Module 1
KEY
Introduction to Ruby
KEY
Rails for PHP Developers
KEY
Learn Ruby 2011 - Session 5 - Looking for a Rescue
PDF
Php Crash Course - Macq Electronique 2010
PPT
Intro To Ror
PDF
Perl 101
PPTX
06-classes.ppt (copy).pptx
ZIP
Meta Programming in Ruby - Code Camp 2010
PPTX
Day 1 - Intro to Ruby
PDF
Torquebox @ Charlotte.rb May 2011
KEY
Test First Teaching
KEY
Ruby — An introduction
Ruby basics
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
Code for Startup MVP (Ruby on Rails) Session 2
Ruby an overall approach
From Ruby to Scala
Ruby on Rails Training - Module 1
Introduction to Ruby
Rails for PHP Developers
Learn Ruby 2011 - Session 5 - Looking for a Rescue
Php Crash Course - Macq Electronique 2010
Intro To Ror
Perl 101
06-classes.ppt (copy).pptx
Meta Programming in Ruby - Code Camp 2010
Day 1 - Intro to Ruby
Torquebox @ Charlotte.rb May 2011
Test First Teaching
Ad

Recently uploaded (20)

PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
cuic standard and advanced reporting.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
Empathic Computing: Creating Shared Understanding
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Spectral efficient network and resource selection model in 5G networks
MIND Revenue Release Quarter 2 2025 Press Release
Review of recent advances in non-invasive hemoglobin estimation
cuic standard and advanced reporting.pdf
Spectroscopy.pptx food analysis technology
Empathic Computing: Creating Shared Understanding
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Advanced methodologies resolving dimensionality complications for autism neur...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Diabetes mellitus diagnosis method based random forest with bat algorithm
20250228 LYD VKU AI Blended-Learning.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Per capita expenditure prediction using model stacking based on satellite ima...
Digital-Transformation-Roadmap-for-Companies.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Spectral efficient network and resource selection model in 5G networks

Ruby para-programadores-php

  • 1. Ruby para programadores PHP Monday, 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/98 Monday, 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. That's 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 expression Monday, 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”; => 20 Monday, April 25, 2011
  • 9. Ruby Tipagem • Dinâmica e forte. (Aberta a mudanças.) 10 + “10” => TypeError: String can't be coerced into Fixnum class Fixnum alias :old_sum :+ def + s old_sum s.to_i end end 10 + “10” => 20 Monday, 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’” end Monday, 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 end Monday, 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 } => 20 Monday, 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” } # markaby Monday, 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 end Monday, April 25, 2011
  • 21. Ruby OO • Classes e módulos. # módulo como “namescope” module Foo class Bar ... end end variable = Foo::Bar.new Monday, 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 end Monday, April 25, 2011
  • 24. Ruby OO Dinâmico • inherited... # inherited class Foo def self.inherited(subklass) ... end end class Bar < Foo end Monday, April 25, 2011
  • 25. Ruby OO Dinâmico • included... # included module Foo def included(klass) ... end end class Bar include Foo end Monday, 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 # works Monday, 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 # works Monday, 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 end Monday, 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 project Monday, April 25, 2011
  • 32. Ruby Comunidade • GitHub Monday, April 25, 2011