• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ruby para-programadores-php
 

Ruby para-programadores-php

on

  • 453 views

 

Statistics

Views

Total Views
453
Views on SlideShare
452
Embed Views
1

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 1

http://coderwall.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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 Ruby para-programadores-php Presentation Transcript

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