12 Abril 2008

Conociendo a Ruby

escrito por edgar js en Primeros pasos, Ruby |

Ruby es un lenguaje puramente orientado a objetos. Para los que no conozcan sobre programación orientada a objetos (POO), tal vez deberían leer un poco más al respecto. Sin embargo, aún sabiendo las características de la POO a veces se puede dificultar un poco familiarizarse con ruby, digamos que es tán fácil que se dificulta (principalmente para los que vienen de lenguajes como C#, Java o PHP).

En el siguiente artículo se explicarán algunas de las características nuevas que se puedan presentar al programar en ruby por primera vez.

Ruby es un lenguaje interpretado, es decir que no se necesita compilar antes de ser ejecutado. Todo el código se valida en tiempo de ejecución.

Para correr los ejemplos que se encuentran en este artículo (y en todos los que sean específicos de ruby) puedes hacerlo de dos formas:

  1. IRB (Interactive Ruby). Es la manera más fácil de jugar con ruby, una vez instalado en tu computadora simplemente ejecuta ‘irb’ (en símbolo del sistema o terminal). Ahora puedes escribir expresiones ruby como si fuera un documento normal, sólo que cada sentencia/bloque se ejecutará al momento. Por ejemplo:
    irb(main):001:0> class Hello
    irb(main):002:1> def say
    irb(main):003:2> puts "hola mundo"
    irb(main):004:2> end
    irb(main):005:1> end
    => nil
    irb(main):006:0> Mundo.new.say
    => hola mundo
    => nil
    irb(main):007:0> puts "hey, esto es muy sencillo!"
    hey, esto es muy sencillo!
    => nil
    irb(main):008:0> 2 + 5
    => 7
    
  2. Scripts. Puedes copiar el código directamente en un archivo con extensión .rb y luego simplemente ejecutarlo con ruby mi_script.rb

Se recomienda la opción del IRB para mayor fácilidad.

Clases

Las clases en ruby son casi como cualquier clase en otros lenguajes: agrupan funcionalidades, encapsulan lógica, etc, etc, etc… Sin embargo una cualidad en ruby es que las clases nunca se cierran, puedes reabrir una clase para modificarla y ésta mantendrá las definiciones anteriores.

class Mundo
  def hola
    puts "hola mundo"
  end
end

mi_mundo = Mundo.new
mi_mundo.hola # => "hola mundo"

class Mundo
  def adios
    puts "adios mundo"
  end
end

mi_mundo.adios # => "adios mundo"

Como se ve en el ejemplo anterior, un objeto se crea llamando al método new de la clase, el cual a su vez llama al método initialize si se encuentra para inicializar variables. Initialize es como un constructor para la clase.

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end

  def name
    @name
  end
end

p = Person.new("Edgar", 20)
p.name # => "Edgar"

Esos identificadores con arrobas son variables de instancia. Para no entrar mucho en detalle, las variables de instancia están disponibles para toda la clase por eso en el método ‘name’ se regresa el valor que se le había asignado en el método ‘initialize’. Estas variable juegan un papel importante en rails ya que están disponibles también en el ámbito de las vistas. Por ejemplo, si en un controlador declaramos una variable de instancia, ésta estará mantendrá su valor en la respectiva vista. Más adelante ya se entendrá mejor.

Símbolos

Los símbolos no tienen una definición conscisa, pero podemos decir que son representaciones de cadenas. Los símbolos empiezan con dos puntos :simbolo, los cuales pueden ayudar a definir lo que es un símbolo: si decimo que los dos puntos significa "la cosa llamada…" entonces sería más fácil entender lo que son los símbolos. Por ejemplo :name sería algo como "la cosa llamada… name".

La razón de ser de los símbolos es principalmente disminuir la duplicación. Podemos usarlos como cadenas por lo que si repites una cadena muchas veces en tu aplicación sería mejor utilizar símbolos.

Cómo los símbolos no pertenecen oficialmente a un tipo (en realidad sí, son objetos de la clase Symbol pero no nos haremos bolas), suelen usarse como llaves para los hashes… ah! y qué son los hashes?

Hashes

Los hashes (o diccionarios) son contenedores más o menos como los arrays, pero en vez de estar indexados por índices numéricos, se componen de un valor con su respectiva llave (de cualquier tipo). Podrían entenderse un tanto como listas.

mi_hash = {:name => "Edgar", :age => 20}
mi_hash[:name] # => "Edgar"
mi_hash["country"] = "mx"
mi_hash[10] = "diez"
mi_hash #=> {"country" => "mx", :name => "Edgar", :age => 20, 10 => "diez"}

un_array = ['uno', 'dos', 3]
un_array[0] # => "uno"

Bloques

Los bloques son un tema muy extenso, sin embargo este artículo es sólo una introducción a lo nuevo por lo que sólo se abordarán los aspectos más relevantes.

Un bloque es… un iterador.

3.times { |i| puts i } # => 0 1 2

['uno', 'dos', 'tres'].each do |i|
  puts i
end # => uno dos tres

Un bloque lo que hace es iterar cada uno de sus elementos y ejecutar el código declarado para cada uno.

def tres_veces
  yield
  yield
  yield
end

tres_veces do
  puts 'hey '
end # => hey hey hey

def dos_o_nada
  if block_given?
    yield
    yield
  else
    'nada'
  end
end

dos_o_nada # => 'nada'

dos_o_nada { puts 'algo ' } # => algo algo

yield "embebe" (podría verse de esa forma para entenderse mejor) el código que se pasa como parámetro.

Como dije, el tema de los bloques es extenso y no lo explicaré esta vez (más adelante en un post dedicado sólo a bloques)… pero les dejo algo para pensar un rato ;)

class Bloques
  def guardar_accion(&block)
    @b = block
  end

  def hacer_accion
    @b.call
  end
end

b = Bloques.new
b.guardar_accion { puts 'O_o' }
b.hacer_accion # => O_o

Hasta aquí la primera parte de Conociendo a Ruby. Espero que esto sea de ayuda para quienes apenas comienzan. Y para los que ya tienen algo de experiencia no se desesperen, pronto llegaremos a temas más avanzados e interesantes.

Esta entrada fue escrita el Sábado, 12 de Abril de 2008 a las 1:01 am y está guardada en Primeros pasos, Ruby. Puedes seguir las respuestas a esta entrada através del RSS 2.0 feed. Puedes dejar una respuesta, o trackback desde tu sitio.

Deja una Respuesta

  • Enlázanos

  • México On Rails
  • Pregunta

  • Si tienes alguna duda o quisieras leer sobre algún tema en específico, no dudes en contactar con nosostros.