Anterior | Tabla de contenidos | Siguiente |
Entendiendo las variables de Ruby | Clases numéricas y conversiones de Ruby |
Ahora que hemos cubierto los fundamentos de las variables en Ruby la siguiente tarea es explicar el alcance de las variables de Ruby.
¿Qué es el ámbito de las variables?
El ámbito define en qué parte del programa se puede acceder a una variable. Ruby tiene cuatro tipos de ámbito de variable, local, global, de instancia y de clase. Además, Ruby tiene un tipo de constante. Cada tipo de variable se declara utilizando un carácter especial al principio del nombre de la variable como se indica en la siguiente tabla.
El nombre empieza por | Ámbito de la variable |
---|---|
$ |
Una variable global |
@ |
Una variable de instancia |
o _ |
Una variable local |
|
Una constante |
@@ |
Una variable de clase |
Además, Ruby tiene dos pseudo-variables a las que no se les puede asignar valores. Estas son nil, que se asigna a las variables no inicializadas, y self, que se refiere al objeto actualmente en ejecución. En el resto de este capítulo veremos cada uno de estos ámbitos de las variables a su vez.
Detectar el ámbito de una variable Ruby
Obviamente, puedes saber el ámbito de una variable mirando el nombre. Sin embargo, a veces es necesario averiguar el ámbito de aplicación mediante la programación. Una técnica útil para averiguar el ámbito de una variable es utilizar el método defined? que devolverá el ámbito de la variable referenciada, o nil si la variable no está definida en el contexto actual:
x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"
Variables locales de Ruby
Las variables locales son locales a la construcción de código en la que se declaran. Por ejemplo, una variable local declarada en un método o dentro de un bucle no puede ser accedida fuera de ese bucle o método. Los nombres de las variables locales deben comenzar con un guión bajo o una letra minúscula. Por ejemplo:
loopcounter = 10_LoopCounter = 20
Variables Globales de Ruby
Las variables globales en Ruby son accesibles desde cualquier parte del programa Ruby, independientemente de dónde se declaren. Los nombres de las variables globales van precedidos de un signo de dólar ($). Por ejemplo:
$welcome = "Welcome to Ruby Essentials"
Se desaconseja el uso de variables globales. El problema con las variables globales es que, no sólo son visibles en cualquier parte del código de un programa, sino que también pueden ser modificadas desde cualquier parte de la aplicación. Esto puede dificultar el seguimiento de los errores.
Es útil saber, sin embargo, que un número de variables globales predefinidas están disponibles para ti como desarrollador de Ruby para obtener información sobre el entorno de Ruby. Un breve resumen de cada una de estas variables se encuentra en la siguiente tabla.
Nombre de la variable | Valor de la variable |
---|---|
|
La ubicación del último error |
$_ |
La cadena leída por última vez por gets |
$. |
El número de línea leído por última vez por el intérprete |
$& |
La cadena coincidente por última vez con regexp |
$~ |
La última coincidencia con regexp como una matriz de subexpresiones |
$ n |
La enésima subexpresión en la última coincidencia (igual que $~ ) |
$= |
La bandera de insensibilidad a las mayúsculas y minúsculasinsensible a mayúsculas y minúsculas |
$/ |
El separador de registros de entrada |
$\ |
El separador de registros de salida |
|
El nombre del archivo de script ruby que se está ejecutando |
$* |
Los argumentos de la línea de comandos utilizados para invocar el script |
$$ |
El ID del proceso del intérprete de Ruby |
$? |
El estado de salida del último proceso hijo ejecutado |
Por ejemplo podemos ejecutar el método gets para tomar la entrada del teclado, y luego referenciar la variable $_ para recuperar el valor introducido:
irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"
Alternativamente podríamos encontrar el ID del proceso del intérprete de Ruby:
irb(main):007:0> $$=> 17403
Variables de clase de Ruby
Una variable de clase es una variable que se comparte entre todas las instancias de una clase. Esto significa que sólo existe un valor de la variable para todos los objetos instanciados de esta clase. Esto significa que si una instancia del objeto cambia el valor de la variable, ese nuevo valor cambiará esencialmente para todas las demás instancias del objeto.
Otra forma de pensar en las variables de clase es como variables globales dentro del contexto de una sola clase.
Las variables de clase se declaran anteponiendo al nombre de la variable dos caracteres @ (@@). Las variables de clase deben ser inicializadas en el momento de la creación. Por ejemplo:
@@total = 0
Variables de instancia de Ruby
Las variables de instancia son similares a las variables de clase excepto que sus valores son locales a instancias específicas de un objeto. Por ejemplo, si una clase contiene una variable de instancia llamada @total, si una instancia del objeto cambia el valor actual de @total el cambio es local sólo para el objeto que hizo el cambio. Otros objetos de la misma clase tienen sus propias copias locales de la variable que son independientes de los cambios realizados en cualquier otro objeto.
Las variables de instancia se declaran en Ruby anteponiendo al nombre de la variable un único signo @:
@total = 10
Ámbito de aplicación de las constantes de Ruby
Las constantes de Ruby son valores que, una vez asignados, no deberían cambiarse. Digo deberían porque Ruby se diferencia de la mayoría de los lenguajes de programación en que permite cambiar el valor de una constante después de haberla declarado, aunque el intérprete protestará ligeramente con un mensaje de advertencia.
Las constantes declaradas dentro de una clase o módulo están disponibles en cualquier lugar dentro del contexto de esa clase o módulo. Las constantes declaradas fuera de una clase o módulo tienen asignado un ámbito global.
Anterior | Tabla de contenidos | Siguiente |
Entendiendo las variables de Ruby | Clases numéricas y conversiones de Ruby |