DEBATE: Vale la pena asignar a NULL ¿Si? ¿No?

05/03/2008 - 17:31 por El Cote | Informe spam
Éste es un mensaje de varias partes en formato MIME.
=_NextPart_000_0012_01C87EB4.802328A0

Hola compañeros...

¿Tiene algún sentido asignar a los objetos locales de un método el valor NULL cuando ya no se necesitan a sabiendas que estas mueren y quedan inalcanzables cuando termina el método?

EJEMPLO 1:
private void HacerAlgo()
{
string[] nombres = { "pedro", "juan", "mar¡a", "jes£s" };

//
// AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"
//

// aquí se eliminan los elementos y se asigna a null el arreglo ¿TIENE SENTIDO HACER ESTO?
Array.Resize<string>(ref nombres, 0);
nombres = null;
}

EJEMPLO 2:
private void HacerAlgo()
{
List<int> numeros = new List<int>();
numeros.Add(1);
numeros.Add(2);
numeros.Add(3);
numeros.Add(4);
numeros.Add(5);

//
// AQUÍ SE HACE ALGO CON LA LISTA GENRICA "numeros"
//

// aquí se eliminan los elementos y se asigna a null la lista genérica ¿TIENE SENTIDO HACER ESTO?
numeros.Clear();
numeros = null;
}

Gracias por su colaboración
=_NextPart_000_0012_01C87EB4.802328A0

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<META content="MSHTML 6.00.6000.16608" name=GENERATOR></HEAD>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px"
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV><FONT face=Arial size=2>Hola compañeros...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>¿Tiene algún sentido asignar&nbsp;a los objetos
locales de un método el valor NULL cuando ya no se necesitan a sabiendas que
estas mueren y quedan inalcanzables cuando termina el método?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG><U>EJEMPLO 1:</U></STRONG></FONT></DIV>
<DIV><FONT color=#0000ff size=2><FONT face=Courier>private</FONT></FONT><FONT
face=Courier><FONT size=2> </FONT><FONT color=#0000ff
size=2>void</FONT></FONT><FONT size=2><FONT face=Courier>
HacerAlgo()</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier>{</FONT></FONT></DIV>
<DIV><FONT face=Courier><FONT color=#0000ff
size=2>&nbsp;&nbsp;&nbsp;&nbsp;string</FONT><FONT size=2>[] nombres = {
</FONT><FONT color=#a31515 size=2>"pedro"</FONT><FONT size=2>, </FONT><FONT
color=#a31515 size=2>"juan"</FONT><FONT size=2>, </FONT><FONT color=#a31515
size=2>"mar¡a"</FONT><FONT size=2>, </FONT><FONT color=#a31515
size=2>"jes£s"</FONT></FONT><FONT size=2><FONT face=Courier>
};</FONT></FONT></DIV>
<DIV><FONT face=Courier size=2></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></DIV>
<DIV><FONT color=#008000 size=2><FONT face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//
AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"</FONT></FONT></DIV>
<DIV><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></DIV>
<DIV><FONT face=Courier color=#008000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000 size=2><FONT face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//
aquí se eliminan los elementos y se asigna a null el arreglo <STRONG><FONT
color=#ff0000>¿TIENE SENTIDO HACER ESTO?</FONT></STRONG></FONT></FONT></DIV>
<DIV><FONT face=Courier><FONT color=#2b91af
size=2>&nbsp;&nbsp;&nbsp;&nbsp;Array</FONT><FONT size=2>.Resize&lt;</FONT><FONT
color=#0000ff size=2>string</FONT><FONT size=2>&gt;(</FONT><FONT color=#0000ff
size=2>ref</FONT></FONT><FONT size=2><FONT face=Courier> nombres,
0);</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;nombres =
</FONT></FONT><FONT face=Courier color=#0000ff size=2>null</FONT><FONT
size=2><FONT face=Courier>;</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier>}</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><STRONG><U>EJEMPLO 2:</U></STRONG></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#0000ff size=2><FONT
face=Courier>private</FONT></FONT><FONT face=Courier><FONT size=2> </FONT><FONT
color=#0000ff size=2>void</FONT></FONT><FONT size=2><FONT face=Courier>
HacerAlgo()</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>{</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT face=Courier><FONT color=#2b91af
size=2>&nbsp;&nbsp;&nbsp;&nbsp;List</FONT><FONT size=2>&lt;</FONT><FONT
color=#0000ff size=2>int</FONT><FONT size=2>&gt; numeros = </FONT><FONT
color=#0000ff size=2>new</FONT><FONT size=2> </FONT><FONT color=#2b91af
size=2>List</FONT><FONT size=2>&lt;</FONT><FONT color=#0000ff
size=2>int</FONT></FONT><FONT size=2><FONT
face=Courier>&gt;();</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(1);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(2);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(3);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(4);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Add(5);</FONT></FONT></FONT></DIV>
<DIV><FONT face=Courier size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;// AQUÍ SE HACE ALGO CON LA LISTA GENRICA
"numeros"</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></FONT></FONT></DIV>
<DIV><FONT face=Courier color=#008000 size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><FONT color=#008000 size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;// aquí se eliminan los elementos y se
asigna a null la lista genérica <STRONG><FONT color=#ff0000>¿TIENE SENTIDO HACER
ESTO?</FONT></STRONG></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros.Clear();</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>&nbsp;&nbsp;&nbsp;&nbsp;numeros = </FONT></FONT><FONT face=Courier
color=#0000ff size=2>null</FONT><FONT size=2><FONT
face=Courier>;</FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT size=2><FONT
face=Courier>}</FONT></DIV></FONT></FONT>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Gracias por su
colaboración</FONT></DIV></BODY></HTML>

=_NextPart_000_0012_01C87EB4.802328A0--

Preguntas similare

Leer las respuestas

#1 DarkSpy
13/03/2008 - 16:17 | Informe spam
On 5 mar, 13:31, "El Cote" wrote:
Hola compañeros...

¿Tiene algún sentido asignar a los objetos locales de un método el valor NULL cuando ya no se necesitan a sabiendas que estas mueren y quedan inalcanzables cuando termina el método?

EJEMPLO 1:
private void HacerAlgo()
{
string[] nombres = { "pedro", "juan", "mar¡a", "jes£s" };

//
// AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"
//

// aquí se eliminan los elementos y se asigna a null el arreglo ¿TIENE SENTIDO HACER ESTO?
Array.Resize<string>(ref nombres, 0);
nombres = null;

}

EJEMPLO 2:
private void HacerAlgo()
{
List<int> numeros = new List<int>();
numeros.Add(1);
numeros.Add(2);
numeros.Add(3);
numeros.Add(4);
numeros.Add(5);

//
// AQUÍ SE HACE ALGO CON LA LISTA GEN RICA "numeros"
//

// aquí se eliminan los elementos y se asigna a null la lista genérica ¿TIENE SENTIDO HACER ESTO?
numeros.Clear();
numeros = null;

}

Gracias por su colaboración



Sólo estarás vaciando el contenido de los objetos que estés usando y
con eso liberarás algo de memoria. Yo no me complicaría tanto a ese
nivel, recuerda que el Garbage Collector igual se encargará de eso
cuando corresponda y la ganancia de performance sería mínima, si se
trata de otros objetos como conecciones a bases de datos o cosas más
grandes si es mejor limpiarlos.
Respuesta Responder a este mensaje
#2 DarthSidious
17/03/2008 - 16:19 | Informe spam
yo creo que se trata mas de codificar bien, de forma prolija y de no estar
escribiendo a lo pavo sin ocuparse de nada "total visual studio hace lo
demas", porque asi es como despues salen a la venta cosas como windows vista.
Es parte de un buen programador estar en todos los detalles que le sea
posible. Yo diria que son "buenas practicas" de programacion.

salu2

"DarkSpy" wrote:

On 5 mar, 13:31, "El Cote" wrote:
> Hola compañeros...
>
> ¿Tiene algún sentido asignar a los objetos locales de un método el valor NULL cuando ya no se necesitan a sabiendas que estas mueren y quedan inalcanzables cuando termina el método?
>
> EJEMPLO 1:
> private void HacerAlgo()
> {
> string[] nombres = { "pedro", "juan", "mar¡a", "jes£s" };
>
> //
> // AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"
> //
>
> // aquí se eliminan los elementos y se asigna a null el arreglo ¿TIENE SENTIDO HACER ESTO?
> Array.Resize<string>(ref nombres, 0);
> nombres = null;
>
> }
>
> EJEMPLO 2:
> private void HacerAlgo()
> {
> List<int> numeros = new List<int>();
> numeros.Add(1);
> numeros.Add(2);
> numeros.Add(3);
> numeros.Add(4);
> numeros.Add(5);
>
> //
> // AQUÍ SE HACE ALGO CON LA LISTA GEN RICA "numeros"
> //
>
> // aquí se eliminan los elementos y se asigna a null la lista genérica ¿TIENE SENTIDO HACER ESTO?
> numeros.Clear();
> numeros = null;
>
> }
>
> Gracias por su colaboración

Sólo estarás vaciando el contenido de los objetos que estés usando y
con eso liberarás algo de memoria. Yo no me complicaría tanto a ese
nivel, recuerda que el Garbage Collector igual se encargará de eso
cuando corresponda y la ganancia de performance sería mínima, si se
trata de otros objetos como conecciones a bases de datos o cosas más
grandes si es mejor limpiarlos.

Respuesta Responder a este mensaje
#3 Hernan
24/03/2008 - 13:29 | Informe spam
On 5 mar, 17:31, "El Cote" wrote:
Hola compañeros...

¿Tiene algún sentido asignar a los objetos locales de un método el valor NULL cuando ya no se necesitan a sabiendas que estas mueren y quedan inalcanzables cuando termina el método?

EJEMPLO 1:
private void HacerAlgo()
{
    string[] nombres = { "pedro", "juan", "mar¡a", "jes£s" };

    //
    // AQUÍ SE HACE ALGO CON EL ARREGLO "nombres"
    //

    // aquí se eliminan los elementos y se asigna a null el arreglo ¿TIENE SENTIDO HACER ESTO?
    Array.Resize<string>(ref nombres, 0);
    nombres = null;

}

EJEMPLO 2:
private void HacerAlgo()
{
    List<int> numeros = new List<int>();
    numeros.Add(1);
    numeros.Add(2);
    numeros.Add(3);
    numeros.Add(4);
    numeros.Add(5);

    //
    // AQUÍ SE HACE ALGO CON LA LISTA GEN RICA "numeros"
    //

    // aquí se eliminan los elementos y se asigna a null la lista genérica ¿TIENE SENTIDO HACER ESTO?
    numeros.Clear();
    numeros = null;

}




En estos casos lo que importa es ser coherente, si unas veces asignas
a null y otras
no, otro programador que lea el código podrá creer que hay casos
especiales de
finalización.

Lo que realmente no tiene sentido es hacer un .Clear().
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida