SlideShare una empresa de Scribd logo
1 de 72
Descargar para leer sin conexión
Ruby
¿Quién soy?
Juan Vázquez Murga
Software Analyst & Web Developer


         jnillo9@gmail.com
         @jnillo9
Juan Vázquez Murga
Software Analyst & Web Developer


         jnillo9@gmail.com
         @jnillo9


¡Ruby Developer!
Bibliografía Recomendada
Bibliografía

●   Libros:
    - The Ruby Programming Language
    - Design Patterns in Ruby
    - Programming Ruby: The Pragmatic Programmer's Guide
●   Webs:
    –   www.apidoc.com
    –   www.lang-ruby.org
    –   www.stackoverflow.com, github.com (gist)....
¿Qué vamos a ver?
Índice

1) Introducción al lenguaje
1) Introducción al lenguaje
2) Vistazo al entorno: terminal, IDE, ...
1) Introducción al lenguaje
2) Vistazo al entorno: terminal, IDE, …
3) Conceptos Básicos: variables, funciones...
1) Introducción al lenguaje
2) Vistazo al entorno: terminal, IDE, …
3) Conceptos Básicos: variables, funciones...
4) OOP: clases, módulos, mixins...
1) Introducción al lenguaje
2) Vistazo al entorno: terminal, IDE, …
3) Conceptos Básicos: variables, funciones...
4) OOP: clases, módulos, mixins...
5) Bloques, Procs y Lambda
1) Introducción al lenguaje
2) Vistazo al entorno: terminal, IDE, …
3) Conceptos Básicos: variables, funciones...
4) OOP: clases, módulos, mixins...
5) Bloques, Procs y Lambda
6) Manejo de hilos
1) Introducción al lenguaje
2) Vistazo al entorno: terminal, IDE, …
3) Conceptos Básicos: variables, funciones...
4) OOP: clases, módulos, mixins...
5) Bloques, Procs y Lambda
6) Manejo de hilos
7) ¡Manos a la obra!
Introducción al lenguaje: Ruby
         Yukihiro Matsumoto
Introducción al lenguaje: Ruby
         Yukihiro Matsumoto


         Perl + Smaltalk + Eiffel + Ada + Lisp
Introducción al lenguaje: Ruby
         Yukihiro Matsumoto


         Perl + Smaltalk + Eiffel + Ada + Lisp



                      Ruby
                     (1995)
Introducción al lenguaje: Ruby
                Yukihiro Matsumoto


                Perl + Smaltalk + Eiffel + Ada + Lisp



                             Ruby
                            (1995)

-> Multiparadígma + Interpretado + Dinámico + Tipado
Introducción al lenguaje: Ruby
                 Yukihiro Matsumoto


                 Perl + Smaltalk + Eiffel + Ada + Lisp



                              Ruby
                             (1995)

-> Multiparadígma + Interpretado + Dinámico + Tipado

  “Pretende ser un lenguaje natural, no sencillo”
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
–   RVM → gestor de entornos Ruby
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
–   RVM → gestor de entornos Ruby
2) Ejecución:
–   Irb → consola de Ruby
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
–   RVM → gestor de entornos Ruby
2) Ejecución:
–   Irb → consola de Ruby
–   Scripts → *.rb
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
–   RVM → gestor de entornos Ruby
2) Ejecución:
–   Irb → consola de Ruby
–   Scripts → *.rb
–   Entornos Web → Ruby on Rails
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
–   RVM → gestor de entornos Ruby
2) Ejecución:
–   Irb → consola de Ruby
–   Scripts → *.rb
–   Entornos Web → Ruby on Rails
3) Herramientas: ¿IDE o no IDE?
–   Radrails, RubyGem, Netbeans,...
El Entorno de Ruby
1) Instalación:
–   Simple → instalación como paquete del sistema
–   RVM → gestor de entornos Ruby
2) Ejecución:
–   Irb → consola de Ruby
–   Scripts → *.rb
–   Entornos Web → Ruby on Rails
3) Herramientas: ¿IDE o no IDE?
–   Radrails, RubyGem, Netbeans,...
–   ¡¡VIM!!
Conceptos Básicos
1) Variables
Conceptos Básicos
1) Variables
  x = “hola”   # String
  x=2          # Integer
  x = []       # Array
  x = {}       # Hash
  …..
Conceptos Básicos
1) Variables
 x = “hola” # String
 x=2        # Integer
 x = []     # Array
 x = {}     # Hash
 …..
 ## Declaración explicita:

 x = Array.new() # Array []
 x = Hash.new() # Hash {}
Conceptos Básicos
1) Variables
  x = “hola” # String
  x=2        # Integer
  x = []     # Array
  x = {}     # Hash
  …..
  ## Declaración explicita:

  x = Array.new() # Array []
  x = Hash.new() # Hash {}

  ## Inicializaciones:

  x = Array.new(1) # ??
Conceptos Básicos
1) Variables
  x = “hola” # String
  x=2        # Integer
  x = []     # Array
  x = {}     # Hash
  …..
  ## Declaración explicita:

  x = Array.new() # Array []
  x = Hash.new() # Hash {}

  ## Inicializaciones:

  x = Array.new(1) # [nil]
  x = Array.new(1,1) # ??
Conceptos Básicos
1) Variables
  x = “hola” # String
  x=2        # Integer
  x = []     # Array
  x = {}     # Hash
  …..
  ## Declaración explicita:

  x = Array.new() # Array []
  x = Hash.new() # Hash {}

  ## Inicializaciones:

  x = Array.new(1) # [nil]
  x = Array.new(1,1) # [1]
Conceptos Básicos
2) Funciones
Conceptos Básicos
2) Funciones
 - Estructura:

  def [nombre de la función] ([lista de parámetros])
    …..
  end
Conceptos Básicos
2) Funciones
 - Estructura:

  def [nombre de la función] ([lista de parámetros])
    …..
  end

 - Ejemplo:

  def par? (x)
   x%2==0
  end
Conceptos Básicos
2) Funciones
 - Estructura:

  def [nombre de la función] ([lista de parámetros])
    …..
  end

 - Ejemplo:

  def par? (x)
   x%2==0
  end
                  Y el Return???
Conceptos Básicos
3) Búcles:
  - Tenemos:
Conceptos Básicos
3) Búcles:
  - Tenemos:

    While [bool-exp] do
    ---
    end
Conceptos Básicos
3) Búcles:
  - Tenemos:

    while [bool-exp] do   for [VAR] in [Array] do
    ---                    ---
    end                   end
Conceptos Básicos
3) Búcles:
  - Tenemos:

    while [bool-exp] do     for [VAR] in [Array] do
    ---                      ---
    end                     end



    [Exp].each do [|Var|]
     ---
    end
Conceptos Básicos
3) Búcles:
  - Tenemos:

    while [bool-exp] do     for [VAR] in [Array] do
    ---                      ---
    end                     end



    [Exp].each do [|Var|]   [Integer].times do
     ---                     ---
    end                     end
Conceptos Básicos
3) Búcles:
  - Tenemos:

    while [bool-exp] do        for [VAR] in [Array] do
    ---                         ---
    end                        end
                       loop do
                       ….
                       end     [Integer].times do
    [Exp].each do [|Var|]
    ---                        ---
    end                        end
Conceptos Básicos
4) Condicionales:
  - Tenemos:
Conceptos Básicos
4) Condicionales:
  - Tenemos:

    if [bool-exp] do
     ---
    end
Conceptos Básicos
4) Condicionales:
  - Tenemos:
                       if [bool-exp] do
    if [bool-exp] do    …
     ---               else
    end                 …
                       end
Conceptos Básicos
4) Condicionales:
  - Tenemos:
                       if [bool-exp] do
    if [bool-exp] do    …
     ---               else
    end                 …
                       end

   unless [bool-exp]
   do
   ---
   end
Conceptos Básicos
4) Condicionales:
  - Tenemos:
                       if [bool-exp] do
    if [bool-exp] do    …
     ---               else
    end                 …
                       end

   unless [bool-exp]   [exp]? Ac1 : Ac2
   do
   ---                 [Action] if [Exp]
   end                 ...
¿Pocos conceptos básico?



    www.apidock.com
OOP: clases, módulos
     y mixin
OOP: clases, módulos y mixins

1) Clases:
  - Declaración:

   class [Nombre_clase]
      ...
   end

  - Ejemplo:
    class Coche
      # Declaración de atributos y acesos
      def initialize([parametros])
        #Incializamos atributos de instancia y de clase
      end
    end
OOP: clases, módulos y mixins

1) Clases:
  - Ejemplo:

    class Coche
        @@coches = 0 # Atributos de clase

          RUEDAS = 4         # Constantes

          attr_accessor :color,:modelo      # Acceso a atributos

          def initialize(color, modelo)
              @color = color
              @modelo = modelo
              @@coches += 1
          end
          …

    end
OOP: clases, módulos y mixins

2) Módulos:
  - Declaración:

     module [NombreModelo]
        …
     end

  - Ejemplo:

   module Acciones

     def cambiar_rueda
       puts “rueda cambiada con éxito!!”
     end

   end
OOP: clases, módulos y mixins

2) Módulos:
  - Ejemplo:

    module Acciones
       MAX_REP = 3

        def cambiar_rueda
          puts “rueda cambiada con éxito!!”
        end

        def self.hola
          puts “hola estoy es un modulo”
        end

    end
OOP: clases, módulos y mixins

3) Mixin:
  - ¿Qué es?:
OOP: clases, módulos y mixins

3) Mixin:
  - ¿Qué es?:


              Super
              Class
   Herencia
    Simple
              Class
OOP: clases, módulos y mixins

3) Mixin:
  - ¿Qué es?:
                      ¡¡¡MIXIN!!!



                                    }
              Super
              Class      module 1
   Herencia              module 2
    Simple                  .           Include OR extends
              Class         .
                            .
                         module N
Block, Proc y Lambda
Bloques, Proc y Lambda

1) Bloques:
  - ¿Qué es?:
    Piezas de código que se manejan como variables.
    Ej.-

    class Klase
      def metodo_1(&block) #Pasamos por parámetros el bloque
        block.call
      end
    end

    k = Klase.new
    k.method_1 do
      p “Hola a todos”
    end
Bloques, Proc y Lambda

2) Proc:
  - ¿Qué es?:
    Piezas de código que se almacenan en variables.
    Ej.-

    class Klase
      def metodo_1(proc) #Pasamos por parámetros el Proc
        proc.call
      end
    end

    k = Klase.new
     proc = Proc.new{
      p “Hola a todos”
    }
     k.method_1 proc
Bloques, Proc y Lambda

3) Lambda:
  - ¿Qué es?:
    Piezas de código que se almacenan en variables.
    Ej.-

    class Klase
      def metodo_1(proc) #Pasamos por parámetros el Proc
        proc.call
      end
    end

    k = Klase.new
     proc = Proc.new{
      p “Hola a todos”
    }
     k.method_1 proc
Bloques, Proc y Lambda

Block Vs Proc:

   - Block piezas de código que puedes hacer paso por
  referencia.
      - Su almacenamiento es efímero.

  - Proc permite almacenar piezas de código en variables.
     - Usarse múltiples veces.
     - Pasar como parámetros a métodos y funciones.
Bloques, Proc y Lambda

Proc Vs Lambda:
  - Proc no comprueba el numero de parámetros de
 entrada. Lambda si comprueba parámetros de entrada.

  p = Proc.new{|a, b, c| puts “El valor de a es #{a} y b es #{b} y c es
      #{c.class}"}

  p.call (4,5) # El valor de a es 4 y b es 5 y c NilClass

  l = lambda{|a, b, c| puts "Parametro #{a} y a #{b} y a #{c.class}"}
  l.call (4,5) # ArgumentError: wrong number of arguments (2 for 3)...
Bloques, Proc y Lambda

Proc Vs Lambda:
  - Lambda     tiene “mini-returns” y el return en un Proc es
 “definitivo”.

  def proc_return
     Proc.new { return "Proc.new"}.call
     return "proc_return metodo"
   end

  # Proc.new

  def lambda_return
   lambda { return "lambda" }.call
   return "lambda_return método"
  end

  # lambda_return método
Bloques, Proc y Lambda

Proc Vs Lambda:
 - Proc no devuelve valores y Lambda si puede devolver
 valores por que actúa como método.
 def generic_return(code)
  one, two = 1, 2
  three, four = code.call(one, two)
  return "Give me a #{three} and a #{four}"
 end

 puts generic_return(lambda { |x, y| return x + 2, y + 2 })
 puts generic_return(Proc.new { |x, y| return x + 2, y + 2 })
 puts generic_return(Proc.new { |x, y| x + 2; y + 2 })
 puts generic_return(Proc.new { |x, y| [x + 2, y + 2] })

 # => Give me a 3 and a 4
 # => *.rb:X: unexpected return (LocalJumpError)
 # => Give me a 4 and a
 # => Give me a 3 and a 4
Manejo de hilos
Manejo de hilos
Declaración:
th = Thread.new([Parámetros]) { [|Parámetros|]
    …}
Manejo de hilos
Declaración:
th = Thread.new([Parámetros]) { [|Parámetros|]
     …}

Ejecución:
th.join   # Ejecutamos el código almacenado en este hilo

Variables de hilos:
Thread.current['variable'] # 'variable' es una variable almacenada
                          # en el hilo actual.
Manejo de hilos
Declaración:
th = Thread.new([Parámetros]) { [|Parámetros|]
     …}

Ejecución:
th.join   # Ejecutamos el código almacenado en este hilo

Variables de hilos:
Thread.current['variable'] # 'variable' es una variable almacenada
                           # en el hilo actual.
Métodos interesantes:
    Thread.list    # Listado de hilos creados
    Thread::kill   # Elimina un hilo.
Manejo de hilos
Ejemplo:
  count = 0
  arr = []
  10.times do |i|
    arr[i] = Thread.new {
        sleep(rand(0)/10.0)
        Thread.current["mycount"] = count
        count += 1
    }
  end
  arr.each {|t| t.join; print t["mycount"], ", " }
  puts "count = #{count}"
Manos a la obra!!!
Taller ruby
Taller ruby

Más contenido relacionado

La actualidad más candente (20)

Taller I Coreis Python 10112009
Taller I Coreis Python 10112009Taller I Coreis Python 10112009
Taller I Coreis Python 10112009
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
 
02 Bases Del Lenguaje Java
02   Bases Del Lenguaje Java02   Bases Del Lenguaje Java
02 Bases Del Lenguaje Java
 
Taller completo
Taller completoTaller completo
Taller completo
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
Intro a ruby
Intro a rubyIntro a ruby
Intro a ruby
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
De Cero A Python En 45 Min
De Cero A Python En 45 MinDe Cero A Python En 45 Min
De Cero A Python En 45 Min
 
Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
 
El lenguaje de pogramación C++
El lenguaje de pogramación C++El lenguaje de pogramación C++
El lenguaje de pogramación C++
 
Tutorial de php
Tutorial de phpTutorial de php
Tutorial de php
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Introduccion lenguaje java
Introduccion lenguaje javaIntroduccion lenguaje java
Introduccion lenguaje java
 
Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.
 
Lenguajec++
Lenguajec++Lenguajec++
Lenguajec++
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Blind X Path Injection
Blind X Path InjectionBlind X Path Injection
Blind X Path Injection
 

Destacado

Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsASPgems
 
Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2estialvarez
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingAlberto Perdomo
 
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLJosé Alfredo Ramírez
 
Ruby Mola (y por qué)
Ruby Mola (y por qué)Ruby Mola (y por qué)
Ruby Mola (y por qué)Sergio Gil
 
Curso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de DeustoCurso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de Deustoestialvarez
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosAlberto Perdomo
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endvideo2brain_mx
 
Desarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsDesarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsErnesto Jiménez
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsFran Diéguez
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - SassLourdes Montano
 
Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con SuperpoderesEdgar Parada
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsAlberto Perdomo
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaJose Gomez Castaño
 

Destacado (20)

Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2
 
Ruby Facil
Ruby FacilRuby Facil
Ruby Facil
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
 
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
 
Ruby Mola (y por qué)
Ruby Mola (y por qué)Ruby Mola (y por qué)
Ruby Mola (y por qué)
 
Ruby On Rails (Parte 1. Introducción)
Ruby On Rails (Parte 1. Introducción)Ruby On Rails (Parte 1. Introducción)
Ruby On Rails (Parte 1. Introducción)
 
Ruby On Rails (Parte II))
Ruby On Rails (Parte II))Ruby On Rails (Parte II))
Ruby On Rails (Parte II))
 
Curso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de DeustoCurso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de Deusto
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-end
 
Desarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on RailsDesarrollo Ágil y Ruby on Rails
Desarrollo Ágil y Ruby on Rails
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y Rails
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - Sass
 
Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con Superpoderes
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en Astronomía
 

Similar a Taller ruby

Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para VisuseJose Luis Lopez Pino
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]RootedCON
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónEdison López Díaz
 
Linux basico-8.PDF
Linux basico-8.PDFLinux basico-8.PDF
Linux basico-8.PDFULEAM
 
Shell script
Shell scriptShell script
Shell scriptuniminuto
 
Introduction to linux for bioinformatics
Introduction to linux for bioinformaticsIntroduction to linux for bioinformatics
Introduction to linux for bioinformaticsAlberto Labarga
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMjavier ramirez
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Maztherprozh
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Maztherprozh
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 

Similar a Taller ruby (20)

Desarrollar un módulo para Visuse
Desarrollar un módulo para VisuseDesarrollar un módulo para Visuse
Desarrollar un módulo para Visuse
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
 
Ruby
Ruby Ruby
Ruby
 
04 j flex
04 j flex04 j flex
04 j flex
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
 
Linux basico-8.PDF
Linux basico-8.PDFLinux basico-8.PDF
Linux basico-8.PDF
 
02 introduccion a python
02 introduccion a python02 introduccion a python
02 introduccion a python
 
Perl1 escalares
Perl1 escalaresPerl1 escalares
Perl1 escalares
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
C ++.ppt
C ++.pptC ++.ppt
C ++.ppt
 
Shell script
Shell scriptShell script
Shell script
 
Introduction to linux for bioinformatics
Introduction to linux for bioinformaticsIntroduction to linux for bioinformatics
Introduction to linux for bioinformatics
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Programación Funcional con Scheme
Programación Funcional con SchemeProgramación Funcional con Scheme
Programación Funcional con Scheme
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Los scripts de linux
Los scripts de linuxLos scripts de linux
Los scripts de linux
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 

Último

Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfangelinebocanegra1
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2montoyagabriela340
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.marianarodriguezc797
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....Aaron Betancourt
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...OLGAMILENAMONTAEZNIO
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOSDESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOSreinamanuela20
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfcastrodanna185
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu softwareFrancisco Javier Barrena
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
La Electricidad y La Electrónica por el grado 10-5
La Electricidad y La Electrónica por el grado 10-5La Electricidad y La Electrónica por el grado 10-5
La Electricidad y La Electrónica por el grado 10-5CamilaCordoba30
 
Taller de tecnología conclucion tonotoss
Taller de tecnología conclucion tonotossTaller de tecnología conclucion tonotoss
Taller de tecnología conclucion tonotossgijhonpa
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
PPT de introducción a la unidad 1 de 5 Basico.pptx
PPT de introducción a la unidad 1 de 5 Basico.pptxPPT de introducción a la unidad 1 de 5 Basico.pptx
PPT de introducción a la unidad 1 de 5 Basico.pptxProfeVivianaRS
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSLincangoKevin
 
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOSDESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOSreinamanuela20
 

Último (20)

Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdf
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOSDESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdf
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
La Electricidad y La Electrónica por el grado 10-5
La Electricidad y La Electrónica por el grado 10-5La Electricidad y La Electrónica por el grado 10-5
La Electricidad y La Electrónica por el grado 10-5
 
Taller de tecnología conclucion tonotoss
Taller de tecnología conclucion tonotossTaller de tecnología conclucion tonotoss
Taller de tecnología conclucion tonotoss
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
PPT de introducción a la unidad 1 de 5 Basico.pptx
PPT de introducción a la unidad 1 de 5 Basico.pptxPPT de introducción a la unidad 1 de 5 Basico.pptx
PPT de introducción a la unidad 1 de 5 Basico.pptx
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
 
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOSDESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
 

Taller ruby

  • 3. Juan Vázquez Murga Software Analyst & Web Developer jnillo9@gmail.com @jnillo9
  • 4. Juan Vázquez Murga Software Analyst & Web Developer jnillo9@gmail.com @jnillo9 ¡Ruby Developer!
  • 6. Bibliografía ● Libros: - The Ruby Programming Language - Design Patterns in Ruby - Programming Ruby: The Pragmatic Programmer's Guide ● Webs: – www.apidoc.com – www.lang-ruby.org – www.stackoverflow.com, github.com (gist)....
  • 9. 1) Introducción al lenguaje 2) Vistazo al entorno: terminal, IDE, ...
  • 10. 1) Introducción al lenguaje 2) Vistazo al entorno: terminal, IDE, … 3) Conceptos Básicos: variables, funciones...
  • 11. 1) Introducción al lenguaje 2) Vistazo al entorno: terminal, IDE, … 3) Conceptos Básicos: variables, funciones... 4) OOP: clases, módulos, mixins...
  • 12. 1) Introducción al lenguaje 2) Vistazo al entorno: terminal, IDE, … 3) Conceptos Básicos: variables, funciones... 4) OOP: clases, módulos, mixins... 5) Bloques, Procs y Lambda
  • 13. 1) Introducción al lenguaje 2) Vistazo al entorno: terminal, IDE, … 3) Conceptos Básicos: variables, funciones... 4) OOP: clases, módulos, mixins... 5) Bloques, Procs y Lambda 6) Manejo de hilos
  • 14. 1) Introducción al lenguaje 2) Vistazo al entorno: terminal, IDE, … 3) Conceptos Básicos: variables, funciones... 4) OOP: clases, módulos, mixins... 5) Bloques, Procs y Lambda 6) Manejo de hilos 7) ¡Manos a la obra!
  • 15. Introducción al lenguaje: Ruby Yukihiro Matsumoto
  • 16. Introducción al lenguaje: Ruby Yukihiro Matsumoto Perl + Smaltalk + Eiffel + Ada + Lisp
  • 17. Introducción al lenguaje: Ruby Yukihiro Matsumoto Perl + Smaltalk + Eiffel + Ada + Lisp Ruby (1995)
  • 18. Introducción al lenguaje: Ruby Yukihiro Matsumoto Perl + Smaltalk + Eiffel + Ada + Lisp Ruby (1995) -> Multiparadígma + Interpretado + Dinámico + Tipado
  • 19. Introducción al lenguaje: Ruby Yukihiro Matsumoto Perl + Smaltalk + Eiffel + Ada + Lisp Ruby (1995) -> Multiparadígma + Interpretado + Dinámico + Tipado “Pretende ser un lenguaje natural, no sencillo”
  • 20. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema
  • 21. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema – RVM → gestor de entornos Ruby
  • 22. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema – RVM → gestor de entornos Ruby 2) Ejecución: – Irb → consola de Ruby
  • 23. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema – RVM → gestor de entornos Ruby 2) Ejecución: – Irb → consola de Ruby – Scripts → *.rb
  • 24. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema – RVM → gestor de entornos Ruby 2) Ejecución: – Irb → consola de Ruby – Scripts → *.rb – Entornos Web → Ruby on Rails
  • 25. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema – RVM → gestor de entornos Ruby 2) Ejecución: – Irb → consola de Ruby – Scripts → *.rb – Entornos Web → Ruby on Rails 3) Herramientas: ¿IDE o no IDE? – Radrails, RubyGem, Netbeans,...
  • 26. El Entorno de Ruby 1) Instalación: – Simple → instalación como paquete del sistema – RVM → gestor de entornos Ruby 2) Ejecución: – Irb → consola de Ruby – Scripts → *.rb – Entornos Web → Ruby on Rails 3) Herramientas: ¿IDE o no IDE? – Radrails, RubyGem, Netbeans,... – ¡¡VIM!!
  • 28. Conceptos Básicos 1) Variables x = “hola” # String x=2 # Integer x = [] # Array x = {} # Hash …..
  • 29. Conceptos Básicos 1) Variables x = “hola” # String x=2 # Integer x = [] # Array x = {} # Hash ….. ## Declaración explicita: x = Array.new() # Array [] x = Hash.new() # Hash {}
  • 30. Conceptos Básicos 1) Variables x = “hola” # String x=2 # Integer x = [] # Array x = {} # Hash ….. ## Declaración explicita: x = Array.new() # Array [] x = Hash.new() # Hash {} ## Inicializaciones: x = Array.new(1) # ??
  • 31. Conceptos Básicos 1) Variables x = “hola” # String x=2 # Integer x = [] # Array x = {} # Hash ….. ## Declaración explicita: x = Array.new() # Array [] x = Hash.new() # Hash {} ## Inicializaciones: x = Array.new(1) # [nil] x = Array.new(1,1) # ??
  • 32. Conceptos Básicos 1) Variables x = “hola” # String x=2 # Integer x = [] # Array x = {} # Hash ….. ## Declaración explicita: x = Array.new() # Array [] x = Hash.new() # Hash {} ## Inicializaciones: x = Array.new(1) # [nil] x = Array.new(1,1) # [1]
  • 34. Conceptos Básicos 2) Funciones - Estructura: def [nombre de la función] ([lista de parámetros]) ….. end
  • 35. Conceptos Básicos 2) Funciones - Estructura: def [nombre de la función] ([lista de parámetros]) ….. end - Ejemplo: def par? (x) x%2==0 end
  • 36. Conceptos Básicos 2) Funciones - Estructura: def [nombre de la función] ([lista de parámetros]) ….. end - Ejemplo: def par? (x) x%2==0 end Y el Return???
  • 38. Conceptos Básicos 3) Búcles: - Tenemos: While [bool-exp] do --- end
  • 39. Conceptos Básicos 3) Búcles: - Tenemos: while [bool-exp] do for [VAR] in [Array] do --- --- end end
  • 40. Conceptos Básicos 3) Búcles: - Tenemos: while [bool-exp] do for [VAR] in [Array] do --- --- end end [Exp].each do [|Var|] --- end
  • 41. Conceptos Básicos 3) Búcles: - Tenemos: while [bool-exp] do for [VAR] in [Array] do --- --- end end [Exp].each do [|Var|] [Integer].times do --- --- end end
  • 42. Conceptos Básicos 3) Búcles: - Tenemos: while [bool-exp] do for [VAR] in [Array] do --- --- end end loop do …. end [Integer].times do [Exp].each do [|Var|] --- --- end end
  • 44. Conceptos Básicos 4) Condicionales: - Tenemos: if [bool-exp] do --- end
  • 45. Conceptos Básicos 4) Condicionales: - Tenemos: if [bool-exp] do if [bool-exp] do … --- else end … end
  • 46. Conceptos Básicos 4) Condicionales: - Tenemos: if [bool-exp] do if [bool-exp] do … --- else end … end unless [bool-exp] do --- end
  • 47. Conceptos Básicos 4) Condicionales: - Tenemos: if [bool-exp] do if [bool-exp] do … --- else end … end unless [bool-exp] [exp]? Ac1 : Ac2 do --- [Action] if [Exp] end ...
  • 48. ¿Pocos conceptos básico? www.apidock.com
  • 50. OOP: clases, módulos y mixins 1) Clases: - Declaración: class [Nombre_clase] ... end - Ejemplo: class Coche # Declaración de atributos y acesos def initialize([parametros]) #Incializamos atributos de instancia y de clase end end
  • 51. OOP: clases, módulos y mixins 1) Clases: - Ejemplo: class Coche @@coches = 0 # Atributos de clase RUEDAS = 4 # Constantes attr_accessor :color,:modelo # Acceso a atributos def initialize(color, modelo) @color = color @modelo = modelo @@coches += 1 end … end
  • 52. OOP: clases, módulos y mixins 2) Módulos: - Declaración: module [NombreModelo] … end - Ejemplo: module Acciones def cambiar_rueda puts “rueda cambiada con éxito!!” end end
  • 53. OOP: clases, módulos y mixins 2) Módulos: - Ejemplo: module Acciones MAX_REP = 3 def cambiar_rueda puts “rueda cambiada con éxito!!” end def self.hola puts “hola estoy es un modulo” end end
  • 54. OOP: clases, módulos y mixins 3) Mixin: - ¿Qué es?:
  • 55. OOP: clases, módulos y mixins 3) Mixin: - ¿Qué es?: Super Class Herencia Simple Class
  • 56. OOP: clases, módulos y mixins 3) Mixin: - ¿Qué es?: ¡¡¡MIXIN!!! } Super Class module 1 Herencia module 2 Simple . Include OR extends Class . . module N
  • 57. Block, Proc y Lambda
  • 58. Bloques, Proc y Lambda 1) Bloques: - ¿Qué es?: Piezas de código que se manejan como variables. Ej.- class Klase def metodo_1(&block) #Pasamos por parámetros el bloque block.call end end k = Klase.new k.method_1 do p “Hola a todos” end
  • 59. Bloques, Proc y Lambda 2) Proc: - ¿Qué es?: Piezas de código que se almacenan en variables. Ej.- class Klase def metodo_1(proc) #Pasamos por parámetros el Proc proc.call end end k = Klase.new proc = Proc.new{ p “Hola a todos” } k.method_1 proc
  • 60. Bloques, Proc y Lambda 3) Lambda: - ¿Qué es?: Piezas de código que se almacenan en variables. Ej.- class Klase def metodo_1(proc) #Pasamos por parámetros el Proc proc.call end end k = Klase.new proc = Proc.new{ p “Hola a todos” } k.method_1 proc
  • 61. Bloques, Proc y Lambda Block Vs Proc: - Block piezas de código que puedes hacer paso por referencia. - Su almacenamiento es efímero. - Proc permite almacenar piezas de código en variables. - Usarse múltiples veces. - Pasar como parámetros a métodos y funciones.
  • 62. Bloques, Proc y Lambda Proc Vs Lambda: - Proc no comprueba el numero de parámetros de entrada. Lambda si comprueba parámetros de entrada. p = Proc.new{|a, b, c| puts “El valor de a es #{a} y b es #{b} y c es #{c.class}"} p.call (4,5) # El valor de a es 4 y b es 5 y c NilClass l = lambda{|a, b, c| puts "Parametro #{a} y a #{b} y a #{c.class}"} l.call (4,5) # ArgumentError: wrong number of arguments (2 for 3)...
  • 63. Bloques, Proc y Lambda Proc Vs Lambda: - Lambda tiene “mini-returns” y el return en un Proc es “definitivo”. def proc_return Proc.new { return "Proc.new"}.call return "proc_return metodo" end # Proc.new def lambda_return lambda { return "lambda" }.call return "lambda_return método" end # lambda_return método
  • 64. Bloques, Proc y Lambda Proc Vs Lambda: - Proc no devuelve valores y Lambda si puede devolver valores por que actúa como método. def generic_return(code) one, two = 1, 2 three, four = code.call(one, two) return "Give me a #{three} and a #{four}" end puts generic_return(lambda { |x, y| return x + 2, y + 2 }) puts generic_return(Proc.new { |x, y| return x + 2, y + 2 }) puts generic_return(Proc.new { |x, y| x + 2; y + 2 }) puts generic_return(Proc.new { |x, y| [x + 2, y + 2] }) # => Give me a 3 and a 4 # => *.rb:X: unexpected return (LocalJumpError) # => Give me a 4 and a # => Give me a 3 and a 4
  • 66. Manejo de hilos Declaración: th = Thread.new([Parámetros]) { [|Parámetros|] …}
  • 67. Manejo de hilos Declaración: th = Thread.new([Parámetros]) { [|Parámetros|] …} Ejecución: th.join # Ejecutamos el código almacenado en este hilo Variables de hilos: Thread.current['variable'] # 'variable' es una variable almacenada # en el hilo actual.
  • 68. Manejo de hilos Declaración: th = Thread.new([Parámetros]) { [|Parámetros|] …} Ejecución: th.join # Ejecutamos el código almacenado en este hilo Variables de hilos: Thread.current['variable'] # 'variable' es una variable almacenada # en el hilo actual. Métodos interesantes: Thread.list # Listado de hilos creados Thread::kill # Elimina un hilo.
  • 69. Manejo de hilos Ejemplo: count = 0 arr = [] 10.times do |i| arr[i] = Thread.new { sleep(rand(0)/10.0) Thread.current["mycount"] = count count += 1 } end arr.each {|t| t.join; print t["mycount"], ", " } puts "count = #{count}"
  • 70. Manos a la obra!!!