introducción a ruby

36
Introducción a Ruby Introducción a Ruby 8vas Jornadas Regionales de Software Libre 2008-08-20 Diego Algorta Casamayou [email protected]

Upload: diego-algorta

Post on 27-Jun-2015

545 views

Category:

Technology


0 download

DESCRIPTION

Introducción al lenguaje de programación Ruby

TRANSCRIPT

Page 1: Introducción a Ruby

Introducción a RubyIntroducción a Ruby

8vas Jornadas Regionales de Software Libre

2008-08-20

Diego Algorta Casamayou

[email protected]

Page 2: Introducción a Ruby

¿Y quién es este?¿Y quién es este?

● Programando desde 1985 con mi TK-85

● Aprendiendo Ruby desde el 2003

● Traducción del sitio oficial ruby-lang.org/es

● Trabajando con Ruby desde 2007

● Area17.com, CitrusByte.com (muy poco), ActiveRain.com

Page 3: Introducción a Ruby

ObjetivoObjetivo

Despertar el interés de los asistentes en este lenguaje de programación y sus virtudes.

Page 4: Introducción a Ruby

¿Qué es Ruby?¿Qué es Ruby?

Un lenguaje de programación dinámico, con foco en la simplicidad y productividad.

Tiene una sintaxis elegante que se siente natural al leerla y escribirla.

Page 5: Introducción a Ruby

OrígenesOrígenes

¿De dónde viene Ruby?

Page 6: Introducción a Ruby

Yukihiro 'Matz' MatsumotoYukihiro 'Matz' Matsumoto

Dibujo original de WhyTheLuckyStiff.Fotografía: http://www.flickr.com/photos/rooreynolds/243810988/ Licencia: http://creativecommons.org/licenses/by-nc/2.0/

Page 7: Introducción a Ruby

Yukihiro 'Matz' MatsumotoYukihiro 'Matz' Matsumoto

Fotografía: http://www.flickr.com/photos/john_lam/1910968816/ Licencia: http://creativecommons.org/licenses/by-nc-sa/2.0/

Page 8: Introducción a Ruby

Yukihiro 'Matz' MatsumotoYukihiro 'Matz' Matsumoto

“Quería un lenguaje que fuera más poderoso que Perl y más orientado a objetos que Python.”

“Ruby está diseñado para hacer que la programación no sólo sea fácil sino también entretenida.”

● Mayormente influenciado por Smalltalk y Perl.

Page 9: Introducción a Ruby

HitosHitos

● 1993 – Comienza el desarrollo

● 1995 – Lanzado al público

● 2001 – Programming Ruby 1ra edición (1.6)

● 2004 – Programming Ruby 2da edición (1.8)

● 2004 – El catalizador: Ruby on Rails

● 2008 – Programming Ruby 3ra edición (1.9)

Page 10: Introducción a Ruby

CaracterísticasCaracterísticas

● Orientado a objetos

● Tipado dinámico

● Herencia simple

● Módulos

● Mixins (casi herencia múltiple)

● Tendencia a la programación declarativa

● Afín a la creación de lenguajes específicos de dominio (DSL)

Page 11: Introducción a Ruby

Algunos ejemplosAlgunos ejemplos

¿Cómo se ve el código?

Page 12: Introducción a Ruby

ConvencionesConvenciones

● var_local

● @var_de_instancia

● @@var_de_clase

● $var_global

● Clase

● CONSTANTE

● :symbol

● objeto.metodo_de_instancia

● Clase.metodo_de_clase

● soy_peligroso!

● es_o_no_es?

● # Comentario

Page 13: Introducción a Ruby

Todo es un objetoTodo es un objeto

'Hola Mundo'.length #=> 10

'Soy un String'.index('u') #=> 4

-1234.abs #=> 1234

1234 + 1 == 1234.+(1) #=> true

1234.to_s #=> '1234'

1234.to_s.reverse #=> '4321'

1234.to_s.reverse.to_i #=> 4321

Page 14: Introducción a Ruby

Clases, Accesores y ModificadoresClases, Accesores y Modificadores

class Persona def nombre return @nombre end def nombre=(nombre) @nombre = nombre return @nombre endend

Page 15: Introducción a Ruby

Clases, Accesores y ModificadoresClases, Accesores y Modificadores

class Persona def nombre @nombre end def nombre=(nombre) @nombre = nombre endend

Page 16: Introducción a Ruby

Shortcuts: attr_*Shortcuts: attr_*

class Persona attr_accessor :nombre, :apellido attr_reader :id attr_writer :notasend

● Programación declarativa● Clases 'abiertas'

Page 17: Introducción a Ruby

Varios conceptos en un ejemploVarios conceptos en un ejemplo

class Persona def nombre_completo(pre = '') 'Yo soy: ' + pre + "#{apellido.upcase}, #{nombre}" endend

p = Persona.newp.nombre, p.apellido = 'Diego', 'Algorta'puts p.nombre_completo#=> "Yo soy: ALGORTA, Diego"puts p.nombre_completo('Lic. ')#=> "Yo soy: Lic. ALGORTA, Diego"

Page 18: Introducción a Ruby

Arrays y HashesArrays y Hashes

animales = ['perro', 'gato', 'caballo']cosas = ['un string', 243, Persona.new]datos = { :nombre => 'Diego', :apellido => 'Algorta', 'hijos' => ['Florencia', 'Facundo']}datos[:nombre] -> 'Diego'datos['hijos'][0] -> 'Florencia'

Page 19: Introducción a Ruby

BloquesBloques

● Trozos de código que se pueden asociar a la invocación de un método, como un parámetro más.

{ # este es un bloque inline }

do # este es otro bloque # con más lineasend

Page 20: Introducción a Ruby

IteradoresIteradores

# animales = ['perro', 'gato', 'caballo']animales = %w( perro gato caballo )animales.each do |animal| print animal, ' 'end #=> 'perro gato caballo '2.times { print 'hola' } #=> 'holahola'3.upto(5) { |i| puts "numero #{i + 1} " }#=>"numero 4""numero 5""numero 6"

Page 21: Introducción a Ruby

Expresiones regularesExpresiones regulares

● Aclaración: estos ejemplos no le hacen justicia al poder de las expresiones regulares

a = Regexp.new('^\s*[a-z]')b = /^\s*[a-z]/a == b #=> true'Ejemplo de String' =~ /plo/ #=> 4

Page 22: Introducción a Ruby

Más sobre expresiones regularesMás sobre expresiones regulares

a = 'mi frase de ejemplo'a.gsub(/[aeiou]/, 'X')#=> 'mX frXsX dX XjXmplX'a#=> 'mi frase de ejemplo'a.gsub!(/[aeiou]/) do |vocal| vocal.upcaseend#=> 'mI frAsE dE EjEmplO'a#=> 'mI frAsE dE EjEmplO'

Page 23: Introducción a Ruby

MódulosMódulos

● Los módulos son la forma de agrupar métodos, clases y constantes.

● Proveen 2 funcionalidades

– Espacio de nombres (namespace)

– Compartición de código mediante Mixins

Page 24: Introducción a Ruby

MixinsMixins

● Los módulos se pueden incluir dentro de la definición de una clase para que ésta automáticamente incorpore la funcionalidad provista por el módulo.

● Se lo puede ver como una forma de tener herencia múltiple, aunque no es exactamente lo mismo.

Page 25: Introducción a Ruby

Ejemplo de MixinEjemplo de Mixin

class Alumno < Persona # Incorporamos: <, <=, ==, >=, >, between? include Comparable # Mixin desde un módulo attr_accessor :nro # Comparable requiere este método. def <=>(otro_alumno) self.nro <=> otro_alumno.nro endend# Asignación paralelaa, b, c = Alumno.new, Alumno.new, Alumno.newa.nro, b.nro, c.nro = 25, 30, 15a >= b #=> falsea.between?(c, b) #=> true

Page 26: Introducción a Ruby

Más allá del lenguajeMás allá del lenguaje

¿Qué pasa al rededor de Ruby?

Page 27: Introducción a Ruby

ImplementacionesImplementaciones

● MRI (C, Matz Ruby Implementation) < 1.9

● YARV (C, la nueva “oficial”) >= 1.9

● JRuby (Java, financiado por Sun)

● IronRuby (.NET, financiado por Microsoft)

● MagLev (basado en la VM de smalltalk de GemStone)

● Rubinius (poco C++, mucho Ruby, financiado por EngineYard)

Page 28: Introducción a Ruby

RubySpecRubySpec

● www.rubyspec.org

– Es un proyecto para escribir una especificación completa y ejecutable del lenguaje de programación Ruby.

– Originado por Rubinius, pero hoy en día todas las implementaciones aportan para lograr una base común.

Page 29: Introducción a Ruby

IDEsIDEs

● TextMate (Mac), VIM, EMACS, gedit, scite, etc.

● NetBeans – www.netbeans.org/products/ruby

● Eclipse + RDT – rubyeclipse.sourceforge.net

● RadRails – www.aptana.com/rails

Page 30: Introducción a Ruby

LibrosLibros

● Pragmatic Programmers

– PickAxe: Programming Ruby, Learn to Program, From Java to Ruby, Enterprise Integration with Ruby, RubyQT, Best of RubyQuiz, y varios más.

● O'Reilly

– The Ruby Programming Language, Ruby Cookbook, Learning Ruby, y varios más.

● Addison-Wesley Professional Ruby Series

– The Ruby way, The Rails Way, y más.

● Manning

– Ruby in Practice, Ruby for Rails, y más.

Page 31: Introducción a Ruby

RubyConfRubyConf

● Conferencia anual organizada por RubyCentral– 2001

– 2002

– 2003

– 2004

– 2005

– 2006

– 2007

– 2008

Page 32: Introducción a Ruby

WebFrameworksWebFrameworks

Arrow – Borges – Camping – Cerise – Coset – Halcyon –

IOWA – Mack – Maveric – merb – Nitro – Rack –

Ramaze – Ruby on Rails – Sinatra – ServerSide – Unicycle – Vintage – Waves – Wee –

Wisteria – Wuby

Fuente: http://ramaze.net/

Page 33: Introducción a Ruby

WebFrameworksWebFrameworks

Arrow – Borges – Camping – Cerise – Coset – Halcyon –

IOWA – Mack – Maveric – merb – Nitro – Rack –

Ramaze – Ruby on Rails – Sinatra – ServerSide – Unicycle – Vintage – Waves – Wee –

Wisteria – Wuby

Fuente: http://ramaze.net/

Page 34: Introducción a Ruby

GUIGUI

Tk – FXRuby – wxRuby – Ruby/GTK – Ruby/Gnome2 – Ruby/QT – Shoes

Page 35: Introducción a Ruby

¿Preguntas?¿Preguntas?

[email protected]

www.rubyuruguay.org

www.rubyargentina.com.ar

www.ruby-lang.org/es:Ruby en 20 minutos

Ruby desde otros lenguajes

Page 36: Introducción a Ruby

Creative CommonsCreative Commons

Esta obra está licenciada bajo una Licencia Atribución­No Comercial­Compartir Obras Derivadas Igual 3.0 Unported de 

Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by­nc­sa/3.0/ o envíenos una carta a  Creative Commons, 171 Second Street, Suite 300, San 

Francisco, California, 94105, USA.