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

Viewers also liked

Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-php
Juan Maiz
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agile
Juan Maiz
 
Tree top
Tree topTree top
Tree top
Juan Maiz
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
Juan Maiz
 
Reasoning about Code with React
Reasoning about Code with ReactReasoning about Code with React
Reasoning about Code with React
Juan Maiz
 
SaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.brSaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.br
Juan Maiz
 
Saas
SaasSaas
Saas
Juan Maiz
 

Viewers also liked (7)

Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-php
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agile
 
Tree top
Tree topTree top
Tree top
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
 
Reasoning about Code with React
Reasoning about Code with ReactReasoning about Code with React
Reasoning about Code with React
 
SaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.brSaaS - RubyMastersConf.com.br
SaaS - RubyMastersConf.com.br
 
Saas
SaasSaas
Saas
 

Similar to Ruby para-programadores-php

Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
Gonçalo Silva
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
Tushar Pal
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
sagaroceanic11
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
sagaroceanic11
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2
Henry S
 
Ruby an overall approach
Ruby an overall approachRuby an overall approach
Ruby an overall approach
Felipe Schmitt
 
From Ruby to Scala
From Ruby to ScalaFrom Ruby to Scala
From Ruby to Scala
tod esking
 
Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1
Mark Menard
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
Mark Menard
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP Developers
Robert Dempsey
 
Learn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a RescueLearn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a Rescue
James Thompson
 
Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010
Michelangelo van Dam
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
myuser
 
Perl 101
Perl 101Perl 101
Perl 101
Alex Balhatchet
 
06-classes.ppt (copy).pptx
06-classes.ppt (copy).pptx06-classes.ppt (copy).pptx
06-classes.ppt (copy).pptx
Thắng It
 
Meta Programming in Ruby - Code Camp 2010
Meta Programming in Ruby - Code Camp 2010Meta Programming in Ruby - Code Camp 2010
Meta Programming in Ruby - Code Camp 2010
ssoroka
 
Day 1 - Intro to Ruby
Day 1 - Intro to RubyDay 1 - Intro to Ruby
Day 1 - Intro to Ruby
Barry Jones
 
Torquebox @ Charlotte.rb May 2011
Torquebox @ Charlotte.rb May 2011Torquebox @ Charlotte.rb May 2011
Torquebox @ Charlotte.rb May 2011
tobiascrawley
 
Test First Teaching
Test First TeachingTest First Teaching
Test First Teaching
Sarah Allen
 
Ruby
RubyRuby

Similar to Ruby para-programadores-php (20)

Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2
 
Ruby an overall approach
Ruby an overall approachRuby an overall approach
Ruby an overall approach
 
From Ruby to Scala
From Ruby to ScalaFrom Ruby to Scala
From Ruby to Scala
 
Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1Ruby on Rails Training - Module 1
Ruby on Rails Training - Module 1
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP Developers
 
Learn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a RescueLearn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a Rescue
 
Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
 
Perl 101
Perl 101Perl 101
Perl 101
 
06-classes.ppt (copy).pptx
06-classes.ppt (copy).pptx06-classes.ppt (copy).pptx
06-classes.ppt (copy).pptx
 
Meta Programming in Ruby - Code Camp 2010
Meta Programming in Ruby - Code Camp 2010Meta Programming in Ruby - Code Camp 2010
Meta Programming in Ruby - Code Camp 2010
 
Day 1 - Intro to Ruby
Day 1 - Intro to RubyDay 1 - Intro to Ruby
Day 1 - Intro to Ruby
 
Torquebox @ Charlotte.rb May 2011
Torquebox @ Charlotte.rb May 2011Torquebox @ Charlotte.rb May 2011
Torquebox @ Charlotte.rb May 2011
 
Test First Teaching
Test First TeachingTest First Teaching
Test First Teaching
 
Ruby
RubyRuby
Ruby
 

Recently uploaded

Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
FODUU
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 

Recently uploaded (20)

Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 

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