entre - const javascript w3schools
¿Cuál es la diferencia entre const e inmutable en D? (4)
Algo que es const
no puede ser mutado a través de esa referencia, pero podría ser mutado por una referencia mutable a los mismos datos. Algo que es immutable
no puede ser mutado por ninguna referencia a esos datos. Así que, si tienes
const C c = foo();
entonces sabe que no puede mutar el objeto al que se hace referencia por c
a c
, pero en su código pueden existir otras referencias al objeto al que se refiere a c
, y si son mutables, podrían mutarlo y, por lo tanto, cambiar lo que c
ve. Pero si tienes
immutable C c = foo();
entonces sabes que no es posible que cambie el objeto al que se refiere c
. Una vez que se ha construido un objeto immutable
, es ilegal que se mute y, a menos que subvierta el sistema de tipos a través de la conversión, ni siquiera es posible tener una referencia mutable a un objeto immutable
. Y dado que los objetos immutable
se pueden colocar en la memoria de solo lectura si el compilador así lo decide, usted podría obtener seguridades seguras y similares si alguna vez trató de deshacerse immutable
y mutar el objeto. Lo mismo ocurre con const
, ya que una referencia const
podría referirse realmente a un objeto immutable
. Deshacerse de const
o immutable
y luego mutar el objeto mutable en ese momento es un comportamiento indefinido y, básicamente, nunca debe hacerse.
Y como un objeto immutable
nunca puede ser mutado incluso por otra referencia, leer un objeto immutable
desde múltiples hilos es completamente seguro para subprocesos. Por lo tanto, los objetos immutable
se comparten implícitamente en subprocesos, mientras que todo lo que no está marcado explícitamente con shared
se considera como subproceso local. immutable
también proporciona mejores oportunidades de optimización para el compilador que const
, porque se garantiza que nunca cambiará, mientras que un objeto const
puede cambiar a través de otra referencia a los mismos datos.
Para los tipos de valor, realmente no hay mucha diferencia entre const
e immutable
(ya que no puede tener referencias mutables a tipos de valor no mutables), pero para los tipos de referencia, hay una diferencia significativa.
¿Cuál es la diferencia entre los calificadores de tipo const
e immutable
en D?
Cuando declara algo como const
, promete que no lo modificará. Cuando algo se declara como immutable
, se te promete que no se modificará en ningún otro lugar (y, por supuesto, tampoco puedes modificarlo)
Son diferentes en cuanto a los datos immutable
, podrían colocarse en secciones de memoria de solo lectura y, por lo tanto, cualquier intento de modificar los datos fallará.
Algo declarado const
(y no inmutable), por otro lado, existe en la sección r / w y el valor todavía se puede cambiar a través de una referencia diferente no const.
Por lo tanto, la "constancia" puede evitarse en tal caso, mientras que la inmutabilidad no puede.
( Reference )
Una variable declarada de tipo const
puede aceptar un valor mutable o un valor inmutable. Esta definición es relevante para los tipos de referencia, como matrices y objetos o punteros. Normalmente se usaría para argumentos de función. Así que en D const es un tipo de atributo comodín para valores mutables e inmutables.
No tiene mucho sentido para los valores que se copian con una asignación como char, int o float.
El concepto de const e inmutable es muy diferente del encontrado en C y C ++. Yo estaba muy confundido por esto.