Transcript
Page 1: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¿Por qué Ruby?

Descubre su expresividad(y peculiaridades)

Page 2: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Sobre mi(muy brevemente)

Page 3: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ruby idiomatico

Page 4: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¿idiomatico?

Page 5: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ruby

Yukihiro Matsumoto

“Matz”

Page 6: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ruby● Orientado a objetos● Interpretado● (Muy) Dinámico● Alto nivel● Basado en Perl, Smalltalk, Lisp, C, ...● Metaprogramación● ….

Page 7: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ruby● Orientado a objetos● Interpretado● (Muy) Dinámico● Alto nivel● Basado en Perl, Smalltalk, Lisp, C, ...● Metaprogramación● ….

Page 8: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ruby● Cercano al lenguaje natural● Fácil de leer y escribir● Eficiente● ¡DIVERTIDO! :-)))

Page 9: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¿Paréntesis?

puts(“¿Los ponemos co?”)

Page 10: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¿Paréntesis?

puts “No es necesario”

Page 11: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Orientado a objetos(de verdad de la buena)

Page 12: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Orientado a objetos"D-Labs mola mucho".class # => String

42.class # => Fixnum

nil.class # => NilClass

[1, 2, 3].class # => Array

(1..9).class # => Range

Page 13: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Orientado a objetos"zARAGOZA-rb".swapcase # => "Zaragoza-RB"

-12345.abs # => 12345

5 * 10 # => 50

Page 14: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Orientado a objetos"zARAGOZA-rb".swapcase # => "Zaragoza-RB"

-12345.abs # => 12345

5 * 10 # => 50

5.*(10) # => Syntactic sugar

Page 15: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Orientado a objetosTime.now # => 2013-06-27...

Time.now.thursday? # => true

2013.even? # => false

5.times{ puts "DRY" } # => 5

Page 16: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Orientado a objetos

"DAba Le ArrOz Al A ZoRrA ELaBAd".downcase.reverse

# => "dabale arroz a la zorra el abad"

Page 17: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

True / nil / falseif 0

"0 es verdadero"

else

"0 es falso"

end

Page 18: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

True / nil / falseif 0

"0 es verdadero"

else

"0 es falso"

end # => "0 es verdadero"

Todo es true excepto nil y false

Page 19: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

If / unlessif !order.valid?

order.block

end

Page 20: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

If / unlessif !order.valid?

order.block

end

order.block unless order.valid?

Page 21: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¿¡ Exclamaciones e interrogaciones en

métodos !?

Page 22: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

ConvenioInterrogación retorna booleano

[1, 2, 3, 5].empty? # => false

Page 23: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

ConvenioExclamación acción destructiva

array = [1, 2, 3] # => [1, 2, 3]

array.reverse # => [3, 2, 1]

array # => [1, 2, 3]

array = [1, 2, 3] # => [1, 2, 3]

array.reverse! # => [3, 2, 1]

array # => [3, 2, 1]

Page 24: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Return o no return● Cualquier expresión retorna un valor● Rara vez usas return*

* Es una opinión personal

Page 25: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Return o no returnclass UserKarma

def reset

# Do stuff

total = 0

end

end

Page 26: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Estructuras condicionales

@user = nil

if params[:id]

@user = User.find(params[:id])

else

@user = User.new

end

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 27: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Estructuras condicionales

@user = if params[:id]

User.find(params[:id])

else

User.new

end

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 28: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Estructuras condicionales

Operador ternario:@user = params[:id] ? User.find(params[:id]) : User.new

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 29: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Estructuras condicionales

if my_var

return my_var

else

return another_value

end

http://www.zepho.com/download/ruby-idioms.pdf

Page 30: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Estructuras condicionales

if my_var

return my_var

else

return another_value

end

if my_var

my_var

else

another_value

end

http://www.zepho.com/download/ruby-idioms.pdf

Page 31: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Estructuras condicionales

if my_var

return my_var

else

return another_value

end

if my_var

my_var

else

another_value

end

my_var || another_value

http://www.zepho.com/download/ruby-idioms.pdf

Page 32: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Asignaciones@post = Post.find(params[:id])

if @post

@post.destroy

end

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 33: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Asignaciones@post = Post.find(params[:id])

if @post

@post.destroy

end

if @post = Post.find(params[:id])

@post.destroy

end

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 34: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

AsignacionesEn paralelo:

first, last, street = "Pi", "Filemon", "13 rue del percebe"

# => ["Pi", "Filemon", "13 rue del percebe"]

first, last = last, first

# => ["Filemon", "Pi"]

Page 35: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Asignaciones

@name = "Default name" unless @name

http://www.zepho.com/download/ruby-idioms.pdf

Page 36: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Asignaciones

@name = "Default name" unless @name

@name ||= "Default name"

http://www.zepho.com/download/ruby-idioms.pdf

Page 37: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

AsignacionesVariaciones:

a = 1 # => 1

a += 1 # => 2

a *= 5 # => 10

http://www.zepho.com/download/ruby-idioms.pdf

Page 38: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clase Array(módulo enumerable)

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 39: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Operacionesfoo = [1, 2, 3]

bar = [3, 4, 5]

foo + bar # => [1, 2, 3, 3, 4, 5]

foo * 2 # => [1, 2, 3, 1, 2, 3]

foo & bar # => [3]

foo | bar # => [1, 2, 3, 4, 5]

Page 40: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Iteradores - eachfoo.each do |item|

puts item

end

foo.each{|item| puts item } # => [1, 2, 3]

Page 41: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Iteradores - mapfoo.map do |item|

item*2

end

foo.map{|item| item*2 } # => [2, 4, 6]

Page 42: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Iteradores - injectfoo.inject do |sum, n|

sum + n

end

foo.inject{|sum, n| sum + n } # => 6

Page 43: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Otros métodos[1, 1, 1, 2].uniq # => [1, 2]

[1, [2, 3, [4]], 5].flatten # => [1, 2, 3, 4, 5]

[nil, 1, nil, 2, 3].compact # => [1, 2, 3]

[1, 2, 3].reverse # => [3, 2, 1]

[2, 10, 1].sort # => [1, 2, 10]

Page 44: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Otros métodos[1, 2, 3, 4].find {|n| n % 3 == 0}

# => 3

[1, 2, 3, 4].find_all {|n| n % 2 == 0}

# => [2, 4]

Page 45: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ejemplos prácticos

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu

Page 46: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ejemplo 1● Calcular el precio con IVA de la lista de precios:

precios = [10, 12, 20, 50]

pvp = []

precios.each do |precio|

pvp << precio * 0.21

end

pvp # => [2.1, 2.52, 4.2, 10.5]

Page 47: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ejemplo 1● Calcular el precio con IVA de la lista de

precios:

precios = [10, 12, 20, 50]

pvp = precios.map {|precio| precio * 0.21 }

Page 48: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ejemplo 2● Calcula la suma total de una lista de precios:

precios = [2.1, 2.52, 4.2, 10.5]

total = 0

precios.each do |precio|

total += precio

end

total # => 19.32

Page 49: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Ejemplo 2● Calcula la suma total de una lista de

precios:

precios = [2.1, 2.52, 4.2, 10.5]

total = precios.inject{|sum, precio| sum + precio}

Page 50: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodos

Page 51: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodos

● Típica clase coche con su marca, modelo y color

Page 52: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosclass Car

def initialize(brand=nil, model=nil)

@brand = brand

@model = model

end

def brand

@brand

end

def model

@model

end

def color

@color

end

def color=(new_color)

@color = new_color

end

def brand=(new_brand)

@brand = new_brand

end

def model=(new_model)

@model= new_model

end

end

Page 53: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosclass Car

def initialize(brand=nil, model=nil)

@brand = brand

@model = model

end

...

end

Page 54: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodos ...

def color

@color

end

def color=(new_color)

@color = new_color

end

...

end

Page 55: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosclass Car

attr_accessor :brand, :model, :color

def initialize(brand=nil, model=nil)

@brand = brand

@model = model

end

end

Page 56: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosLos métodos sus parámetros:

● Obligatorios● Con valor por defecto● Aceptar hashes, arrays y bloques

Page 57: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosEjemplo de parámetro opcional:

def foo(a=nil)

# do someting

end

Page 58: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosEjemplo de parámetros obligatorios:

def foo(a, b)

# do someting

end

Page 59: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosEjemplo de parámetros obligatorios:

def foo(a, b, *c)

# do someting

end

Page 60: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosEjemplo de parámetros obligatorios:

def foo(a, options={})

# do someting

end

Page 61: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Clases y métodosEjemplo:

def foo(mandatory, value_not_needed=42, options={})

puts "#{mandatory} - #{value_not_needed}"

puts "Options value: #{options}" unless options.empty?

end

Page 62: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Muchas cosas quedanen el tintero :(

Page 63: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¿Preguntas?

Page 64: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

¡Gracias! :)

Page 65: ¿Por qué Ruby? Descubre su expresividad (y peculiaridades)

Sobre miRafa García

Ando por:

- Twitter: @leptom

- Email: [email protected]

- Github: rgo


Top Related