martes, mayo 09, 2006

DIARIO DE UN MIGRANTE (Migrando de Visual Basic .NET a C#)

Descarga el 4to Podcast

Semana 1

Después de una muy exitosa reunión de la Comunidad .NET en la Ciudad de México y ya para terminar se presento nuevamente la pregunta que nos acecha en cada reunión.

¿Qué lenguaje de desarrollo es mejor C# o Visual Basic?

Y aunque la pregunta no tiene una respuesta concluyente, ya que cada quien tiene su punto de vista al respecto. Casi siempre se llega a un punto de acuerdo.

El lenguaje que cada quien debe usar es aquel que lo haga mas productivo.

Ya que al final debajo de la piel todos somos iguales o lo que es lo mismo detrás del lenguaje de programación todo es Lenguaje Intermedio de Microsoft. (MSIL)

Y entonces me he dado a la tarea de convertir a una hermano Visualero a C #. Y precisamente ese hermano del que les hablo es un servidor.

Y para responder a todos aquellos que se pregunten si me gusta la tarea de martir, la respuesta es por supuesto que no (eso se lo dejamos a AMLO). El punto es que he encontrado en estas ultimas semanas mucha mas información en C# que para Visual Basic y poco a poco me doy cuenta que por mucho esfuerzo que hace microsoft para implementar todas las caracteristicas que genera para C# en Visual Basic. Estas nunca estan disponibles al mismo tiempo en las dos plataformas. Y en el peor de los casos hay algunas caracteristicas que ni siquiera tienen un simil.

Y bueno platicando con el buen Octavio Telis sobre el camino que deberia seguir el migrante Visualero a C# (como si C# fuera la tierra prometida). El me dio una idea muy buena que utilizo para esta primera cronica.

Y su recomendación inicial fue quita el Namespace Microsoft.VisualBasic de las importaciones que estan el las propiedades del proyecto.

Para empezar escogi un proyecto ya viejo, de esos que realizamos cuando recien nos cambiamos de Visual 6 a .NET para identificar el impacto que tendria quitar el Namespace.

Lo primero que encontre fue una vieja función que en Visual Basic 6 se usaba todo el tiempo. La función MsgBox. La cual fue substituida por la Clase MessageBox del Namespace System.Windows.Forms.

Esta clase MessageBox es mucho mas poderosa que la función msgbox ya que te permite personalizar el cuadro de dialogo que le vas a mostrar al usuario. Permitiendote indicar que botones se van a mostrar, cual de ellos es el predeterminado, que icono va a contener el cuadro de mensaje, entre otras muchas caracteristicas mas.

Pero vamos ejemplificando los cambios


Microsoft.VisualBasic
MsgBox("Hola Mundo",
Microsoft.VisualBasic.MsgBoxStyle.OKOnly,
"Pantalla Ejemplo")

Visual Basic .NET
MessageBox.Show("Hola Mundo",
"Pantalla Ejemplo",
MessageBoxButtons.OK)

Visual C#
MessageBox.Show("Hola Mundo",
"Pantalla Ejemplo",
MessageBoxButtons.OK);


El segundo impacto que encontre en este código fue con todas las funciones que comprueban si un objeto es de un tipo numerico o tipo fecha. Como por ejemplo podemos poner las funciones isNumeric, isDate.

La solución equivalente que encontramos de estas funciones fue el metodo tryparse el cual es como el metodo parse el cual tiene la función de converir una cadena a otro tipo especifico, la diferencia entre el metodo parse y el metodo tryparse es que el primero si al momento de realizar la traducción de un tipo al otro falla, el metodo te arrojara una excepción. En cambio la función tryparse te devuelve un booleano indicandote si pudo o no realizar el parseo y el dato resultante te lo devuelve en la variable por referencia que le pones en los parametros.


Microsoft.VisualBasic
if isnumeric(Valor) then

Visual Basic .NET 2003
If Double.TryParse(Valor,
Globalization.NumberStyles.Any,
Globalization.CultureInfo.CurrentCulture,
ValorOut) Then

Visual C# 2003
if (Double.TryParse(Valor,
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.CurrentCulture,
out ValorOut))


Ahora en VisualStudio 2005 es un mas facil de relizar este TryParse


Visual Basic .NET 2005
If Double.TryParse(Valor, ValorOut) Then

Visual C# 2005
if (Double.TryParse(Valor,out ValorOut ))

Un asunto muy interesante a comentar es el hecho que Visual C# es Case Sensitive, por lo cual exige que cuando uno se refiere a una variable esta se escrita de la misma manera en la que se escribio a la hora de definirla. Que bonito es acordarse de los viejos desarrollos de C en la escuela.


Mientras realizabamos estos ejemplos nos topamos con la necesidad de mandar un mensaje utilizando la clase MessageBox y el metodo show. Para mostrar el dato contenido en la Variable ValorOut que es de tipo double.

En Visual Basic lo hicimos de esta manera:
MessageBox.Show(ValorOut)

En Visual C# pense que seria igual y lo escribi de esta manera:
MessageBox.Show(ValorOut);

Pero entonces me mando un error al compilar. Simplemente anunciandome que lo que estaba esperando era una valor de texto y por lo tanto no aceptaba este valor tipo double. Gracias al monton de horas que me he pasado ya corrigiendo código en los grupos de noticias me imagine lo que estaba sucediendo y es lo siguiente. Si lo que espera es texto entonces transformo el valor de double a texto gracias al metodo .ToString()
Y por lo tanto el código corregido quedo como sigue:

MessageBox.Show(ValorOut.ToString());

Bueno eso es todo por hoy le seguimos la siguiente semana.

Saludos

Aqui les dejo las ligas de donde saque algunas ideas sobre los que les he estado mencionando.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdoubleclasstryparsetopic.asp

http://www.thescarms.com/dotnet/IsNumeric.asp

http://dotnetjunkies.com/WebLog/warstar/archive/2004/04/22/11960.aspx

http://www.tangiblesoftwaresolutions.com/Articles/CSharp%20Equivalent%20to%20IsNumeric.htm

0 Comments:

Publicar un comentario en la entrada

Links to this post:

Crear un enlace

<< Home