taller ruby

Post on 12-Jul-2015

351 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ruby

¿Quién soy?

Juan Vázquez MurgaSoftware Analyst & Web Developer

jnillo9@gmail.com@jnillo9

Juan Vázquez MurgaSoftware 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?

1) Introducción al lenguaje

Índice

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 # Integerx = [] # Arrayx = {} # Hash…..

Conceptos Básicos

1) Variables x = “hola” # String

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

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

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

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

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]

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

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

Conceptos Básicos

3) Búcles: - Tenemos:

while [bool-exp] do ---end

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

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

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

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

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

if [bool-exp] do …else …end

Conceptos Básicos

4) Condicionales: - Tenemos:

if [bool-exp] do ---end

if [bool-exp] do …else …end

unless [bool-exp] do ---end

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

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

Class

SuperClass

Herencia Simple

OOP: clases, módulos y mixins

3) Mixin: - ¿Qué es?:

Class

SuperClass

¡¡¡MIXIN!!!

} Include OR extends

module 1

module 2

module N

.

.

.

Herencia Simple

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

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

top related