Mostrando entradas con la etiqueta Ruby. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ruby. Mostrar todas las entradas

sábado, 2 de abril de 2011

Ruby: Creando clases y objetos

Luego de tener idea básica del lenguaje y definición de métodos, veamos la creación de clases y objetos.
class Anfitrion
def initialize(nombre=”Mundo”)
@nombre = nombre
end

def decir_hola
puts “Hola #{@nombre)“
end

def decir_adios
puts “Adios #{@nombre}“
end

De esa forma tenemos una clase anfitrión con dos métodos (decir_hola, decir_adios). Además se tiene una variable de instancia (@nombre) disponible durante la vida del objeto. Para crear el objeto:

A = Anfitrion.new(“Bernardo“).
A.decir_hola => “Hola Bernardo“
A.decir_adios => “Adios Bernardo“

Una aspecto interesante es que no podemos acceder a la variable de instancia como sí se puede en otros lenguajes. La expresión A.@nombre no es válida.

Anfitrion.instance_methods devuelve todos los métodos de instancia que se pueden invocar. Eso retorna todos los métodos disponibles de la clase Anfitrion y sus superclases. Si quisiéramos solamente los métodos que se definieron en la clase anfitrión y nada más, entonces bastará con poner:
Anfitrion.instance_methods(false)
En este caso se retornará
 => “[decir_hola, decir_adios]“


Existe otra funcionalidad interesante que es la de respond_to?. Escribimos
 Anfitrion.respond_to?(“nombre“)

y retornará false. Sin embargo si escribimos Anfitrion.respond_to?(“decir_hola“) retornará true. Si el objeto es capaz de responder a esos métodos entonces retorna true.

Para poder acceder y modificar los valores de las variables de clase, es necesario poner attr_accessor: nombres.
De esa forma podemos acceder como a.nombre, donde a es el objeto instanciado de la clase Anfitrion.

Ejemplo....




class MegaAnfitrion
attr_accessor :nombres

# Crear el objeto
def initialize(nombres = "Mundo")
@nombres = nombres
end

# Decirle hola a todos
def decir_hola
if @nombres.nil?
puts "..."
elsif @nombres.respond_to?("each")

# @nombres es una lista de algún tipo,
# ¡así que podemos iterar!
@nombres.each do |nombre|
puts "Hola #{nombre}"
end
else
puts "Hola #{@nombres}"
end
end

# Decirle adiós a todos
def decir_adios
if @nombres.nil?
puts "..."
elsif @nombres.respond_to?("join")
# Juntar los elementos de la lista
# usando la coma como separador
puts "Adiós #{@nombres.join(", ")}. Vuelvan pronto."
else
puts "Adiós #{@nombres}. Vuelve pronto."
end
end

end



if __FILE__ == $0
ma = MegaAnfitrion.new
ma.decir_hola
ma.decir_adios

# Cambiar el nombre a "Diego"
ma.nombres = "Diego"
ma.decir_hola
ma.decir_adios

# Cambiar el nombre a un vector de nombres
ma.nombres = ["Alberto", "Beatriz", "Carlos",
"David", "Ernesto"]
ma.decir_hola
ma.decir_adios

# Cambiarlo a nil
ma.nombres = nil
ma.decir_hola
ma.decir_adios
end


Y hasta aquí llegué con Ruby. En cuanto profundice en él iré actualizando los posts. Saludos!

Ruby: Definiendo métodos

La sintáxis de definición de un método es similar a la sintaxis de python:

def saludador
puts “Hola mundo“
end


“def“ es la definición del método llamado saludador. La palabra “end“ al final indica el fin del método.

La invocación del método requiere que solamente se escriba el nombre del mismo, en este caso saludador. También puede ser invocado como saludador(). En este caso tendrán el mismo comportamiento. Sin embargo este caso es un tanto particular, ya que no se pasan parámetros al método. En caso de tener parámetros se deberían pasar entre medio de los paréntesis, por ejemplo saludador(“bernie”).


def saludador(nombre)
puts “Hola #{nombre}“
end


 

Otra alternativa es definir el método con un valor por defecto para el paráemtro. Por ejemplo:


def saludador(nombre=”Mundo”)
puts ”Hola #{nombre.capitalize}”
end


En este caso se pone la primer letra del parámetro en mayúscula. Si invocamos:

Saludador ->; obtendremos la salida “Hola Mundo“

Dado que si no se pasa un parámetro, el mismo toma el valor (=”Mundo”).

 

Ruby: Primeros pasos...

Hace un tiempo hice un tutorial de Ruby para aprender el lenguaje. La verdad es que me gustó, se asemejó bastante a Python en lo que refiere a sintaxis. No me dio el tiempo de ver performance, variedad de frameworks en la vuelta, etc. Sin embargo como primeros pasos para conocer la sintaxis básica puede servir. Pongo una serie de posts explicando conceptos básicos del lenguaje.

Accediendo a la consola


Para poder acceder a la consola de Ruby simplemente escribimos “irb“ en el terminal (si estamos en Mac OS o Linux, si estuviéramos en Windows sería Fxri).

Si quisieramos obtener la versión que tenemos instalada de Ruby en nuestro pc, basta con escribir “ruby -v“ en la terminal. La salida debería ser algo similar a la siguiente línea:

ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0].

Primeros pasos...


La salida de Ruby es con puts.

Puts “Hola mundo“ responderá en pantalla dos cosas:

  1. Hola mundo

  2. Nil.


El nil es la salida de la evaluación del comando puts. Puts siempre retorna nil luego de una evaluación.

Las operaciones matemáticas son sencillamente como si fuera una calculadora, 2+3, 5*2, 5**2.  Existen ciertos módulos como ser Math que agrupan funcionalidades similares, como ser Sqrt, Sin, Cos, Tan, etc. Para poder invocar ese tipo de operaciones es necesario escribir Math.sqrt(16). El resultado de ese mensaje será 4.0.