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:
_
.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:
# 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).
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
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.
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.
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.
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.