workshop camp méxico 09 - introducción a ruby

103
Ruby Edgar J. Suárez [email protected] México on Rails http://MexicoOnRails.com.mx

Upload: edgar-j-suarez

Post on 29-Jan-2018

888 views

Category:

Technology


1 download

TRANSCRIPT

Historia

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.newpersona.class # => Personaarreglo = Array.newarreglo.class # => Array

Todo es un objeto

persona = Persona.newpersona.class # => Personaarreglo = Array.newarreglo.class # => Array

arreglo = []arreglo.class # => Arrayobj = Object.newobj.class # => Object

Todo es un objeto

Todo es un objeto

1.class # => Fixnum3.2.class # => Float

Todo es un objeto

1.class # => Fixnum3.2.class # => Float

nil.class # => NilClasstrue.class # => TrueClassfalse.class # => FalseClassClass.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 # => true0 ? true : false # => true

La verdad

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

“hola” ? true : false # => true0 ? true : false # => true

nil ? true : false # => falsefalse ? 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)

end

end

@nombre = nombre

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

end

def metodo_de_instanciaend

Métodos

class Persona

end

def metodo_de_instanciaend

def self.metodo_de_claseend

Métodos descriptivos

Métodos descriptivos

def es_administrador? trueend

Métodos descriptivos

def es_administrador? trueend

def destruir_mundo! Gente.destroy_allend

Modificadores de acceso

class Persona def metodo_publico end

protected def metodo_protegido end

def otro_metodo_protegido end

private def metodo_privado endend

Modificadores de acceso

class Persona def metodo_publico end

def metodo_protegido end

def metodo_privado end

protected :metodo_protegido private :metodo_privadoend

Clases abiertas

Clases abiertasclass Persona def pedro puts “Pedro” endendp = Persona.newp.pedro # => Pedro

Clases abiertasclass Persona def pedro puts “Pedro” endendp = Persona.newp.pedro # => Pedro

class Persona def paco puts “Paco” endendp.paco # => Paco

Bloques

Bloques

3.times do |i| puts iend

Bloques

3.times do |i| puts iend

b = Proc.new { puts “Hey” }

Bloques

3.times do |i| puts iend

b = Proc.new { puts “Hey” }

b = lambda { puts “Hey” }

Bloques

3.times do |i| puts iend

b = Proc.new { puts “Hey” }

b = lambda { puts “Hey” }

b.call # => “Hey”

Bloques

Bloques

def saludo yieldend

Bloques

def saludo yieldend

saludo { puts “Hola Ruby” }# => “Hola Ruby”

Bloques

def saludo yieldend

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] # => 1x.[](0) # => 1

Operadores

3 + 1 # => 4

3.+(1) # => 4

x = [1, 2, 3]x[0] # => 1x.[](0) # => 1

x[1] = ‘dos’x.[]=(1, ‘dos’)

Operadores

Operadores

class Fixnum def +(i) self - i end

def ==(otro) self == otro.to_i endend

Metaprogramación

Metaprogramación

eval <<-eof def meta puts “No existo” endeof

Metaprogramación

eval <<-eof def meta puts “No existo” endeof

meta # => “No existo”

Metaprogramación

Metaprogramación3.times do |i| eval <<-eof def metodo_#{i} #{i} end eofend

Metaprogramación3.times do |i| eval <<-eof def metodo_#{i} #{i} end eofend

metodo_0 # => 0metodo_1 # => 1metodo_2 # => 2