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

ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
Decharlas
 

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 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
estialvarez
 
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
estialvarez
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
Francis Wagner
 

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

Linux basico-8.PDF
Linux basico-8.PDFLinux basico-8.PDF
Linux basico-8.PDF
ULEAM
 

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_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_
 
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)
 
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

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (14)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 

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!!!