stringtranslate.com

Tipo de valor y tipo de referencia

En ciertos lenguajes de programación de computadoras , los tipos de datos se clasifican como tipos de valor o tipos de referencia , donde siempre se accede implícitamente a los tipos de referencia a través de referencias , mientras que las variables de tipo de valor contienen directamente los valores mismos. [1] [2]

Propiedades de tipos de valor y tipos de referencia

Incluso entre los idiomas que tienen esta distinción, las propiedades exactas de los tipos de valor y referencia varían de un idioma a otro, pero las propiedades típicas incluyen:

Tipos de referencia y "llamar compartiendo"

Incluso cuando los argumentos de función se pasan utilizando la semántica de "llamada por valor" (que siempre es el caso en Java y es el caso de forma predeterminada en C#), un valor de un tipo de referencia es intrínsecamente una referencia; por lo tanto, si un parámetro pertenece a un tipo de referencia, el comportamiento resultante tiene cierta semejanza con la semántica de "llamada por referencia". Este comportamiento a veces se denomina llamada compartiendo .

La llamada por compartir se parece a la llamada por referencia en el caso en que una función muta un objeto que recibió como argumento: cuando eso sucede, la mutación también será visible para la persona que llama, porque la persona que llama y la función tienen referencias al mismo objeto. . Se diferencia de la llamada por referencia en el caso en que una función asigna su parámetro a una referencia diferente; cuando eso sucede, esta asignación no será visible para la persona que llama, porque la persona que llama y la función tienen referencias separadas , aunque ambas referencias inicialmente apunten al mismo objeto.

Tipos de referencia versus punteros explícitos

Muchos idiomas tienen indicaciones o referencias explícitas . Los tipos de referencia se diferencian de estos en que siempre se accede a las entidades a las que hacen referencia a través de referencias; por ejemplo, mientras que en C++ es posible tener a y a , donde la primera es una cadena mutable y la segunda es un puntero explícito a una cadena mutable (a menos que sea un puntero nulo), en Java solo es posible tener un , que es implícitamente una referencia a una cadena mutable (a menos que sea una referencia nula).std::stringstd::string *StringBuilder

Si bien el enfoque de C++ es más flexible, el uso de no referencias puede generar problemas como la división de objetos , al menos cuando se usa la herencia ; en lenguajes donde los objetos pertenecen a tipos de referencia, estos problemas se evitan automáticamente, a costa de eliminar algunas opciones del programador.

Clasificación por idioma

Ver también

Referencias

  1. ^ Marrón, Erik E. (2006). Formularios de Windows en acción. Shelter Island, Nueva York: Manning. pag. 703.ISBN​ 978-1-932-39465-8.
  2. ^ Stephens, varilla (2014). Referencia del programador de C# 5.0. Indianápolis, Indiana: John Wiley & Sons. pag. 57.ISBN 978-1-118-84728-2.
  3. ^ "Capítulo 4. Tipos, valores y variables". docs.oracle.com .
  4. ^ "Palabras clave de C#". docs.microsoft.com .
  5. ^ "Estructuras y clases: el lenguaje de programación Swift (Swift 5.2)". docs.swift.org .
  6. ^ "Cierres: el lenguaje de programación Swift (Swift 5.2)". docs.swift.org .
  7. ^ "Tipos integrados: documentación de Python 3.8.2rc1". docs.python.org .
  8. ^ "Especificación del lenguaje ECMAScript® 2019". www.ecma-international.org .
  9. ^ "Capítulo 24 La biblioteca principal". caml.inria.fr .
  10. ^ "Estructuras de datos modificables". caml.inria.fr .