Un objeto inmutable es aquel cuyo estado observable nunca puede ser modificado por ninguna secuencia plausible de ejecución de código. Un tipo inmutable es aquel que garantiza que cualquier instancia expuesta al mundo exterior será inmutable (este requisito a menudo se establece como que requiere que el estado del objeto solo se establezca en su constructor, esto no es estrictamente necesario en el caso de objetos con constructores privados, ni es suficiente en el caso de objetos que invocan métodos externos sobre ellos mismos durante la construcción).
Un punto que otras respuestas han descuidado, sin embargo, es una definición del estado de un objeto. Si Foo
es una clase, el estado de un List<Foo>
consiste en la secuencia de identidades de objeto contenidas en el mismo. Si la única referencia a una instancia particular de List<Foo>
es mantenida por un código que no causará que esa secuencia cambie, ni la exponga al código que podría hacerlo, entonces esa instancia será inmutable, independientemente de si los objetos Foo
a los que se hace referencia son mutable o inmutable.
Para utilizar una analogía, si se tiene una lista de VIN de automóvil (números de identificación del vehículo) impresos en papel a prueba de falsificaciones, la lista en sí misma sería inmutable aunque los automóviles no lo sean.Incluso si la lista contiene diez autos rojos hoy, podría contener diez autos azules mañana; aún serían, sin embargo, los mismos diez automóviles.
Casi cubre todo ;-p –
Hola Marc, estoy sorprendido de no verte en mis recientes preguntas inmutables. La inmutabilidad me recuerda a ti :) –