Tutorial de Ruby – Parte 24 – Variables globales

20.1. Variables globales

 

Una variable global tiene un nombre que comienza con $. Se puede utilizar en cualquier parte de un programa. Antes de inicializarse, una variable global tiene el valor especial nil.

 

ruby> $foo

nil

ruby> $foo = 5

5

ruby> $foo

5

 

La variables globales deben utilizarse con parquedad. Son peligrosas porque se pueden modificar desde cualquier lugar. Una sobreutilización de variables globales puede dificultar la localización de errores; también indica que no se ha pensado detenidamente el diseño del programa. Siempre que se encuentre la necesidad de utilizar una variable global, hay que darle un nombre descriptivo para que no se pueda utilizar inadvertidamente para otra cosa (Llamarle $foo como se ha hecho en el ejemplo es probablemente una mala idea) Una característica notable de las variables globales es que se pueden trazar; se puede definir un procedimiento que se llame cada vez que se modifique el valor de la variable.

 

ruby> trace_var:$x, proc{print «$x es ahora «, $x, «\n»}

nil

ruby> $x = 5

$x es ahora 5

5

 

Cuando una variable global se la atavía para que funcione con un disparador que se llama cada vez que se modifica, se la conoce como variable activa. Son útiles, por ejemplo, para mantener un GUI actualizado.

 

Existe un grupo especial de variables cuyos nombres constan del símbolo del dolar ($) seguido de un carácter. Por ejemplo, $$ contiene el número de identificación del proceso del intérprete de Ruby, y es de sólo lectura. A continuación se muestran las principales variables del sistema y su significado (acudir al manual de referencia de Ruby para más detalles)

 

 

$! Último mensaje de error
$@ Posición del error
$_ Última cadena leída con gets
$. Último número de línea leído por el interprete
$& Última cadena que ha coincidido con una expresión

regular

$~ Última cadena que ha coincidido con una expresión

regular como array de subexpresiones

$n La n-ésima subexpresión regular de la última

coincidencia (igual que $~[n])

$= flag para tratar igual las mayúsculas y minúsculas
$/ Separador de registros de entrada
$\ Separador de registros de salida
$0 El nombre del fichero del guión Ruby
$* El comando de la línea de argumentos
$$ El número de identificación del proceso del intérprete

Ruby

$? Estado de retorno del último proceso hijo ejecutado

 

De las variables anteriores $_ y $~, tienen ámbito local. Sus nombres sugieren que deberían tener ámbito global, pero son más útiles de esta forma y existen razones históricas para utilizar estos identificadores.

 

20.2. Variables de instancia

 

Una variable de instancia tiene un nombre que comienza con @ y su ámbito está limitado al objeto al que referencia self. Dos objetos diferentes, aún cuando pertenezcan a la misma clase, pueden tener valores diferentes en sus variables de instancia. Desde el exterior del objeto, las variables de instancia, no se pueden alterar e incluso, no se pueden observar (es decir, en Ruby las variables de instancia nunca son públicas) a excepción de los métodos proporcionados explícitamente por el programador. Como con las variables globales, las variables de instancia tienen el valor nil antes de que se inicialicen.

Las variables de instancia en Ruby no necesitan declararse. Esto da lugar a una estructura flexible de los objetos. De hecho, cada variable de instancia se añade dinámicamente al objeto la primera vez que se la referencia

 

ruby> class InstTest

ruby| def set_foo(n)

ruby| @foo = n

ruby| end

ruby| def set_bar(n)

ruby| @bar = n

ruby| end

ruby| end

nil

ruby> i = InstTest.new

#<InstTest:0x401c3e0c>

ruby> i.set_foo(2)

2

ruby> i

#<InstTest:0x401c3e0c @foo=2>

ruby> i.set_bar(4)

4

ruby> i

#<InstTest:0x401c3e0c @bar=4, @foo=2>

 

Obsérvese que i no informa del valor de @bar hasta que no se haya llamado al método set_bar

Gus Terrera

Apasionado por el agile testing y la ia.

Deja una respuesta