SlideShare una empresa de Scribd logo
1 de 103
Ruby
                              Edgar J. Suárez
                               e@dgar.org




México on Rails
http://MexicoOnRails.com.mx
Historia
Historia

• Yukihiro “Matz” Matsumoto

                              http://en.wikipedia.org/wiki/
                                 Yukihiro_Matsumoto
Historia

• Yukihiro “Matz” Matsumoto
• 1995
                              http://en.wikipedia.org/wiki/
                                 Yukihiro_Matsumoto
Historia

• Yukihiro “Matz” Matsumoto
• 1995
• 1.8, 1.9                    http://en.wikipedia.org/wiki/
                                 Yukihiro_Matsumoto
Inspiraciones
Inspiraciones

• Perl
Inspiraciones

• Perl
• Smalltalk
Inspiraciones

• Perl
• Smalltalk
• Eiffel
Inspiraciones

• Perl
• Smalltalk
• Eiffel
• Ada
Inspiraciones

• Perl
• Smalltalk
• Eiffel
• Ada
• Lisp
Implementaciones
Implementaciones

• YARV
Implementaciones

• YARV
• JRuby
Implementaciones

• YARV
• JRuby
• Rubinius
Implementaciones

• YARV
• JRuby
• Rubinius
• IronRuby
Implementaciones
Implementaciones


• MacRuby
Implementaciones


• MacRuby
• HotRuby
Filosofía
Filosofía

“We need to focus on humans, on how humans
care about doing programming or operating the
aplication of the machine.
Filosofía

“We need to focus on humans, on how humans
care about doing programming or operating the
aplication of the machine.
We are the masters.They are the slaves”
Iteraciones
Iteraciones

[“uno”, “dos”, “tres”].each do |item|
Iteraciones

[“uno”, “dos”, “tres”].each do |item|
  puts “#{item}...”
Iteraciones

[“uno”, “dos”, “tres”].each do |item|
  puts “#{item}...”
end
Iteraciones

# => “uno...”
# => “dos...”
# => “tres...”
Todo tiene un valor
Todo tiene un valor

x = if 1 > 2
  “no es cierto”
else
  “correcto”
end
Todo tiene un valor

x = if 1 > 2
  “no es cierto”
else
  “correcto”
end
x # => “correcto”
Todo tiene un valor
Todo tiene un valor


x = “uno NO es mayor” unless 2 > 1
Todo tiene un valor


x = “uno NO es mayor” unless 2 > 1
x # => nil
Hashes

• Colección de pares llave-valor
Hashes

• Colección de pares llave-valor
  h = {:x => 3, :y => 3.4, :name =>
  “coords”}
Hashes

• Colección de pares llave-valor
  h = {:x => 3, :y => 3.4, :name =>
  “coords”}
  h.keys # => [:x, :name, :y]
Hashes

• Colección de pares llave-valor
  h = {:x => 3, :y => 3.4, :name =>
  “coords”}
  h.keys # => [:x, :name, :y]
  h.values # => [3, "coords", 3.4]
Símbolos
Símbolos

• Quién y no qué
Símbolos

• Quién y no qué
  “nombre”.object_id == “nombre”.object_id
  # => false
Símbolos

• Quién y no qué
  “nombre”.object_id == “nombre”.object_id
  # => false

  :nombre.object_id == :nombre.object_id
  # => true
Rangos
Rangos
(1..2) # => 1..2
Rangos
(1..2) # => 1..2
(1..3).each { |i| puts i }
# => 1 2 3
Rangos
(1..2) # => 1..2
(1..3).each { |i| puts i }
# => 1 2 3
(1...3).each { |i| puts i }
# => 1 2
Rangos
(1..2) # => 1..2
(1..3).each { |i| puts i }
# => 1 2 3
(1...3).each { |i| puts i }
# => 1 2
Todo es un objeto
Todo es un objeto
persona = Persona.new
persona.class # => Persona
arreglo = Array.new
arreglo.class # => Array
Todo es un objeto
persona = Persona.new
persona.class # => Persona
arreglo = Array.new
arreglo.class # => Array
arreglo = []
arreglo.class # => Array
obj = Object.new
obj.class # => Object
Todo es un objeto
Todo es un objeto

1.class # => Fixnum
3.2.class # => Float
Todo es un objeto

1.class # => Fixnum
3.2.class # => Float
nil.class # => NilClass
true.class # => TrueClass
false.class # => FalseClass
Class.class # => Class
La verdad

•   Todo lo que no sea nil o false, es
    verdadero.
La verdad

•   Todo lo que no sea nil o false, es
    verdadero.
    “hola” ? true : false # => true
    0 ? true : false # => true
La verdad

•   Todo lo que no sea nil o false, es
    verdadero.
    “hola” ? true : false # => true
    0 ? true : false # => true
    nil ? true : false # => false
    false ? true : false # => false
Clases

class Persona

 def nombre
   puts “Edgar”
 end

end
Constructor
Constructor

class Persona

 def initialize(nombre)

 end

end
Constructor

class Persona

 def initialize(nombre)
   @nombre = nombre
 end

end
Variables
Variables

• mi_variable   = “Hola mundo”
Variables

• mi_variable   = “Hola mundo”
• @edad = 76
Variables

• mi_variable = “Hola   mundo”
• @edad = 76
• @@contador = 3
Métodos
class Persona




end
Métodos
class Persona
 def metodo_de_instancia
 end



end
Métodos
class Persona
  def metodo_de_instancia
  end
  def self.metodo_de_clase
  end
end
Métodos descriptivos
Métodos descriptivos

def es_administrador?
  true
end
Métodos descriptivos

def es_administrador?
  true
end
def destruir_mundo!
  Gente.destroy_all
end
Modificadores de acceso
class Persona
  def metodo_publico
  end

  protected
  def metodo_protegido
  end

  def otro_metodo_protegido
  end

  private
  def metodo_privado
  end
end
Modificadores de acceso
class Persona
  def metodo_publico
  end

  def metodo_protegido
  end

  def metodo_privado
  end

  protected :metodo_protegido
  private :metodo_privado
end
Clases abiertas
Clases abiertas
class Persona
  def pedro
    puts “Pedro”
  end
end
p = Persona.new
p.pedro # => Pedro
Clases abiertas
class Persona
  def pedro
    puts “Pedro”
  end
end
p = Persona.new
p.pedro # => Pedro

class Persona
  def paco
    puts “Paco”
  end
end
p.paco # => Paco
Bloques
Bloques
3.times do |i|
  puts i
end
Bloques
3.times do |i|
  puts i
end
b = Proc.new { puts “Hey” }
Bloques
3.times do |i|
  puts i
end
b = Proc.new { puts “Hey” }
b = lambda { puts “Hey” }
Bloques
3.times do |i|
  puts i
end
b = Proc.new { puts “Hey” }
b = lambda { puts “Hey” }
b.call # => “Hey”
Bloques
Bloques
def saludo
  yield
end
Bloques
def saludo
  yield
end
saludo { puts “Hola Ruby” }
# => “Hola Ruby”
Bloques
def saludo
  yield
end
saludo { puts “Hola Ruby” }
# => “Hola Ruby”
saludo { 1 + 3 }
# => 4
Bloques
Bloques

def saludo
  world = “Mundo”
  yield(world)
end
Bloques

def saludo
  world = “Mundo”
  yield(world)
end
saludo { |w| puts “Hola #{w}” }
# => “Hola Mundo”
Bloques
Bloques

def por_dos(x)
  yield(x * 2)
end
Bloques

def por_dos(x)
  yield(x * 2)
end
por_dos(2) { |i| i + 1 }
# => 5
Operadores
Operadores
3 + 1 # => 4
Operadores
3 + 1 # => 4
3.+(1) # => 4
Operadores
3 + 1 # => 4
3.+(1) # => 4
x = [1, 2, 3]
x[0] # => 1
x.[](0) # => 1
Operadores
3 + 1 # => 4
3.+(1) # => 4
x = [1, 2, 3]
x[0] # => 1
x.[](0) # => 1
x[1] = ‘dos’
x.[]=(1, ‘dos’)
Operadores
Operadores
class Fixnum
  def +(i)
    self - i
  end

  def ==(otro)
    self == otro.to_i
  end
end
Metaprogramación
Metaprogramación

eval <<-eof
  def meta
    puts “No existo”
  end
eof
Metaprogramación

eval <<-eof
  def meta
    puts “No existo”
  end
eof
meta # => “No existo”
Metaprogramación
Metaprogramación
3.times do |i|
  eval <<-eof
    def metodo_#{i}
      #{i}
    end
  eof
end
Metaprogramación
3.times do |i|
  eval <<-eof
    def metodo_#{i}
      #{i}
    end
  eof
end
metodo_0 # => 0
metodo_1 # => 1
metodo_2 # => 2
Ruby
                              Edgar J. Suárez
                               e@dgar.org




México on Rails
http://MexicoOnRails.com.mx

Más contenido relacionado

La actualidad más candente

La actualidad más candente (12)

Python Segunda Sesion de Clases
Python Segunda Sesion de ClasesPython Segunda Sesion de Clases
Python Segunda Sesion de Clases
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en C
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 
Novedades en Symfony 2.3
Novedades en Symfony 2.3Novedades en Symfony 2.3
Novedades en Symfony 2.3
 
Ficheros y directorios
Ficheros y directoriosFicheros y directorios
Ficheros y directorios
 
Documentacion
DocumentacionDocumentacion
Documentacion
 
Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
DBIx::Class
DBIx::ClassDBIx::Class
DBIx::Class
 
Django
DjangoDjango
Django
 
Funciones de cadenas
Funciones de cadenasFunciones de cadenas
Funciones de cadenas
 
Julissa huaman hilari
Julissa huaman hilariJulissa huaman hilari
Julissa huaman hilari
 

Destacado

Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosEdgar Suarez
 
WorkshopCamp México - BDD
WorkshopCamp México - BDDWorkshopCamp México - BDD
WorkshopCamp México - BDDEdgar Suarez
 
WorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on Rails
WorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on RailsWorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on Rails
WorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on RailsEdgar Suarez
 
Productividad en el Equipo de Desarrollo de Software
Productividad en el Equipo de Desarrollo de SoftwareProductividad en el Equipo de Desarrollo de Software
Productividad en el Equipo de Desarrollo de Softwarejuliocasal
 
Productividad para programadores
Productividad para programadoresProductividad para programadores
Productividad para programadoresEdgar Suarez
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back KidEthos3
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaChris Lema
 

Destacado (8)

Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
 
WorkshopCamp México - BDD
WorkshopCamp México - BDDWorkshopCamp México - BDD
WorkshopCamp México - BDD
 
WorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on Rails
WorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on RailsWorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on Rails
WorkshopCamp Mexico 09 - Uniendo los puntos con Ruby on Rails
 
Productividad en el Equipo de Desarrollo de Software
Productividad en el Equipo de Desarrollo de SoftwareProductividad en el Equipo de Desarrollo de Software
Productividad en el Equipo de Desarrollo de Software
 
Productividad para programadores
Productividad para programadoresProductividad para programadores
Productividad para programadores
 
¿Se puede medir la productividad del área de desarrollo?
¿Se puede medir la productividad del área de desarrollo?¿Se puede medir la productividad del área de desarrollo?
¿Se puede medir la productividad del área de desarrollo?
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 

Similar a Introducción a Ruby

Similar a Introducción a Ruby (20)

2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Ruby
RubyRuby
Ruby
 
IntroducciónPHP.pptx
IntroducciónPHP.pptxIntroducciónPHP.pptx
IntroducciónPHP.pptx
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programas
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
 
Introducción a Clojure
Introducción a ClojureIntroducción a Clojure
Introducción a Clojure
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
Ruby
Ruby Ruby
Ruby
 
Ruby
RubyRuby
Ruby
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Taller ruby
Taller rubyTaller ruby
Taller ruby
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Python boloñesa
Python boloñesa Python boloñesa
Python boloñesa
 
Idiomatic Ruby
Idiomatic RubyIdiomatic Ruby
Idiomatic Ruby
 
De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutos
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 

Último

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
 
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
 
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
 
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
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 

Último (13)

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
 
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
 
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
 
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
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
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
 
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
 
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
 
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...
 
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
 
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)
 
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
 

Introducción a Ruby