Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

425
Vistas
¿Por qué usamos el prefijo _ en algunos casos para definir variables de instancia en Ruby?

Veo en las clases de Ruby que algunas personas usan el prefijo _ para definir variables de instancia como @_property mientras que en condiciones normales attr_writer usa el nombre normal como @property para definir variables de instancia.

¿Cuál es el punto de hacer esto y cuál es la diferencia?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El prefijo _ no es una característica del idioma, no hace nada especial, es solo una convención.

En la mayoría de los casos, el desarrollador quiere indicar que una variable no está en uso, por ejemplo, una variable de bloque que no se usa en un bloque. O quieren indicar que la variable es una variable interna de un módulo o gema y que otros no deben leer o modificar esta variable directamente.

over 4 years ago · Santiago Trujillo Denunciar

0

Hay 2 respuestas posibles aquí dependiendo del tipo de variable.

Instancia variable

Cuando _ se usa para prefijar una variable de instancias (como en su pregunta), generalmente es solo una convención para dejar en claro que esa variable de instancia es un detalle de implementación privado y no debe usarse fuera del alcance actual. Puede encontrarlo especialmente en módulos que se incluirán en algunas otras clases, en cuyo caso la variable de instancia está definida y utilizada por ese módulo, pero pertenece y está dentro del alcance del objeto mismo. Personalmente, prefiero los registros con ámbito de objeto para esto, pero la variable de instancia "privada" es una forma rápida, sucia y popular de hacerlo. Además, el prefijo del nombre de la variable de instancia con _ reduce las posibilidades de conflicto de nombres.

 # Library code module SomeExternalLibraryModule def foo @_something ||= SomeExternalLibraryModule::Something.new(self) end end # Application code class User include SomeExternalLibraryModule attr_reader :something # name conflict "avoided"! Phew! def bar @_something.do_sth # "_" means - you'd better know what you're doing here! # There is no guarantee that instance variable will be present in the future release end end

Variable local

Cuando la variable local tiene el prefijo _ , significa que esa variable no se usa en el código. Es especialmente útil cuando se usan iteradores o se consumen otras entradas de elementos múltiples de las que solo está interesado en uno.

Es bastante común ver solo _ como nombre de variable. Tiene un significado un poco especial para el analizador, que es decir explícitamente "No me importa qué es eso". Como tal, es el único nombre de argumento que se permite varias veces en una sola definición:

 def foo(_, _, a) a end foo(1,2,3) #=> 3 def bar(a,a,b); end #=> SyntaxError

Sin embargo, esta suele ser la mejor práctica para usar "No me importa" con un nombre, lo que te facilitará la vida en el futuro si realmente decides que necesitas usar otros argumentos:

 def foo(_name, _html_options, options) options.delete(:some_option) super end
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda