SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
¿Por qué Ruby?
Descubre su expresividad
(y peculiaridades)
Sobre mi
(muy brevemente)
Ruby idiomatico
¿idiomatico?
Ruby

Yukihiro
Matsumoto

“Matz”
Ruby
●

Orientado a objetos

●

Interpretado

●

(Muy) Dinámico

●

Alto nivel

●

Basado en Perl, Smalltalk, Lisp, C, ...

●

Metaprogramación

●

….
Ruby
●

Orientado a objetos

●

Interpretado

●

(Muy) Dinámico

●

Alto nivel

●

Basado en Perl, Smalltalk, Lisp, C, ...

●

Metaprogramación

●

….
Ruby
●

Cercano al lenguaje natural

●

Fácil de leer y escribir

●

Eficiente

●

¡DIVERTIDO! :-)))
¿Paréntesis?

puts(“¿Los ponemos co?”)
¿Paréntesis?

puts “No es necesario”
Orientado a objetos
(de verdad de la buena)
Orientado a objetos
"D-Labs mola mucho".class
42.class
nil.class
[1, 2, 3].class
(1..9).class

#
#
#
#
#

=>
=>
=>
=>
=>

String
Fixnum
NilClass
Array
Range
Orientado a objetos
"zARAGOZA-rb".swapcase

# => "Zaragoza-RB"

-12345.abs

# => 12345

5 * 10

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

# => "Zaragoza-RB"

-12345.abs

# => 12345

5 * 10

# => 50

5.*(10)

# => Syntactic sugar
Orientado a objetos
Time.now
Time.now.thursday?

# => 2013-06-27...
# => true

2013.even?
5.times{ puts "DRY" }

# => false
# => 5
Orientado a objetos

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

# => "dabale arroz a la zorra el abad"
True / nil / false
if 0
"0 es verdadero"
else
"0 es falso"
end
True / nil / false
if 0
"0 es verdadero"
else
"0 es falso"
end # => "0 es verdadero"

Todo es true excepto nil y false
If / unless
if !order.valid?
order.block
end
If / unless
if !order.valid?
order.block
end
order.block unless order.valid?
¿¡ Exclamaciones e
interrogaciones en
métodos !?
Convenio
Interrogación retorna booleano

[1, 2, 3, 5].empty?

# => false
Convenio
Exclamación acción destructiva

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

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

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

# => [1, 2, 3]
# => [3, 2, 1]
# => [3, 2, 1]
Return o no return
●

Cualquier expresión retorna un valor

●

Rara vez usas return*

* Es una opinión personal
Return o no return
class UserKarma
def reset
# Do stuff
total = 0
end
end
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
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
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
Estructuras
condicionales
if my_var
return my_var
else
return another_value
end

http://www.zepho.com/download/ruby-idioms.pdf
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
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
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
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
Asignaciones
En paralelo:
first, last, street = "Pi", "Filemon", "13 rue del percebe"
# => ["Pi", "Filemon", "13 rue del percebe"]

first, last = last, first
# => ["Filemon", "Pi"]
Asignaciones
@name = "Default name" unless @name

http://www.zepho.com/download/ruby-idioms.pdf
Asignaciones
@name = "Default name" unless @name

@name ||= "Default name"

http://www.zepho.com/download/ruby-idioms.pdf
Asignaciones
Variaciones:
a = 1
a += 1
a *= 5

# => 1
# => 2
# => 10

http://www.zepho.com/download/ruby-idioms.pdf
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
Operaciones
foo = [1, 2, 3]
bar = [3, 4, 5]
foo
foo
foo
foo

+
*
&
|

bar
2
bar
bar

#
#
#
#

=>
=>
=>
=>

[1, 2, 3, 3, 4, 5]
[1, 2, 3, 1, 2, 3]
[3]
[1, 2, 3, 4, 5]
Iteradores - each
foo.each do |item|
puts item
end
foo.each{|item| puts item } # => [1, 2, 3]
Iteradores - map
foo.map do |item|
item*2
end
foo.map{|item| item*2 }

# => [2, 4, 6]
Iteradores - inject
foo.inject do |sum, n|
sum + n
end
foo.inject{|sum, n| sum + n } # => 6
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]
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]
Ejemplos prácticos

De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
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]
Ejemplo 1
●

Calcular el precio con IVA de la lista de
precios:

precios = [10, 12, 20, 50]
pvp = precios.map {|precio| precio * 0.21 }
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
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}
Clases y métodos
Clases y métodos
●

Típica clase coche con su marca,
modelo y color
Clases y métodos
class 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
Clases y métodos
class Car
def initialize(brand=nil, model=nil)
@brand = brand
@model = model
end
...
end
Clases y métodos
...
def color
@color
end
def color=(new_color)
@color = new_color
end
...
end
Clases y métodos
class Car
attr_accessor :brand, :model, :color
def initialize(brand=nil, model=nil)
@brand = brand
@model = model
end
end
Clases y métodos
Los métodos sus parámetros:
●

Obligatorios

●

Con valor por defecto

●

Aceptar hashes, arrays y bloques
Clases y métodos
Ejemplo de parámetro opcional:
def foo(a=nil)
# do someting
end
Clases y métodos
Ejemplo de parámetros obligatorios:
def foo(a, b)
# do someting
end
Clases y métodos
Ejemplo de parámetros obligatorios:
def foo(a, b, *c)
# do someting
end
Clases y métodos
Ejemplo de parámetros obligatorios:
def foo(a, options={})
# do someting
end
Clases y métodos
Ejemplo:
def foo(mandatory, value_not_needed=42, options={})
puts "#{mandatory} - #{value_not_needed}"
puts "Options value: #{options}" unless options.empty?
end
Muchas cosas quedan
en el tintero :(
¿Preguntas?
¡Gracias! :)
Sobre mi
Rafa García
Ando por:
- Twitter: @leptom
- Email: contacto@rafagarcia.net
- Github: rgo

Weitere ähnliche Inhalte

Ähnlich wie Por qué Ruby: descubre su expresividad y peculiaridades

Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVMJano González
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilJavier Abadía
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRailsPablo Marrero
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAPBiz Partner
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPAlvaro Tejada
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#Luis Ruiz Pavón
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryDavid Arango
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Railsguest638090
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007JuancaPompilla
 
Taller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on RailsTaller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on RailsDiacode
 
Programacion orientada-a-objetos-poo
Programacion orientada-a-objetos-poo Programacion orientada-a-objetos-poo
Programacion orientada-a-objetos-poo LuigyDeLaTorre
 
Curso Swift
Curso SwiftCurso Swift
Curso SwiftPlatzi
 
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXJavascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXIrontec
 

Ähnlich wie Por qué Ruby: descubre su expresividad y peculiaridades (20)

Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVM
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAP
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
Código Bonito con PHP
Código Bonito con PHPCódigo Bonito con PHP
Código Bonito con PHP
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Taller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on RailsTaller de Introducción a Ruby on Rails
Taller de Introducción a Ruby on Rails
 
Programacion orientada-a-objetos-poo
Programacion orientada-a-objetos-poo Programacion orientada-a-objetos-poo
Programacion orientada-a-objetos-poo
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXJavascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
 

Kürzlich hochgeladen

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Kürzlich hochgeladen (13)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Por qué Ruby: descubre su expresividad y peculiaridades