Ruby: a Programmer's best friend

21

description

Charla introductoria al lenguaje Ruby dictada por Manuel Corrales, en el marco de los festejos del Software Freedom Day 2009 en la ciudad de Tandil, Argentina

Transcript of Ruby: a Programmer's best friend

Page 1: Ruby: a Programmer's best friend
Page 2: Ruby: a Programmer's best friend

Los ideales del creador de Ruby

Yukhiro “matz” MatsumotoMezcla:

PerlSmalltalkEiffelAdaLisp

Ruby como un lenguaje natural, no simple

Page 3: Ruby: a Programmer's best friend

Los ideales del creador de Ruby

Ruby es totalmente libre. No sólo gratis, sino también libre para usarlo, copiarlo, modificarlo y distribuirlo.

Page 4: Ruby: a Programmer's best friend

Historia

Iniciado en 1993. Liberado al público en 1995. Version 1.0 a fines de 1996.Reconocimiento masivo en 2006. Version actual 1.9.x

Page 5: Ruby: a Programmer's best friend

Caracteristicas

Interpretado.Portable. Dinamico. Orientado a objetos.Flexible (abierto).Mixines.Manejo de excepciones.

Page 6: Ruby: a Programmer's best friend

Instalación / como empezar

Interprete irbArchivos con extension .rbBinario rubyEjecutando:

ruby programa.rbLIbrerias (gemas)

gem install <nombre>

Page 7: Ruby: a Programmer's best friend

Orientado a objetos

"Todo es un objeto"

5.times { print "Hola mundo" }

Page 8: Ruby: a Programmer's best friend

Clases

Integer, Fixnum, Bignum, Float, ...String Array

dias = Array.newdias.empty? => truedias = Array.new(7, "today")dias = [ "L", "M", "M", "J", "V", "S", "D" ]Union, interseccion, diferencia

DateDateTimeTime

Page 9: Ruby: a Programmer's best friend

Clases

Ranges r = (1..10) # de 1 a 10 inclusive r = (1...10) # de 1 to 9 r === 4 # => true ('k'..'z') === 'm' # => true

Hashh = {'uno' => 1, 'dos' => 2}h['uno'] # => 1h['tres'] = 3

Page 10: Ruby: a Programmer's best friend

Simbolos

Es el elemento mas basico que se puede crear en ruby.Sintaxis:

:simboloDiferencia con String

puts "hola".object_id # 21066960puts "hola".object_id # 21066730puts :hola.object_id # 132178puts :hola.object_id # 132178

Particularmente utiles para claves en Hash persona[:nombre] = 'Pedro'

Page 11: Ruby: a Programmer's best friend

Clases

class Saludo def initialize( quien ) @quien = quien auxiliar = "local" @@variable_de_clase = "prueba" end

def deci_hola "Hola #{@quien}!" endend

unSaludo = Saludo.new("Lucas")unSaludo.deci_hola# Hola Lucas!

Page 12: Ruby: a Programmer's best friend

Abierto

class Integer def sumar(x) self + x endend

y = 5.sumar 6# ahora y vale 11

Page 13: Ruby: a Programmer's best friend

Herencia - Mixins - Modulos

class Perro < Animalend class MiArreglo include Enumerable end

Herencia simpleModulos que se "mezclan"

Colecciones de metodosEjemplo: implementando each y/o <=> puedo mezclar Enumerable

min, max, sort, include?, ....

Page 14: Ruby: a Programmer's best friend

Verdades

En Ruby, todo excepto nil y false es considerado true.

if 0 trueelse falseend# => true

Page 15: Ruby: a Programmer's best friend

Iteradores

Cada objeto debe saber como "iterarse"

# numeros = [1,2,3,4,5,6,7,8, 9,10] numeros = (1..10).to_a

numeros.each do |n| puts nend pares = numeros.select do |n| n % 2 == 0end

Page 16: Ruby: a Programmer's best friend

Iteradores

Iteraciones estilo ruby

5.times do puts "hola"end 5.upto(10) do |index| puts "hola #{index}"end

15.downto(10) do puts "hola"end

Page 17: Ruby: a Programmer's best friend

Manejo de excepciones

begin sum / 0rescue ZeroDivisionError => e puts "Error: #{sum} / 0"ensure end

Page 18: Ruby: a Programmer's best friend

Quedaron afuera...

Bloques.Expresiones regularesYAMLReflection

Page 19: Ruby: a Programmer's best friend

Sugerencias

Tests, tests, tests.Manejo de versiones "desprolijo"

Page 20: Ruby: a Programmer's best friend

Desarrollo de aplicaciones

Aplicaciones de escritorio Ruby Tk Ruby-gnome2 (ruby-gnome2.sourceforge.jp/)Ruby + Swing (java)Ruby / QtWxRubyFxRuby

Aplicaciones webRuby on Rails

IDENetbeansAptana (Eclipse plugin)

Page 21: Ruby: a Programmer's best friend

Ejemplos

Twitter (http://www.twitter.com/)Github (http://www.github.com/)Justin.tv (http://www.justin.tv/)SUSE Studio (http://susestudio.com) Watir (http://rubyforge.org/projects/wtr/)