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.

lunes, 15 de diciembre de 2008

Por que el pollo cruzó la carretera?

El que el pollo cruzara la carretera trajo filosóficamente como consecuencia un diferente punto de vista discrepante según los ' ortodoxos-hetedoroxos personajes'  de la historia, aunque admito que el último (George Bush) rompe todos los esquemas...jeje.
MAESTRO DE PRIMARIA:

'Porque quería llegar al otro lado'.

PROFESOR DE SECUNDARIA:
'Aunque se los explique, queridas bestias, no podrán entenderlo'

PROFESOR DE FACULTAD:
'Para saber por qué el pollo cruzó la carretera (tema que se incluirá en el parcial de mañana) lean los apuntes desde la página 2 a la 3050'.

PLATÓN:
'Por su bien. Al otro lado de la carretera se encuentra la verdad'.

ARISTÓTELES:
'Está en la naturaleza del pollo el cruzar las carreteras' .
 
KARL MARX:
'Era históricamente inevitable'.
 
CAPITAN JAMES T. KIRK:
'Para llegar adonde ningún otro pollo había llegado antes' .

HIPÓCRATES:

'Ha cruzado la carretera por culpa de un exceso de secreciones en el
páncreas' .

MARTIN LUTHER KING JR:
'He tenido un sueño donde todos los pollos eran libres de cruzar una carretera sin tener que justificar sus actos' .

MOISÉS:
'Y Dios descendió del paraíso y le dijo al pollo: 'cruza la carretera'. Y el pollo cruzó y Él vio que esto era bueno'
 
RICHARD M. NIXON:
'El pollo no cruzó la carretera, repito, el pollo no cruzó nunca la
carretera'.

NICOLÁS MAQUIAVELO:
'Lo importante es que el pollo cruzó la carretera. ¿A quién importa el por qué? Solamente el fin de atravesar la carretera ya justifica cualquier motivo que hubiera tenido '.
 
SIGMUND FREUD:
'El hecho de que te preocupe porqué el pollo cruzó la carretera ya revela tu fuerte sentimiento de inseguridad sexual latente' .
 
BILL GATES:
'Precisamente acabamos de terminar el nuevo programa 'OfficePollo2008' que además de cruzar las carreteras, será capaz de incubar huevos, archivar los documentos importantes, etc... '
 
BUDA:
'Preguntarse tal cosa (porqué el pollo cruzó la carretera) es renegar de tu propia naturaleza de pollo'.
 
GALILEO:
'Y sin embargo, cruza'.

MARIANO RAJOY:
'El pollo cruzó la carretera manipulado por el PSOE, para ir a manifestarse frente al PP' .
 
BILL CLINTON:
'Juro sobre la Constitución que no ha pasado nada entre el pollo y yo'

NEO (Matrix):
'El pollo no existe'.
 
EINSTEIN:
'El hecho de que sea el pollo el que cruce la carretera o que sea la
carretera la que se mueve bajo el pollo, depende. Es relativo al
referencial'.
 
ZEN:
'El pollo puede cruzar la carretera en vano, sólo el Maestro conoce el ruido de su sombra detrás de la pared'.

STALIN:
'Hay que fusilar al pollo inmediatamente, y también a los testigos de la escena y a 10 personas más escogidas al azar por no haber impedido este acto subversivo '.

FIDEL CASTRO:
'El pollo es un desertor por eso cruzó la carretera pero se arrepentirá de las injusticias de la otra carretera y créanme el pollo volverá'.

Rafael Correa: (Presidente - Ecuador)
'El compañerito pollo lo hizo como muestra de que la calle ya es de todos, y no de los mismos de siempre'.

GEORGE W. BUSH:

'El hecho de que el pollo haya cruzado la carretera a pesar de las
resoluciones de la ONU representa un grave ataque a la democracia, la justicia y la libertad. Esto prueba sin ninguna duda que teníamos que haber bombardeado esta carretera hace tiempo. Con el objetivo de garantizar la paz en esa región, y para evitar que los valores que defendemos sean otra vez atacados por este tipo de terrorismo, el gobierno de los Estados Unidos de
América ha decidido enviar 17 portaaviones, 46 destructores y 154 fragatas, con el apoyo desde tierra de 243.000 soldados de infantería y por el aire de 846 bombarderos, que tendrán por misión, en nombre de la libertad y de la democracia, el eliminar todo asomo de vida en los gallineros a 5,000 Km. a la redonda, y después, asegurarse con unos disparos de misiles muy precisosde que todo lo que parezca de lejos o de cerca a un gallinero sea reducido a un montón de cenizas y no pueda nunca más desafiar a nuestra acción con su arrogancia.

Hemos decidido también que después, este país será generosamente dirigido por nuestro gobierno, que reconstruirá gallineros según las normas vigentes de seguridad, poniendo a su frente a un gallo elegido democráticamente por el embajador de los USA. Para financiar todas estas reconstrucciones, nos conformaremos con el control absoluto de toda la producción de cereales de la región durante 30 años, sabiendo que los habitantes locales se beneficiaran de una tarifa preferente sobre una parte de la producción, a cambio de su total cooperación. En este nuevo país de justicia, paz y libertad, podemos asegurarles que nunca más un pollo intentará cruzar una carretera, por la simple razón que no habrá más carreteras y que los pollos no tendrán patas. Que Dios bendiga América '

jueves, 11 de diciembre de 2008

Conversaciones reales registradas entre un Servicio de Asistencia Técnica y usuarios/as de equipos informáticos.

Caso 1 
Técnico de Servicio: ¿Qué ordenador tiene? 
Usuaria: Uno blanco 
Técnico de Servicio: (Silencio) 

Caso 2 
Usuaria: ¡Hola! No puedo sacar el disquete de la disquetera. 
Técnico de Servicio: ¿Ha intentado apretar el botón? 
Usuaria: Sí, claro, está como pegado... 
Técnico de Servicio: Eso no suena bien, tomaré nota. 
Usuaria: No... Espera... No había metido el disquete... está todavía en la mesa..., gracias. 

Caso 3 
Técnico de Servicio: Haga clic sobre el ícono de 'Mi PC', a la izquierda de la pantalla. 
Usuaria: ¿Su izquierda o mi izquierda? 

Caso 4 
Técnico de Servicio: Buenos días, ¿en qué puedo ayudarle? 
Usuaria: Hola, no puedo imprimir. 
Técnico de Servicio: Por favor dé clic en 'inicio' y... 
Usuaria: Escuche, no empiece con tecnicismos, no soy experta en ordenadores. ¡Coño! 

Caso 5 
Usuaria: Hola, buenas tardes, no puedo imprimir, cada vez que lo intento dice 'No se encuentra impresora'. He cogido incluso la impresora, la he colocado en frente del monitor pero el ordenador todavía dice que no la puede encontrar. 

Caso 6 
Usuaria: Tengo problemas para imprimir en rojo. 
Técnico de Servicio: ¿Tiene una impresora a color? 
Usuaria: No, la mía es blanca. 

Caso 7 
Técnico de Servicio: ¿Qué ve en su monitor ahora mismo? 
Usuaria: Un osito de peluche que mi novio me compró. 

Caso 8 
Técnico de Servicio: Ahora, pulse F8.. 
Usuaria: No funciona. 
Técnico de Servicio: ¿Qué hizo exactamente? 
Usuaria: Presionar la F 8 veces como me dijiste, pero no ocurre nada. 

Caso 9 
Usuaria: Mi teclado no quiere funcionar. 
Técnico de Servicio: ¿Está segura de que está conectado? 
Usuaria: No lo sé. No alcanzo la parte de atrás. 
Técnico de Servicio: Coja el teclado y dé diez pasos hacia atrás. 
Usuaria: ok 
Técnico de Servicio: ¿El teclado sigue con usted? 
Usuaria: Sí 
Técnico de Servicio: Eso significa que el teclado no está conectado ¿Hay algún otro teclado? 
Usuaria: Sí, hay otro aquí. Huy,.... ¡¡¡Este sí funciona!!! 

Caso 10 
Técnico de Servicio: Tu password es 'a' minúscula de andamio, V mayúscula de Víctor, el número 7... 
Usuaria: ¿7 en mayúscula o minúscula? 

Caso 11 
Usuaria: No puedo conectarme a Internet, aparece error de clave. 
Técnico de Servicio: ¿Está segura de que está utilizando el password correcto? 
Usuaria: Sí, estoy segura, ví a mi esposo escribirlo 
Técnico de Servicio: ¿Me puede decir cuál era el password? 
Usuaria: 5 asteriscos. 

Caso 12 
Usuaria: Tengo un grave problema. Un amigo me puso un protector de pantalla, pero cada vez que muevo el ratón desaparece... 

Caso 13 
Usuaria: No logro encontrar el simbolito para abrir el Word. 
Técnico de Servicio: Mire en el escritorio.¿qué tiene ahí? 
Usuaria: Muchos papeles y mi bolso.