Cómo sacar provecho de las Extensiones de Métodos

A continuación encontrarás traducido al castellano el artículo escrito por Paul Lefebvre y publicado originalmente en el Blog oficial de Xojo.

¿Buscas una forma sencilla y rápida para añadir nuevas capacidades en las clases y tipos ya existentes sin necesidad de crear subclases? ¡La respuesta son las extensiones de métodos!

Una extensión de método es un método que se invoca utilizando una sintaxis en la que se indica que pertenece a otro objeto. Por ejemplo, pongamos que no quieres escribir un código como el siguiente para incrementar el valor de un entero:

downloadCounter = downloadCounter + 1

Con una extensión de método para el tipo Integer podrás escribir algo así:

downloadCounter.Add

En esencia, las extensiones de métodos son métodos globales que utilizan la palabra clave Extends para permitirte escribir el método mediante el uso de la notación por punto. Esto describe la primera regla: todas las extensiones de método han de ser métodos globales en un módulo. La extensión de método para el anterior ejemplo Add sería así:

Sub Add(ByRef Extends i As Integer, amount As Integer = 1)
  i = i + amount
End Sub

Dado que este recibe un parámetro opcional, también podrías escribir:

downloadCounter.Add(5)

Como equivalente de:

downloadCounter = downloadCounter + 5

Hay mucho más que puedes hacer con la extensión de métodos, pero estos son particularmente útiles para añadir métodos como este sobre los tipos de datos ya existentes (como Integer) de los que no es posible crear subclases.

Otro buen ejemplo puede consistir en un método DoubleQuote que puedas utilizar para entrecomillar cadenas:

Function DoubleQuote(Extends s As String) As String
  Return """" + s + """"
End Function

Por supuesto también puedes ampliar la funcionalidad de las clases existentes. Este ejemplo amplía DesktopListbox para añadir una función de búsqueda que busque y seleccione una fila que contenga un valor concreto en una de sus columnas:

Sub Find(Extends lb As DesktopListBox, findText As String, column As Integer = 0)
  For i As Integer = 0 To lb.LastRowIndex
    If lb.CellTextAt(i, column) = findText Then
      lb.SelectedRowIndex = i
      Exit For
    End If
  Next
End Sub

Puedes utilizarla pasando el texto a buscar y, opcionalmente, la columna sobre la cual se ha de realizar la búsqueda. La siguiente línea de código realiza la búsqueda sobre la primera columna:

ListBox1.Find("MyValue")

Las extensiones suponen un gran modo de que tu código sea más legible y también una forma sencilla para añadir métodos “utilitarios”. Para profundizar más sobre la extensión de métodos, puedes consultar la documentación.

También puedes encontrar un proyecto de ejemplo entre los incluidos con Xojo y que puedes encontrar en la sección Examples del Selector de Proyectos: Examples/Language/Extension Methods

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *