Aprende a programar con Ruby

Variables

Para almacenar un número o un string en la memoria del ordenador, con el fin de usarlos en cálculos posteriores, necesitas dar un nombre a ese número o string. En programación este proceso es conocido como asignación.

#Ejemplos de asignaciones

s = 'Hello World!'  
x = 10

Las variables locales en ruby son palabras que deben:

  1. empezar con un letra minúscula o un guión bajo _.
  2. estar formadas por letras, números y/o guiones bajos.

Cuando Ruby encuentra una palabra, la interpreta como: una variable local, un método o una palabra clave. Las palabras claves no pueden ser usados como variables. Por ejemplo def es una palabra clave: sólo se puede usar para definir un método. if también es una palabra clave: gran parte del código consta de instrucciones condicionales que empiezan con if, por eso sería muy confuso si pudiese usarse como variable.

Los métodos pueden ser palabras, como start_here, puts o print. Cuando Ruby encuentra una palabra decide qué es de la siguiente forma:

  1. si hay un signo de igualdad (=) a la derecha de la palabra, es una variable local a la que se le asigna un valor.
  2. si la palabra es una palabra clave, entonces es una palabra clave. Ruby tiene una lista interna para poder reconocerlas.
  3. si no se cumple ninguno de los anteriores casos, Ruby asume que es un método.
# Definición de una constante  
PI = 3.1416  
puts PI  
# Definición de una variable local  
myString = 'Yo amo mi ciudad, Vigo'  
puts myString  

=begin
Conversiones  
to_i - convierte a número entero
to_f - convierte a número decimal
to_s - convierte a string  
=end

var1 = 5  
var2 = '2' #fijarse que es un texto 
puts var1 + var2.to_i  

=begin
<< marca el comienzo de un string 
    y es seguido de ' o ''. Aquí añadimos
    el string junto con el retorno de carro (\n). 
=end

a = 'molo '  
a<<'mucho. 
Molo mazo...'  
puts a  

=begin
    ' o " son los delimitadores de un string.
    En este caso, podemos sustituirlos por END_STR.
    END_STR es una constante delimitador de strings.
=end

a = <<END_STR  
This is the string  
And a second line  
END_STR  
puts a

En el ejemplo, var2.to_i el punto significa que el método to_i es enviado a la variable var2, que este caso es un string: transformamos el string en un número para poder sumarlos. Cuando hablemos de objetos, veremos que se puede decir que la var2 es el receptor de to_i. Por lo tanto, cuando aparezca un punto en una posición inexplicable, habrá que interpretarlo como un método (la parte derecha) que es enviado a un objeto (la parte izquierda).

Interpretación dinámica

Por interpretación dinámica, se entiende que no hace falta especificar qué tipo de variable se va a manejar: si parece un número, problablemente sea un número; si parece una cadena, probablemente lo sea. El método class devuelve el tipo de clase de un objeto:

s = 'hello'
s.class # String

Otro ejemplo:

# Ruby es dinámico 
x = 7        #número entero  
x = "house"  #string  
x = 7.5      #número real

Alcance

El alcance es una propiedad de las variables: se refiere a su visibilidad (aquella región del programaa donde la variable puede utilizarse). Los distintos tipos de variables, tienen distintas reglas de alcance. Hablemos de dos tipos de variables: las globales y las locales.

Alcance global y variables globales

Empezarmos con el alcance que menos se usa, pero no por ello menos importante: un alcance global significa que alcanza a todo el programa. Desde cualquier parte del programa, puede usarse la variable. Las variables globales son las que tienen alcance global.

Las variables globales se distinguen porque están precedidas del signo dólar $. Pueden ser vistas desde cualquier parte del programa, y por tanto pueden ser usadas en cualquier parte: nunca quedan fuera de alcance. Sin embargo, las variables globales son usadas muy poco por los programadores experimentados.

Variables globales por defecto

El intérprete Ruby tiene por defecto un gran número de variables globales iniciadas desde el principio. Son variables que almacenan información útil que puede ser usada en cualquier momento y parte del programa.

Por ejemplo, la variable global $0 contiene el nombre del fichero que Ruby está ejecutando. La variable global $: contiene los directorios en los que Ruby busca cuando se carga un fichero que no existe en el directorio de trabajo. $$ contiene el id (identidad) del proceso que Ruby está ejecutando. Y hay muchas más.

Alcance local

Nota: no te preocupes si no entiendes esto ahora.

Se puede intuir mirando el código dónde empieza y acaba el alcance de las variables locales, basándonos en:

El nivel más alto (fuera de todos los bloques de definición) tienen su propio alcance. Cada bloque de definición de una clase o módulo tienen su propio alcance, incluso los bloques anidados. Toda definición de un método (def) tiene su propio alcance.