Mostrando entradas con la etiqueta utiles. Mostrar todas las entradas
Mostrando entradas con la etiqueta utiles. Mostrar todas las entradas

domingo, 21 de diciembre de 2008

Variables al Paso

Hola a tod@s:

Bueno como muchos sabréis, en casi todos los lenguajes de programación hay dos formas de pasar las variables a funciones o procedimientos, por valor y por referencia:

  • Por valor significa que la función  recibe una copia del valor que tiene la variable.
  • Por referencia significa que se pasa la posición de memoria donde esta guardada la variable, por lo que la función puede saber cuánto vale, pero además puede modificarla de cualquier manera el valor de la variable original.

Bien en VB.NET no iba a ser menos, cuando definimos una función e indicamos sus parámetros lo hacemos mediante "ByVal" para indicarle que es un paso por valor, y con "ByRef" para indicar que es un paso por referencia.

Por ejemplo si definimos:

Private Function Duplica(ByRef a As Integer) As Integer


       a *= 2 'igual que poner a = a * 2


       Return a


End Function




El parámetro "a" se está recibiendo por referencia, lo que hace la función es duplicar el valor del parámetro y devolver el valor resultante, evidentemente este último paso sería innecesario pues al tratarse de un paso por referencia el contenido de la variable original queda modificado tras ejecutarse la llamada a la función.



Sin embargo, no hace mucho, he descubierto algo curioso en este lenguaje, y es que si cuando hacemos la llamada a una función una función que está definida para recibir los parámetro por referencia, podemos forzar a que se envíe una copia del parámetro original, esto se consigue metiendo la variable original entre paréntesis. Mejor lo vemos en un ejemplo:





   1: Module Module1


   2:  


   3:     Sub Main()


   4:         Dim a, b, c As Integer


   5:         a = 2


   6:         b = 2


   7:         c = Duplica(a) 'llamamos a la función pasando él parámetro por referencia


   8:         Console.WriteLine("a = " + a.ToString + " c = " + c.ToString)


   9:  


  10:         c = Duplica((b)) 'llamada a la función pasando el parámetro por valor


  11:         Console.WriteLine("b = " + b.ToString + " c = " + c.ToString)


  12:  


  13:         Console.ReadLine()


  14:     End Sub


  15:  


  16:     Private Function Duplica(ByRef a As Integer) As Integer


  17:         a *= 2 'igual que poner a = a * 2


  18:         Return a


  19:     End Function


  20:  


  21: End Module




En el ejemplo definimos 3 variables, a y b que tendrán un valor inicial de 2 y usaremos como parámetro para probar la función definida anteriormente, c nos servirá para almacenar el valor devuelto por la función.



Si ejecutamos el código veremos como en la llamada de la línea 7 se modifica el valor de "a" y que coincide con el valor devuelto por la función, es decir se está ejecutando el paso por referencia correctamente. Sin embargo en la llamada a la función de la línea 10, podemos comprobar por medio de este ejemplo, que el valor de b no es alterado, pero la función retorna el valor correspondiente tras su ejecución.



Es una curiosidad que quería compartir, y que si os paráis a pensarlo, tiene sentido, al encerrar la variables entre paréntesis, estamos priorizando la  evaluación de dicha variable, y lo que enviamos a la función es el resultado de dicha evaluación. Puede ser interesante si trabajamos con librerías y/o clases no desarrolladas por nosotros, o en las que no podemos modificar el código, y queremos pasarle parámetros por valor.



Espero que os sirva de algo, xD.



PD: No estoy seguro de si en C# también funciona así, aún no lo he probado.



 



Saludos.

miércoles, 1 de octubre de 2008

Comprobar si el navegador tiene habilitadas las cookies desde .NET

Este es un pequeño trozo de código que puede resultar de mucha utilidad.


If Page.Request.Browser.Cookies Then
'admite cookies
Else
'no admite cookies
End If

He tenido que colorear el código a mano, :-) a ver si me hago, o mejor la busco, que seguro que la hay, una tool que me cree los tags HTML del font para dejar el código coloreado como lo hace VS.

Otro día que tenga un poco más de tiempo a ver si escribo un post sobre los archivos "Browser" de .NET y las posibilidades que nos brinda el framework para renderizar controles que se adapten a los disitintos navegadores por igual.

lunes, 29 de septiembre de 2008

Apagado rápido de windows o retardado

Buenas a tod@s, ya iba siendo hora de un artículillo técnico, la verdad es que tengo muchos en mente, casi todos relacionados con .NET, que seguramente no estarán a la altura de los artículos que escriben los gurus en la materia, seguramente les podrá ser de ayuda a más de uno, o por lo menos eso espero.

Pero hoy voy a escribir una chorradita, que me pasó el otro día un amiguete por el messenger (gracias Josiño), y que por lo menos a mi me resulta de gran utilidad. Se trata de un modo de apagado de windows, si ya se que hay miles de formas de hacer esto, pero está tiene la particularidad del tiempo de retardo, es decir, puedo indicar el número de segundos que deseo que espere el pc para apagarse.

Lo único que hay que acer es escribir en un acceso directo shutdown -S -T 00 (los dos ultimos 00 son para la rapidez con que se apaga, numero de segundos) o simplemente escribir esta línea en una ventana de consola o desde el comando ejecutar.

Todo esto es util en situciones que muchas veces nos han ocurrido a todos. Por ejemplo, dejas copiando un CD o DVD y tienes que irte, sabes que la copia dura un cierto tiempo, copiando archivos, o simplemente porque sabes que a cierta hora salta el backup programado o el scaneo del antivirus, y no estarás delante del pc cuando ocurra.

Pues para esto existe una fantastica tool, que podeis ver en RSSomnifero y descargarla desde: aquí Esta herramienta, no sólo permite apagar el ordenador tras un tiempo, sino programar su apagado a una hora determinada, o cuando la CPU tenga una cierta actividad durante un cierto tiempo,etc.. la verdad es que se trata de una herramienta que para mí es de gran utilidad.

Por ejemplo, si soys de los que como yo, dejais el PC trabajando, con esta tool podreis capturar el uso de la CPU,y cuando se encuentre por debajo del umbral del 10 % de consumo por ejemplo 5 min poderís detectar que la tarea que estabais realizando terminó y que es seguro apagar el ordenador.
La verdad, me parece una herramienta sencilla, pero a la vez muy util.