sábado 8 de marzo de 2008

Object Initializer

Una de las nuevas caracteristicas del framework es el inicializador de objetos, una forma facil y eficaz de crear objetos con la ayuda del constructor y de las propiedades.

Por ejemplo tenemos la clase Person:

public class Person
    {
        public Person()
        {

        } 
        public string Name { get; set; }
        public string LastName { get; set; }
        public DateTime BirthDay { get; set; }
    }

Si quiero crear un objeto Person con nombre de Arthur, apellido Dent y con fecha de nacimiento de 13 de septiembre de 1986, entonces el codigo se veria asi:

 

Person person1 = new Person();

person1.Name = "Arthur";

person1.LastName = "Dent";

Name = "Dent";

person1.BirthDay = new DateTime(1986, 9, 23);

 

Con la nueva sintaxis del Object Initializer ahora podemos crear objetos con su constructor y a la vez inicializando sus propiedades de la siguiente manera:

 

Person person1 = new Person() { Name = "Arthur", LastName = "Dent", BirthDay = new DateTime(1986,9,23) };

 

De esta manera creamos un objeto con su constructor de default (puede se cualquier constructor), despues entre llaves ("{ }") se manifiesta el nombre de la propiedades con sus respectivos valores separadas por comas. Asi la inicializacion del objeto sera mas compacta a la hora de programar y mas eficaz.

viernes 7 de marzo de 2008

Reflexion sobre el universo

There is a theory which states that if ever anybody discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened.
-Douglas Adams

jueves 6 de marzo de 2008

Automatic Properties

Desde el año pasado salio al publico el nuevo .NET Framework 3.5 y durante los proximos articulos que haga hablare de las caracteristicas que traen consigo.

En primera estan las propiedades automaticas (Automatic Properties), las cuales nos sirven para evitar codigo monotono e innecesario al momento de crear una clase.

Por ejemplo, en el framework 2.0 las propiedades se declaraban como simples metodos (getters y setters) que obtenian o modificaban una variable privada:

public class Person {
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}

private string lastName;
public string LastName
{
get
{
return lastName;
}
set
{
lastName = value;
}
}

private DateTime birthDay;
public DateTime BirthDay
{
get
{
return birthDay;
}
set
{
birthDay = value;
}
}
}


Ahora en el framework 3.5 las propiedades son declaradas de la siguiente manera:

public class Person
{
public string Name { get; set; }
public string LastName { get; set; }
public DateTime BirthDay { get; set; }
}

El mismo compilador crea la variable privada, y las propiedades funcionaran de manera comun, como metodos que obtienen y modifican una variable privada, pero en este caso, esta variable es interna del compilador, lo que a uno como programador le ayuda para tener un codigo mas limpio y con menos lineas para un mejor mantenimiento.

jueves 18 de octubre de 2007

Tour Tecnologico 2007

Hola a todos los invito a participar en el Tour Tecnologico 2007, que consiste en 20 eventos enfocados a las últimas tecnologías del software, los cuales se realizarán en las principales ciudades del país. Tu participación es muy importante, por lo que te invitamos a crear la agenda del tour con los temas que más te interesan y adémas podrás ganar un Xbox 360!

Participa ingresando al link que aparece en la seccion de enlaces!!!

Saludos!!!!

lunes 15 de octubre de 2007

String.Format como concatenador

Hola que tal!!!! Estoy de vuelta para darles otro tip de programacion en C#.
Ahora les mostrare como utilizar el string.Format para evitar la tediosa concatenacion, para eso utilizaremos el metodo Format con los siguientes parametros:

string.Format(string format, params object[] args);

Como veran recibe dos parametros, la string format que guardara el enunciado que se quiere crear junto con los espacios donde se suponia habria una concatenacion; y ademas se recibiran una serie de objetos, los cuales representan los valores que entrarian en la concatenacion; para explicar el tema de una mejor manera vayamos a un ejemplo:

string miNombre = "Felipe";
string hobby = "programacion";
string cadenaConcatenada = string.Format("Hola me llamo {0} y me gusta la {1}", miNombre, hobby);

Console.WriteLine(cadenaConcatenada);

Como veran, el primero parametro siempre es una string donde se almacena el enunciado o la cadena a crear y los espacios donde iria la concatenacion, los cuales se representan con llaves y un numero entre ellas, este numero representa el indice un un arreglo, ese arreglo es el segundo parametro que recibe el metodo Format.
Como el parametro es del tipo params esto quiere decir que el metodo recibe ya sea un arreglo tal y como se conoce o una serie de objetos que al iniciar la ejecucion de string.Format formaran un arreglo de objetos; en este ejemplo las variables miNombre y hobby forman un arreglo de objetos, miNombre en la primera posicion y hobby en la segunda, logicamente con indices 0 y 1 respectivamente.

Por lo tanto en el ejemplo "Hola me llamo {0} y me gusta la {1}" el "{0}" sera reemplazado por el objeto con indice 0, es decir por miNombre, y el "{1}" sere reemplazado por el objeto con indice 1, es decir por hobby; por lo tanto el resultado que el metodo string.Format va a regresar seria el siguiente enunciado:

Hola me llamo Felipe y me gusta la programacion

Como el arreglo es de objetos y no exclusivamente de strings se puede usar cualquier tipo de informacion, por ejemplo:

DateTime cumple = new DateTime(1987,06,05);
int miNumero = 42;
cadenaConcatenada = string.Format("Hola me llamo {0} cumplo años el {1:dd/MMM} y mi numero de la suerte es {2}",miNombre, cumple, miNumero);

Console.WriteLine(cadenaConcatenada);

El resultado de cadenaConcatenada seria Hola me llamo Felipe cumplo años el 05/jun y mi numero de la suerte es 42.
Como veran se puede aparte de la concatenacion seguir dando formato a la informacion, la cual puede ser de cualquier tipo, solo hay que tener cuidado de no cometer errores como el siguiente:

cadenaConcatenada = string.Format("Hola me llamo {0} cumplo años el {1:dd/MMM} y mi numero de la suerte es {2} y tengo {3:c} en mi cuenta bancaria",miNombre, cumple, miNumero);

En este string.Format habria un FormatException porque en el arreglo de objetos que recibe el metodo no hay uno que tenga como indice 3, ya que solo hay tres elementos y los indices irian desde el 0 hasta el 2, por lo que utilizar "{3:c}" provocaria que la aplicacion dejara de funcionar.

Eso es todo por hoy pero tratare de seguir agregando nuevos tips al blog, recuerde que para cualquier duda solo escriban su cometario. Saludos!!!

lunes 8 de octubre de 2007

TimeSpan

Hola a todos!!!
Ya regrese, despues de varios dias de ausencia debido a los examenes, pero con un nuevo tip para la programacion en C#; ahora les traigo esta estructura llamada TimeSpan, que es un dato que guarda horas, minutos y segundos.

El contructor principal de TimeSpan es el que recibe tres parametros del tipo int, el primero es representa la hora, el segundo los minutos y el tercero los segundo; de tal modo que si queremos crear una variable que guarde la hora 2:20:42, hariamos lo siguiente:

TimeSpan time = new TimeSpan(2, 20, 42);

Si queremos obtener especificamente la hora en la que se encuentra la variable, se usa la propiedad Hours:

time.Hours;

Tambien existen la propiedades Minutes y Seconds; pero si quieres ser mas especifico hay todavia otras dos propiedades mas que son muy importantes, la primera es la de Day, cuyo valor se puede especificar en el constructor de 4 parametros:

TimeSpan time2 = new TimeSpan(2, 5, 12, 54);
Console.WriteLine(time2.Days);//2

El valor de time2 seria de 2 dias, 5 horas, 12 minutos y 54 segundos; tambien esta la propiedad Miliseconds, los cuales se pueden inicializar en el constructor de 5 parametros:

TimeSpan time3 = new TimeSpan(2, 5, 12, 54, 66);
Console.WriteLine(time3.Miliseconds);//66

El valor de time3 seria de 2 dias, 5 horas, 12 minutos y 54.066 segundos, o 54 segundos y 66 milisegundos.

El TimeSpan es una herramienta muy util al momento de programar aplicaciones que dependan mucho del tiempo. Con eso me despido por hoy pero luego les dare un nuevo tip para la programacion en C#. Saludos a todos.

lunes 1 de octubre de 2007

string.Format, con fechas (DateTime)

Hola a todos!!!!
Ya estoy aqui de nuevo con un nuevo tip para programar en c#, el post pasado hable un poco sobre el string.format y de como este metodo estatico de la clase string nos ayudaba a darle formato a los numeros, pero ahora les voy a decir como nos ayudara a darle formato a las fechas utilizando el struct DateTime.

Tenemos un DateTime que guarda una fecha, por ejemplo 5 de junio de 1987:

DateTime fecha = new DateTime(1987, 06, 05);

Si queremos imprimir en pantalla esa fecha de esta manera 05/06/87 hariamos lo siguiente:

Console.WriteLine(fecha.Day + "/" + fecha.Month + "/" + fecha.Year);

y lo que obtendriamos seria lo siguiente: 5/6/1987 lo cual no era exactamente lo que queriamos, por lo tanto es una buena oportunidad para utilizar el string.Format, el cual para las fechas presenta una gran cantidad de formatos por ejemplo:

fechaString = string.Format("{0:d}", fecha);//fecha corta
Console.WriteLine(fechaString);//05/06/1987

fechaString = string.Format("{0:D}", fecha);//fecha larga
Console.WriteLine(fechaString);//viernes, 5 de junio de 1987

fechaString = string.Format("{0:M}", fecha);//dia y mes
Console.WriteLine(fechaString);//05 junio

fechaString = string.Format("{0:Y}", fecha);// mes y año
Console.WriteLine(fechaString);//junio de 1987

Los formatos anteriores son los de uso comun, pero hay otras opciones que nos permiten crear nuestro formato, por ejemplo:

fechaString = string.Format("{0:dd}", fecha);//dia en numero
Console.WriteLine(fechaString);//05

fechaString = string.Format("{0:ddd}", fecha);//dia en letra abreviado
Console.WriteLine(fechaString);//vie

fechaString = string.Format("{0:dddd}", fecha);//dia en letra
Console.WriteLine(fechaString);//viernes

fechaString = string.Format("{0:MM}", fecha);//mes en numero
Console.WriteLine(fechaString);//06

fechaString = string.Format("{0:MMM}", fecha);//mes en letra abreviado
Console.WriteLine(fechaString);//jun

fechaString = string.Format("{0:MMMM}", fecha);//mes en letra
Console.WriteLine(fechaString);//junio

fechaString = string.Format("{0:yy}", fecha);//año dos digitos
Console.WriteLine(fechaString);//87

fechaString = string.Format("{0:yyyy}", fecha);//año cuatro digitos
Console.WriteLine(fechaString);//1987

Para crear nuestro formato se utilizan estos 8 ultimos formatos y se combinan con el "-" guion o la "/" diagonal, por ejemplo si quiero el formato 05/06/87 pondria:

fechaString = string.Format("{0:dd/MM/yy}", fecha);
Console.WriteLine(fechaString);//05/06/87

O si quiero jun-05-1987 seria asi:

fechaString = string.Format("{0:MMM-dd-yyyy}", fecha);
Console.WriteLine(fechaString);//jun-05-1987

De esa manera cual quier formato deseado para las fechas se podra adquirir por medio del string.Format, en otra ocasion seguire explicando el string.Format ya que nos falta darle formato a los TimeSpan y ver como se utiliza este metodo para evitar la concatenacion.

Saludos y recuerden que cualquier duda solo ponganla en los comentarios y en breve la respondere.