domingo, 11 de julio de 2010

El IRB de Ruby

Sigo en la dinámica de usar lenguajes de Scripting (Siempre viene bien conocer la base de alguno de ellos).

Y en esta entrada, voy a hacer una aproximación al IRB de Ruby.

El IRB, es una Shell interactiva (Como su propio nombre indica) donde podemos interactuar directamente con Ruby. Y Ruby, es un lenguaje de programación "Orientado a Objetos" Aunque, como aquel que dice, en Ruby todo son objetos.

Según el creador del lenguaje, Yukihiro Matsumoto, es un lenguaje hecho para divertirse programando.

Ahora vamos a entrar al IRB (Suponiendo que ya lo tenemos instalado (apt-get install ruby irb)), simplemente escribiendo irb en nuestro terminal.

Nada mas entrar, nos imprime la siguiente línea:
irb(main):001:0>
Indicándonos que ya estamos dentro de IRB. Ahora, podemos probar algunas sentencias simples, siendo las mas conocidas las aritméticas.

irb(main):001:0> 2+2
=> 4
irb(main):002:0>

irb(main):003:0> (3*3)-1
=> 8
irb(main):004:0>

Para avanzar, y si conocemos la sintaxis de algún otro lenguaje, podemos empezar a hacer asignaciones.

irb(main):004:0> var_a=3*3
=> 9
irb(main):005:0> var_a-5
=> 4
irb(main):006:0>

Como vemos, asignamos a la variable var_a el valor de 3*3. Después, restamos 5 a var_a, imprimiendo nuestro resultado correctamente.

También podemos asignar cadenas a variables, usando:

irb(main):006:0> saluda ="Buenos días"
=> "Buenos d\303\255as"
irb(main):007:0> puts saluda
Buenos días
=> nil
irb(main):008:0>

Como vemos, para introducir cadenas, como en la mayoría de los lenguajes, tenemos que englobar a la misma entre comillas.

También observamos el comando puts, el cual sirve para imprimir datos.

irb(main):009:0> puts "Hola"
Hola
=> nil
irb(main):010:0>

Podemos convertir un número entero, a una cadena, usando la función variable.to_s (Variable a Cadena)

irb(main):010:0> var =5
=> 5
irb(main):011:0> var.to_s
=> "5"
irb(main):012:0> puts var
5
=> nil
irb(main):013:0>
Como vemos, declaramos una variable a la cual asignamos el valor entero 5. Después, lo convertimos a una cadena, y probamos a imprimir su contenido.

Otro ejemplo de la simpleza de Ruby, es el trabajo con vectores; Podemos declarar uno así:

irb(main):017:0> b =[1,2,3,4]
=> [1, 2, 3, 4]
irb(main):018:0> puts b[2]
3
=> nil
irb(main):019:0>
Como vemos, accedemos al vector desde b, e inicializamos las celdas del mismo entre los corchetes, separando cada 1 por comas. Accedemos a cada celda indicando el nombre del vector, y la posición con la que deseamos trabajar.

Tenemos también una función que nos devuelve el número de elementos dentro de un vector, la cual podemos usar así:

irb(main):021:0> vector =[1,2,3,4,5,6,7]
=> [1, 2, 3, 4, 5, 6, 7]
irb(main):022:0> tamanio =vector.size
=> 7
irb(main):023:0> puts tamanio
7
=> nil
irb(main):024:0>

Como vemos, .size nos devuelve el tamaño del vector, y en nuestro caso, asignamos este a una variable nueva, llamada tamanio.

También podemos hacer vectores con cadenas, usándolos exactamente de la misma forma que con enteros (Recordando que las cadenas se engloban entre comillas)

Como última explicación dentro de esta iniciación al lenguaje, vamos a crear una función que contenga varios elementos anteriormente explicados. para ello, usamos def funcion(parametros).

irb(main):027:0> def fun1(num)
irb(main):028:1> puts num
irb(main):029:1> num.to_s
irb(main):030:1> puts num
irb(main):031:1> end
=> nil
irb(main):032:0> fun1(2)
2
2
=> nil
irb(main):033:0>
Creamos la función fun1, la cual llamamos con un número entero. Primero lo imprimimos, luego lo convertimos a cadena y lo volvemos a imprimir.

Ahora vamos a crear una función un poco mas avanzada.

irb(main):033:0> def fun2 (num1, num2)
irb(main):034:1> num3 =num1*num2
irb(main):035:1> return num3
irb(main):036:1> end
=> nil
irb(main):037:0> valor =fun2(3,3)
=> 9
irb(main):038:0>
Ahora le pasamos 2 parámetros a nuestra función, los cuales son multiplicados y asignados a num3. Después hacemos que la función retorne num3, por lo que al asignar valor(entero, entero) a una variable, a esta se le asigna la multiplicación de los parámetros.

Para salir de IRB, basta con introducir quit o exit.

Con estas pautas ya podemos empezar a conocer el lenguaje Ruby, que como veis, es bastante divertido.

3 comentarios:

  1. ¿Cómo lo pones todo tan bonito y bien ordenado?

    ResponderEliminar
  2. [quote]
    Podemos convertir un número entero, a una cadena, usando la función variable.to_s (Variable a Cadena)
    ..........
    Como vemos, declaramos una variable a la cual asignamos el valor entero 5. Después, lo convertimos a una cadena, y probamos a imprimir su contenido.
    [/quote]
    Está mal, un objeto no puede cambiar su tipo de datos (y está bien que esto así sea), lo bueno de la programación orientada a objetos (que muy pocos lenguajes implementan), es la inmutabilidad del objeto, en ruby, cuando un método modifica al objeto, por convención termina con el símbolo !, así, cuando uno quiere cortar un string, el método devuelve un nuevo objeto, salvo que el método sea el que modifica el objeto (lo cual está indicado por la convención de ruby, el cual termina con un !).

    OK, todo ésto es para decir que a.to_s no transforma el objeto almacenado en "a" a string, sino que devuelve un objeto totalmente nuevo.
    [code]
    irb(main):006:0> a = 5
    => 5
    irb(main):007:0> a.class
    => Fixnum
    irb(main):008:0> a.to_s
    => "5"
    irb(main):009:0> a.class
    => Fixnum
    irb(main):010:0> b = a.to_s
    => "5"
    irb(main):011:0> b
    => "5"
    irb(main):012:0> b.class
    => String
    irb(main):013:0>
    [/code]
    Aquí puede verse lo que digo. Tengo el objeto a con el valor 5, me fijo la clase de dicho objeto, llamo al metodo to_s y luego me fijo a que clase pertenece, y sigue siendo aun del tipo Fixnum. Si quiero "cambiar" el tipo de datos del objeto (cosa que no se puede), puede llegar a ser haciendo:
    [code]
    a = 5
    a = a.to_s
    [/code]
    lo que en realidad se hace es decir que el objeto 5 no me interesa mas, por eso dejo de direccionarlo con la variable a, sino que me interesa el objeto "5" y ahora lo voy a usar con la variable a. Espero haberme explicado.

    ResponderEliminar
  3. Gracias por tu comentario Anibal, intentaré corregir los errores los errores lo antes posible.

    ResponderEliminar