Variables globales en Ruby

click fraud protection

Las variables globales son variables al que se puede acceder desde cualquier lugar del programa, independientemente del alcance. Se denotan comenzando con un carácter $ (signo de dólar). Sin embargo, el uso de variables globales a menudo se considera "no Ruby", y rara vez las verá.

Definición de variables globales

Las variables globales se definen y usan como cualquier otra variable. Para definirlos, simplemente asígneles un valor y comience a usarlos. Pero, como su nombre lo indica, la asignación a variables globales desde cualquier punto del programa tiene implicaciones globales. El siguiente programa demuestra esto. El método modificará una variable global, y eso afectará la forma en que segundo Se ejecuta el método.


$ velocidad = 10. def acelerar. $ velocidad = 100. final. def pass_speed_trap. si $ velocidad> 65. # Dele al programa una multa por exceso de velocidad. final. final. acelerar. pass_speed_trap. 

Impopular

Entonces, ¿por qué es esto "un-Ruby" y por qué no ves variables globales con mucha frecuencia? En pocas palabras, rompe la encapsulación. Si alguna clase o método puede modificar el estado de las variables globales a voluntad sin capa de interfaz, cualquiera otras clases o métodos que dependen de esa variable global pueden comportarse de manera inesperada e indeseable conducta. Además, tales interacciones pueden ser muy difíciles de depurar. ¿Qué modificó esa variable global y cuándo? Buscará un montón de código para encontrar qué lo hizo, y eso podría haberse evitado al no romper las reglas de encapsulación.

instagram viewer

Pero eso no quiere decir que las variables globales sean Nunca Utilizado en Ruby. Hay una serie de variables globales especiales con nombres de un solo carácter (a-la Perl) que se puede utilizar en todo el programa. Representan el estado del programa en sí y hacen cosas como modificar el registro y los separadores de campo para todos consigue métodos.

Variables globales

  • $0 - Esta variable, denotada por $ 0 (que es un cero), contiene el nombre del script de nivel superior que se está ejecutando. En otras palabras, el archivo de script que se ejecutó desde línea de comando, no el archivo de script que contiene el código que se está ejecutando actualmente. Así que si script1.rb se ejecutó desde la línea de comando, aguantaría script1.rb. Si este script requiere script2.rb, $ 0 en ese archivo de script también sería script1.rb. El nombre $ 0 refleja la convención de nomenclatura utilizada en las secuencias de comandos de shell de UNIX con el mismo propósito.
  • $* - Los argumentos de la línea de comandos en una matriz denotada por $ * (signo de dólar y asterisco). Por ejemplo, si tuvieras que correr ./script.rb arg1 arg2, entonces $ * sería equivalente a % w {arg1 arg2}. Esto es equivalente al especial ARGV matriz y tiene un nombre menos descriptivo, por lo que rara vez se usa.
  • $$ - La identificación del proceso del intérprete, denotada por $$ (dos signos de dólar). Conocer la propia ID de proceso a menudo es útil en programas daemon (que se ejecutan en segundo plano, sin conexión desde cualquier terminal) o servicios del sistema. Sin embargo, esto se vuelve un poco más complicado cuando hay hilos involucrados, así que tenga cuidado de usarlo a ciegas.
  • $ / y $ \ - Estos son los separadores de registros de entrada y salida. Cuando lees objetos usando consigue e imprimirlos usando pone, los utiliza para saber cuándo se ha leído un "registro" completo o qué imprimir entre varios registros. Por defecto, estos deberían ser el carácter de nueva línea. Pero dado que estos afectan el comportamiento de todos los objetos IO, rara vez se usan, si es que lo hacen. Puede verlos en scripts más pequeños donde romper las reglas de encapsulación no es un problema.
  • $? - El estado de salida del último proceso secundario ejecutado. De todas las variables enumeradas aquí, esta es probablemente la más útil. La razón de esto es simple: no puede obtener el estado de salida de los procesos secundarios por su valor de retorno del sistema método, solo verdadero o falso. Si debe conocer el valor de retorno real del proceso secundario, debe usar esta variable global especial. Nuevamente, el nombre de esta variable se toma de los shells de UNIX.
  • $_ - La última cadena leída por consigue. Esta variable puede ser un punto de confusión para aquellos que vienen a Ruby desde Perl. En Perl, el $ _ variable significa algo similar, pero totalmente diferente. En perl $_ contiene el valor de la última declaración y en Ruby contiene la cadena devuelta por el anterior consigue invocación. Su uso es similar, pero lo que realmente tienen es muy diferente. Tampoco suele ver esta variable (ahora que lo pienso, rara vez ve alguna de estas variables), pero puede verla en programas Ruby muy cortos que procesan texto.

En resumen, rara vez verá variables globales. A menudo son de mala forma (y "no-Ruby") y solo realmente útiles en scripts muy pequeños, donde se puede apreciar completamente la implicación completa de su uso. Hay algunas variables globales especiales que se pueden usar, pero en su mayor parte, no se usan. Realmente no necesita saber mucho sobre variables globales para comprender la mayoría de los programas de Ruby, pero al menos debe saber que están allí.

instagram story viewer