ruby: a programmer's best friend

21

Upload: flekoso

Post on 21-Jun-2015

1.320 views

Category:

Technology


0 download

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

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