Métodos extensores y operador ternario

Una de las novedades que más me ha gustado de las nuevas versiones de nuestros lenguajes son los métodos extensores.

Es una particularidad que yo he usado algunas veces en javascript y que consistía en añadir un nuevo método al prototype de una clase, para que todas las instancias de una clase lo tuvieran. Esto es bastante normal en la programación orientada a objetos al crear nuestras propias clases, pero lo bueno es que podemos hacerlo también con las clases del Framework: por ejemplo con la clase String.

Para hacerlo la forma difiere un poco al hacerlo en C# que en Visual Basic pero ambos lenguajes ya soportan esta funcionalidad.

C#

Para crear un método extensor en C# usamos la palabra reservada this al primer parámetro del método. Además solo se pueden declarar dentro de clases estáticas.

Si nos creamos nuestra librería, definiríamos nuestro método extensor así:

using System;
 
namespace MetodosExtensores
{
    public static class Extensiones
    {
        public static int ElevarA(this int num, int potencia)
        {
            return (int)Math.Pow(num, potencia);
        }
    }
}

Ahora en nuestro programa, podemos usar estos métodos solo importando la librería:

using System;
using MetodosExtensores;
 
namespace Miprograma
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 2,potencia = 5;
            int resultado = num.ElevarA(potencia);
            //Equivalente a hacer esto:
            //int resultado = Extensiones.ElevarA(num, potencia);
            Console.WriteLine("{0} elevado a {1} es {2}", num, potencia, resultado);
            Console.ReadLine();
        }
    }
}

Visual Basic .NET

En este caso lo que debemos usar es un atributo antes del método para indicar que va a ser un método extensor. Además solo pueden estar definidos dentro de módulos:

Namespace MetodosExtensoresVB
    Public Module Extensiones
        <System.Runtime.CompilerServices.Extension()> _
        Public Function ElevarA(ByVal num As Integer, ByVal potencia As Integer)
            Return CType(Math.Pow(num, potencia), Integer)
        End Function
    End Module
End Namespace

Como vemos puede sernos de gran utilidad en algunas ocasiones.

Además también han añadido una nueva funcionalidad en Visual Basic 9: el Operador Ternario.

Lo que todos los programadores en C# y en C conocíamos como:

string msn = a > b ? "a>b" : "a<=b";

Ahora también lo podemos hacer en Visual Basic así:

Dim msg as String = If( a>b ? "a>b", "a<=b")

Poco a poco nuestro lenguajes van mejorando y haciéndonos la vida más fácil.

Deja un comentario

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