Comunidad de diseño web y desarrollo en internet online

Constantes del tipo Array.

Citar            
MensajeEscrito el 07 Sep 2011 12:28 am
Buenas a todos... tengo una duda, como puedo hacer q este array sea una cosntate q no se pueda modificar.

Código ActionScript :

private var asder:Array = new Array ("Tormenta tropical","Huracan","Tormentas severas");



y cuanto es el limite de elementos q puede tener???

saludos!!

Por kakinets

41 de clabLevel



 

msie
Citar            
MensajeEscrito el 07 Sep 2011 02:57 am
Aviso: He soltado un texto bastante grande. El principio es pura teoría de programación (explicando el por qué los Array dan problemas como constantes) y al final te he dado una posible solución a tu problema.

Teoría


El problema de poner los Array como constantes es que se pueden modificar igualmente. Esto se debe a que, cuando asignamos un array a una variable o a una constante, ésta almacena el Array por referencia, no por valor. Me explicaré un poco mejor:

Cuando creas una variable de tipo int, por ejemplo, haces:

Código ActionScript :

var entero:int = 3;

Y esa variable se almacena por valor. Para que me entiendas, en algún sitio de la memoria se escribe entero vale 3. Si tú ahora haces:

Código ActionScript :

var otro:int = entero;
entero = 5;

Se guardaría otro vale 3 y después entero vale 5. Por tanto, lo único que se guarda es el valor del entero en cada momento. No obstante, si cambias el valor, estás modificando la variable. Éste es el motivo por el que, si declaramos un int como constante, no podamos modificarlo (ya que modificar el valor modifica el int).

Por el contrario, cuando escribimos el código:

Código ActionScript :

var lista:Array = new Array("a", "b", "c");

Lo que se hace es lo siguiente:
  • Se guarda el Array con los valores "a", "b" y "c" en un lugar de la memoria (imaginemos que se guarda en la dirección número 100).
  • Se guarda, en otro lugar de la memoria, lista es el Array de la dirección 100.

Si tú ahora haces:

Código ActionScript :

var otra:Array = lista;
lista = new Array("d", "e");

Se guarda otra es el Array de la dirección 100 (ya que es la dirección de lista) y después se crea un Array nuevo en otro lugar (por ejemplo, en la dirección 200) y se guarda lista es el Array de la dirección 200.
En este caso, modificar (añadir, quitar o cambiar) los elementos del Array no modifica el Array en sí. Quiero decir, si tú escribes:

Código ActionScript :

otra.push("z");

Lo que se modifica es "el Array de la dirección 100", pero no "otra". Sigue siendo válido que otra es el Array de la dirección 100, como ya era antes, por eso no se considera que "otra" ha sido modificado.

En otras palabras, si tú declaras un Array como constante, como en:

Código ActionScript :

public const lista:Array = new Array("a", "b", "c");

No podrás hacer lista=new Array() (ya que eso modificaría la dirección de "lista"), pero sí podrás hacer lista.push("d") (ya que "lista" seguirá siendo el mismo Array, del cual sólo has modificado un elemento).

Posible solución


Lo único que se me ocurre es que encapsules el array. Puedes declararlo como privado y hacer que éste sólo sea accesible mediante un método que devuelva una copia de él. Por ejemplo:

Código ActionScript :

private const lista:Array = ["a", "b", "c"];
// ...
public function getLista():Array {
    return this.lista.slice(); // el método slice lo utilizamos para crear una copia del array
}


De esta manera el programa nunca podrá modificar el Array de tu clase, ya que para las otras clases tu Array es privado. Sólo podrá modificar las copias de éste :)

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 07 Sep 2011 04:27 am
Genial... Muchas gracias!! justo lo q necesitava.. un poco de teoria como esta!!

Por kakinets

41 de clabLevel



 

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.