Los ideales del creador de Ruby




  Yukhiro “matz” Matsumoto
  Mezcla:
     Perl
     Smalltalk
     Eiffel
     Ada
     Lisp
  Ruby como un lenguaje natural, no simple
Los ideales del creador de Ruby




Ruby es totalmente libre. No sólo gratis, sino también
libre para usarlo, copiarlo, modificarlo y distribuirlo.
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
Caracteristicas




    Interpretado.
    Portable.
    Dinamico.
    Orientado a objetos.
    Flexible (abierto).
    Mixines.
    Manejo de excepciones.
Instalación / como empezar



     Interprete irb
     Archivos con extension .rb
     Binario ruby
     Ejecutando:
         ruby programa.rb
     LIbrerias (gemas)
         gem install <nombre>
Orientado a objetos




   "Todo es un objeto"



       5.times { print "Hola mundo" }
Clases



    Integer, Fixnum, Bignum, Float, ...
    String
    Array
        dias = Array.new
        dias.empty? => true
        dias = Array.new(7, "today")
        dias = [ "L", "M", "M", "J", "V", "S", "D" ]
        Union, interseccion, diferencia
    Date
    DateTime
    Time
Clases



    Ranges
       r = (1..10)        # de 1 a 10 inclusive
       r = (1...10)       # de 1 to 9
       r === 4            # => true
       ('k'..'z') === 'm' # => true
    Hash
      h = {'uno' => 1, 'dos' => 2}
      h['uno']                             # => 1
      h['tres'] = 3
Simbolos



    Es el elemento mas basico que se puede crear en
    ruby.
    Sintaxis:
        :simbolo
    Diferencia con String
        puts "hola".object_id # 21066960
        puts "hola".object_id # 21066730
        puts :hola.object_id # 132178
        puts :hola.object_id # 132178
    Particularmente utiles para claves en Hash
         persona[:nombre] = 'Pedro'
Clases


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

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

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




          class Integer
           def sumar(x)
             self + x
           end
          end

          y = 5.sumar 6
          # ahora y vale 11
Herencia - Mixins - Modulos


     Herencia simple
     Modulos que se "mezclan"
        Colecciones de metodos
        Ejemplo: implementando each y/o
        <=> puedo mezclar Enumerable
       class Perro < Animal
       end

       class MiArreglo
          include Enumerable
       end

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



      En Ruby, todo excepto nil y false es
      considerado true.
        if 0
          true
        else
          false
        end
        # => true
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 n
         end

         pares = numeros.select do |n|
          n % 2 == 0
         end
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
Manejo de excepciones




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

       end
Quedaron afuera...




   Bloques.
   Expresiones regulares
   YAML
   Reflection
Sugerencias




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



   Aplicaciones de escritorio
      Ruby Tk
      Ruby-gnome2 (ruby-gnome2.sourceforge.jp/)
      Ruby + Swing (java)
      Ruby / Qt
      WxRuby
      FxRuby
   Aplicaciones web
      Ruby on Rails
   IDE
      Netbeans
      Aptana (Eclipse plugin)
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/)

Ruby: a Programmer's best friend

  • 2.
    Los ideales delcreador de Ruby Yukhiro “matz” Matsumoto Mezcla: Perl Smalltalk Eiffel Ada Lisp Ruby como un lenguaje natural, no simple
  • 3.
    Los ideales delcreador de Ruby Ruby es totalmente libre. No sólo gratis, sino también libre para usarlo, copiarlo, modificarlo y distribuirlo.
  • 4.
    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
  • 5.
    Caracteristicas Interpretado. Portable. Dinamico. Orientado a objetos. Flexible (abierto). Mixines. Manejo de excepciones.
  • 6.
    Instalación / comoempezar Interprete irb Archivos con extension .rb Binario ruby Ejecutando: ruby programa.rb LIbrerias (gemas) gem install <nombre>
  • 7.
    Orientado a objetos "Todo es un objeto" 5.times { print "Hola mundo" }
  • 8.
    Clases Integer, Fixnum, Bignum, Float, ... String Array dias = Array.new dias.empty? => true dias = Array.new(7, "today") dias = [ "L", "M", "M", "J", "V", "S", "D" ] Union, interseccion, diferencia Date DateTime Time
  • 9.
    Clases Ranges r = (1..10) # de 1 a 10 inclusive r = (1...10) # de 1 to 9 r === 4 # => true ('k'..'z') === 'm' # => true Hash h = {'uno' => 1, 'dos' => 2} h['uno'] # => 1 h['tres'] = 3
  • 10.
    Simbolos Es el elemento mas basico que se puede crear en ruby. Sintaxis: :simbolo Diferencia con String puts "hola".object_id # 21066960 puts "hola".object_id # 21066730 puts :hola.object_id # 132178 puts :hola.object_id # 132178 Particularmente utiles para claves en Hash persona[:nombre] = 'Pedro'
  • 11.
    Clases class Saludo def initialize( quien ) @quien = quien auxiliar = "local" @@variable_de_clase = "prueba" end def deci_hola "Hola #{@quien}!" end end unSaludo = Saludo.new("Lucas") unSaludo.deci_hola # Hola Lucas!
  • 12.
    Abierto class Integer def sumar(x) self + x end end y = 5.sumar 6 # ahora y vale 11
  • 13.
    Herencia - Mixins- Modulos Herencia simple Modulos que se "mezclan" Colecciones de metodos Ejemplo: implementando each y/o <=> puedo mezclar Enumerable class Perro < Animal end class MiArreglo include Enumerable end min, max, sort, include?, ....
  • 14.
    Verdades En Ruby, todo excepto nil y false es considerado true. if 0 true else false end # => true
  • 15.
    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 n end pares = numeros.select do |n| n % 2 == 0 end
  • 16.
    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
  • 17.
    Manejo de excepciones begin sum / 0 rescue ZeroDivisionError => e puts "Error: #{sum} / 0" ensure end
  • 18.
    Quedaron afuera... Bloques. Expresiones regulares YAML Reflection
  • 19.
    Sugerencias Tests, tests, tests. Manejo de versiones "desprolijo"
  • 20.
    Desarrollo de aplicaciones Aplicaciones de escritorio Ruby Tk Ruby-gnome2 (ruby-gnome2.sourceforge.jp/) Ruby + Swing (java) Ruby / Qt WxRuby FxRuby Aplicaciones web Ruby on Rails IDE Netbeans Aptana (Eclipse plugin)
  • 21.
    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/)