Variables

Variables en las clases de Ruby

Ruby permite cuatro tipos de variables:

  • Variable local, las variables locales son variables que están definidas en un método. Estas variables no están disponible fuera del método. Las variables locales empiezan con letra minúscula o guión bajo (_) variable_name

    def method
    foo = Array.new
    end
    
    # foo no esta definida aqui, no existe
    
  • Variables de instancia, están disponible en todos los métodos de cualquier de cualquier instancia u objeto. Esto quiere decir que las variables de instancia cambian de un objeto a otro. Estas variables están precedidas por un @ seguidas del nombre de la variable @variable_name

    def method
    @foo = "Hola!"
    end
    
    puts @foo
    
  • Variables de clase, están disponible en los diferentes objetos. Una variable de clase pertenece a la clase y es una característica de la clase. Están precedidas por @@ seguidas del nombre de la variable @@variable_name

    class Foo
    @@variable = 0
    def counter
    @@variable += 1
    puts("Count: #@@variable")
    end
    end
    
    foo1 = Foo.new
    foo2 = Foo.new
    
    foo1.counter # 1
    foo1.counter # 2
    foo2.counter # 3
    
  • Variables globales, están disponible en todas las diferentes clases. Se definen con $ seguido del nombre de la variable $variable_name

    class Foo
    $global_variable = "Global"
    end
    
    class Any
    def method
    puts($global_variable)
    end
    end
    
    any = Any.new
    any.method # "Global"
    

Las variables creadas con @ crean instancias de variables en cada objeto, esto puede generar problemas si creamos dos módulos que tengan el mismo nombre en algunas variables, estas entrarán en colisión.

module MajorScales
  def majorNum
    @numNotes = 7 if @numNotes.nil?
    @numNotes # Return 7
  end
end

module PentatonicScales
  def pentaNum
    @numNotes = 5 if @numNotes.nil?
    @numNotes # Return 5?
  end
end

class ScaleDemo
  include MajorScales
  include PentatonicScales

  def initialize
    puts majorNum # Should be 7
    puts pentaNum # Should be 5
  end

end

ScaleDemo.new
# output
# 7
# 7

Como podemos ver tanto en MajorScales como en PentatonicScales hemos creado una variable con el mismo nombre lo que hace que en nuestra nueva clase ScaleDemo compartan esta variable en ambos, de manera que tienen el mismo valor ambas.

Ejemplo completo en phrogz

Más infromación sobre variables en tutorialspoint

Más información sobre clases en tutorialspoint

Última modificación: 25 August 2018