sábado, 18 de julio de 2009

Inicialización rápida de objetos

Todos sabemos que las instancias de una clase son iniciadas a través de un constructor y que el constructor es un método de la clase que puede ser sobrecargado. Hasta ahí todo correcto, lo de toda la vida.

Constructores “on fly”

La versión actual de VB.NET nos permite iniciar las propiedades públicas de una clase en el momento de la instanciación, en la misma línea de código. Imaginaros la siguiente clase:



Public Class Persona

Private _Nombre As String
Private _Apellidos As String

Public Property Nombre() As String
Get
Return _Nombre
End Get
Set(ByVal value As String)
_Nombre = value
End Set
End Property

Public Property Apellidos() As String
Get
Return _Apellidos
End Get
Set(ByVal value As String)
_Apellidos = value
End Set
End Property

Sub New()
Me.Nombre = String.Empty
Me.Apellidos = String.Empty
End Sub

End Class

La manera natural de iniciar un objeto de esta clase sería:


Dim NuevaPersona As New Persona()
NuevaPersona.Nombre = "Bill"
NuevaPersona.Apellidos = "Gates


Si quisiéramos poder crear una persona directamente con su Nombre y Apellidos deberíamos sobrecargar el constructor por defecto para que aceptara estos dos nuevos parámetros.


Con la versión actual de VB.NET y sin tener que implementar el nuevo constructor podemos hacer:



Dim BillGates As New Persona() With {.Nombre = "Bill", .Apellidos = "Gates"}


¡Este código es equivalente al del ejemplo de antes pero en una sola línea de código! Y si quisiéramos podríamos ir instanciando diferentes objetos con diferentes propiedades configuradas inicialmente:



Dim Bill As New Persona() With {.Nombre = "Bill"}
Dim BillGates As New Persona() With {.Nombre = "Bill", .Apellidos = "Gates"}



Fácil, ¿no?

1 comentario:

  1. Fácil no te digo que no, pero me quedo con el método "clásico". En mi opinión genera un código más legible, especialmente si en lugar de un par de propiedades el objeto tiene unas cuantas más. No sé, manías mías, que a la hora de programar cualquier cosa pongo la legibilidad casi en lo más alto...

    ResponderEliminar