Ruby para-programadores-php
-
Upload
juan-maiz -
Category
Technology
-
view
401 -
download
0
Transcript of Ruby para-programadores-php
Ruby
para programadores PHP
Monday, April 25, 2011
PHP
• 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
História
Monday, April 25, 2011
Ruby
• 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.”
História
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 = 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
Monday, April 25, 2011
PHP
• Procedural com suporte a OO.
Paradigma
$a = array(1,2,3);array_shift($a);=> 1array_pop($a);=> 3array_push($a, 4);=> [2,4]
Monday, April 25, 2011
Ruby
• Procedural, totalmente OO com classes (Smalltalk-like), um tanto funcional com o conceito de blocos. Not Haskell thought.
Paradigma
a = [1,2,3]a.shift=> 1a.pop=> 3a.push(4)=> [2,4]
Monday, April 25, 2011
PHP
• Dinâmica e fraca.
Tipagem
10 + “10”;=> 20
Monday, April 25, 2011
Ruby
• Dinâmica e forte. (Aberta a mudanças.)
Tipagem
10 + “10”=> TypeError: String can't be coerced into Fixnum
class Fixnum alias :old_sum :+ def + s old_sum s.to_i endend10 + “10”=> 20
Monday, April 25, 2011
Ruby
• ...como???
Tipagem
1 + 1=> 2
1.+(1)=> 2
1.send(‘+’, 1)=> 2
# “Operações”? Métodos!
Monday, April 25, 2011
PHP
• if, switch, ternário;
Fluxo
if($i == $j){ ... }
$i == $j ? ... : ...
switch($i){ case(“valor”){ TODO }}
Monday, April 25, 2011
Ruby
• if, unless ...
Fluxo
if i == j ...end
unless cond ...end
puts “Maior” if age >= 18
puts “Menor” unless user.adult?
Monday, April 25, 2011
Ruby
• ...case...
Fluxo
# 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
Monday, April 25, 2011
Ruby
• ...case...
Fluxo
# 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
Monday, April 25, 2011
PHP
• while, for, foreach;
Iteradores
while($i < 10){ ... }
for($i = 0; $i < length($clients); $i++){ ... }
foreach($clients as $client){ ... }
Monday, April 25, 2011
Ruby
• for in, each, map, select, inject... enumeradores;
Iteradores
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
• crie seu próprio iterador:
Iteradores / Blocos
def hi_five yield 1; yield 2; yield 3; yield 4; yield 5end
hi_five{|i| ... }
Monday, April 25, 2011
Ruby
• power to the people.
Blocos
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
• Herança comum, classes abstratas, interfaces. Como Java.
OO
Monday, April 25, 2011
Ruby
• Classes e módulos.
OO
module Walker def walk ... endend
# módulo como “herança múltipla” ou “mixin”class Johny include Walkerend
Monday, April 25, 2011
Ruby
• Classes e módulos.
OO
# módulo como “namescope”module Foo class Bar ... endend
variable = Foo::Bar.new
Monday, April 25, 2011
PHP
• __call: Chama métodos não existentes.
• __get: Chama “atributos” não existentes.
• __set: Chama ao tentar setar atributos não existentes;
OO Dinâmico
$obj->metodo();
$obj->atributo;
$obj->atributo = “valor”;
Monday, April 25, 2011
Ruby
• method_missing: Tudo em Ruby são chamadas de métodos.
OO Dinâmico
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
Monday, April 25, 2011
Ruby
• inherited...
OO Dinâmico
# inheritedclass Foo def self.inherited(subklass) ... endend
class Bar < Fooend
Monday, April 25, 2011
Ruby
• included...
OO Dinâmico
# includedmodule Foo def included(klass) ... endend
class Bar include Fooend
Monday, April 25, 2011
Ruby
• class_eval, class_exec....
OO Dinâmico
class Foo; end
Foo.class_eval(“def bar() ... end”)Foo.class_exec{ def bar() ... end }
Foo.bar # worksFoo.baz # works
Monday, April 25, 2011
Ruby
• instance_eval, instance_exec, define_method....
OO Dinâmico
class Foo define_method(:bar) { ... } instance_exec{ def baz(); ... end } instance_eval(“def qux(); ... end”)end
Foo.new.bar # worksFoo.new.baz # worksFoo.new.qux # works
Monday, April 25, 2011
Ruby
• attr_(reader|accessor|writer)
OO Dinâmico
class Foo attr_accessor :barend
# same as...class Foo def bar() @bar end def bar= val @bar = val endend
Monday, April 25, 2011
Ruby
• 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...
OO Dinâmico
Monday, April 25, 2011
PHP
• PECL, PEAR. ... PHP Classes?
Comunidade
Monday, April 25, 2011
Ruby
• RubyGems
Comunidade
gem install bundler # install gem
bundler gem my_gem # create my own gem
cd my_gem
rake release # that’s all folks
#alsobundler install # install all dependencies for a project
Monday, April 25, 2011
Ruby
• GitHub
Comunidade
Monday, April 25, 2011
Monday, April 25, 2011