jueves, 24 de noviembre de 2011

Funciones con número de parametros variables en VB .NET con ParamArray

Continuo trabajando con el motor de búsqueda Sphinx sobre .NET, mediante el lenguaje SphinxQL, hoy he decidido crear una pequeña clase para encapsular el acceso a SphinxQL, os pondré un breve ejemplo de este lenguaje:

INSERT INTO indicenoticias VALUES (1,'Contenido de la noticia','Título','http://www.saberpsicologia.com/');

Como podéis ver es básicamente un subconjunto de SQL.

En previsión de que en un futuro tendré que utilizar este código para otros índices distintos, pensé que estaría muy bien crear una clase "SphinxDoc" que contuviera un número no determinado de campos, de manera que no fuera necesario cambiar el código si utilizo otro índice con distintos campos.

Inicialmente pensé en un constructor con dos parámetros, un id, y una lista de campos. Pero después pensé que sería interesante que el constructor aceptase un número indeterminado de campos y como nunca había programado una función de este tipo decidí probar si era muy difícil.

Y la verdad es que es realmente sencillo en .NET, de hecho me lo esperaba una sintáxis mucho más compliada, el código del constructor es el que sigue:

Public Class SphinxDoc
    Private me_id As Int64
    Private me_fields As List(Of String)

    Public Sub New(id As Int64, ParamArray fields() As String)
        me_id = id
        me_fields = New List(Of String)(fields)
    End Sub

    Public ReadOnly Property Id As Int64
        Get
            Return me_id
        End Get
    End Property

    Public ReadOnly Property Fields As List(Of String)
        Get
            Return me_fields
        End Get
    End Property
End Class

Simplemente declarando el parámetro de entrada con ParamArray ya recibimos los argumentos con un vector (en mi caso de Strings).

Esto permite que la llamada al constructor quede muy elegante:

Dim doc As New SphinxDoc(noticia.id, noticia.Texto, noticia.Titulo,noticia.URL)

Con esto termino el artículo, espero que os haya servido de ayuda, si hubiera sabido que era tan fácil de declarar lo habría usado hace ya mucho tiempo.

No hay comentarios:

Publicar un comentario