72
Ruby

Taller ruby

Embed Size (px)

Citation preview

Page 1: Taller ruby

Ruby

Page 2: Taller ruby

¿Quién soy?

Page 3: Taller ruby

Juan Vázquez MurgaSoftware Analyst & Web Developer

[email protected]@jnillo9

Page 4: Taller ruby

Juan Vázquez MurgaSoftware Analyst & Web Developer

[email protected]@jnillo9

¡Ruby Developer!

Page 5: Taller ruby

Bibliografía Recomendada

Page 6: Taller ruby

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)....

Page 7: Taller ruby

¿Qué vamos a ver?

Page 8: Taller ruby

1) Introducción al lenguaje

Índice

Page 9: Taller ruby

1) Introducción al lenguaje

2) Vistazo al entorno: terminal, IDE, ...

Page 10: Taller ruby

1) Introducción al lenguaje

2) Vistazo al entorno: terminal, IDE, …

3) Conceptos Básicos: variables, funciones...

Page 11: Taller ruby

1) Introducción al lenguaje

2) Vistazo al entorno: terminal, IDE, …

3) Conceptos Básicos: variables, funciones...

4) OOP: clases, módulos, mixins...

Page 12: Taller ruby

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

Page 13: Taller ruby

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

Page 14: Taller ruby

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!

Page 15: Taller ruby

Introducción al lenguaje: Ruby

Yukihiro Matsumoto

Page 16: Taller ruby

Introducción al lenguaje: Ruby

Yukihiro Matsumoto

Perl + Smaltalk + Eiffel + Ada + Lisp

Page 17: Taller ruby

Introducción al lenguaje: Ruby

Yukihiro Matsumoto

Perl + Smaltalk + Eiffel + Ada + Lisp

Ruby(1995)

Page 18: Taller ruby

Introducción al lenguaje: Ruby

Yukihiro Matsumoto

Perl + Smaltalk + Eiffel + Ada + Lisp

Ruby(1995)

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

Page 19: Taller ruby

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”

Page 20: Taller ruby

El Entorno de Ruby

1) Instalación:– Simple → instalación como paquete del sistema

Page 21: Taller ruby

El Entorno de Ruby

1) Instalación:– Simple → instalación como paquete del sistema

– RVM → gestor de entornos Ruby

Page 22: Taller 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

Page 23: Taller 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

Page 24: Taller 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

– Entornos Web → Ruby on Rails

Page 25: Taller 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

– Entornos Web → Ruby on Rails

3) Herramientas: ¿IDE o no IDE? – Radrails, RubyGem, Netbeans,...

Page 26: Taller 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

– Entornos Web → Ruby on Rails

3) Herramientas: ¿IDE o no IDE? – Radrails, RubyGem, Netbeans,...

– ¡¡VIM!!

Page 27: Taller ruby

Conceptos Básicos

1) Variables

Page 28: Taller ruby

Conceptos Básicos

1) Variables x = “hola” # String

x = 2 # Integerx = [] # Arrayx = {} # Hash…..

Page 29: Taller ruby

Conceptos Básicos

1) Variables x = “hola” # String

x = 2 # Integerx = [] # Arrayx = {} # Hash…..## Declaración explicita:

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

Page 30: Taller ruby

Conceptos Básicos

1) Variables x = “hola” # String

x = 2 # Integerx = [] # Arrayx = {} # Hash…..## Declaración explicita:

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

## Inicializaciones:

x = Array.new(1) # ??

Page 31: Taller ruby

Conceptos Básicos

1) Variables x = “hola” # String

x = 2 # Integerx = [] # Arrayx = {} # Hash…..## Declaración explicita:

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

## Inicializaciones:

x = Array.new(1) # [nil]x = Array.new(1,1) # ??

Page 32: Taller ruby

Conceptos Básicos

1) Variables x = “hola” # String

x = 2 # Integerx = [] # Arrayx = {} # Hash…..## Declaración explicita:

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

## Inicializaciones:

x = Array.new(1) # [nil]x = Array.new(1,1) # [1]

Page 33: Taller ruby

Conceptos Básicos

2) Funciones

Page 34: Taller ruby

Conceptos Básicos

2) Funciones - Estructura:

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

Page 35: Taller ruby

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

Page 36: Taller ruby

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

Page 37: Taller ruby

Conceptos Básicos

3) Búcles: - Tenemos:

Page 38: Taller ruby

Conceptos Básicos

3) Búcles: - Tenemos:

While [bool-exp] do ---end

Page 39: Taller ruby

Conceptos Básicos

3) Búcles: - Tenemos:

while [bool-exp] do ---end

for [VAR] in [Array] do ---end

Page 40: Taller ruby

Conceptos Básicos

3) Búcles: - Tenemos:

while [bool-exp] do ---end

for [VAR] in [Array] do ---end

[Exp].each do [|Var|] ---end

Page 41: Taller ruby

Conceptos Básicos

3) Búcles: - Tenemos:

while [bool-exp] do ---end

for [VAR] in [Array] do ---end

[Exp].each do [|Var|] ---end

[Integer].times do ---end

Page 42: Taller ruby

Conceptos Básicos

3) Búcles: - Tenemos:

while [bool-exp] do ---end

for [VAR] in [Array] do ---end

[Exp].each do [|Var|] ---end

[Integer].times do ---end

loop do ….end

Page 43: Taller ruby

Conceptos Básicos

4) Condicionales: - Tenemos:

Page 44: Taller ruby

Conceptos Básicos

4) Condicionales: - Tenemos:

if [bool-exp] do ---end

Page 45: Taller ruby

Conceptos Básicos

4) Condicionales: - Tenemos:

if [bool-exp] do ---end

if [bool-exp] do …else …end

Page 46: Taller ruby

Conceptos Básicos

4) Condicionales: - Tenemos:

if [bool-exp] do ---end

if [bool-exp] do …else …end

unless [bool-exp] do ---end

Page 47: Taller ruby

Conceptos Básicos

4) Condicionales: - Tenemos:

if [bool-exp] do ---end

if [bool-exp] do …else …end

unless [bool-exp] do ---end

[exp]? Ac1 : Ac2

[Action] if [Exp]...

Page 48: Taller ruby

¿Pocos conceptos básico?

www.apidock.com

Page 49: Taller ruby

OOP: clases, módulos y mixin

Page 50: Taller ruby

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

Page 51: Taller ruby

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

Page 52: Taller ruby

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

Page 53: Taller ruby

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

Page 54: Taller ruby

OOP: clases, módulos y mixins

3) Mixin: - ¿Qué es?:

Page 55: Taller ruby

OOP: clases, módulos y mixins

3) Mixin: - ¿Qué es?:

Class

SuperClass

Herencia Simple

Page 56: Taller ruby

OOP: clases, módulos y mixins

3) Mixin: - ¿Qué es?:

Class

SuperClass

¡¡¡MIXIN!!!

} Include OR extends

module 1

module 2

module N

.

.

.

Herencia Simple

Page 57: Taller ruby

Block, Proc y Lambda

Page 58: Taller ruby

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

Page 59: Taller ruby

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

Page 60: Taller ruby

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

Page 61: Taller ruby

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.

Page 62: Taller ruby

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)...

Page 63: Taller ruby

Bloques, Proc y Lambda

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

“definitivo”.

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

# lambda_return método

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

# Proc.new

Page 64: Taller ruby

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

Page 65: Taller ruby

Manejo de hilos

Page 66: Taller ruby

Manejo de hilos

Declaración:

th = Thread.new([Parámetros]) { [|Parámetros|]

… }

Page 67: Taller ruby

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.

Page 68: Taller ruby

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.

Page 69: Taller ruby

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}"

Page 70: Taller ruby

Manos a la obra!!!

Page 71: Taller ruby
Page 72: Taller ruby