D y Properties (propiedades)

Bueno, ya que hemos estado hablando de propiedades en C#, vale la pena mencionar las propiedades en D, que son un poquito distintas en su sintáxis, pero igual de poderosas (hasta un poco más!!!). Ya sabemos para qué sirven las propiedades (si en duda, clickea aquí), así que me iré directo al grano, cómo usarlas en D:

Tenemos la declaracion de nuevo de nuestra clase punto, con dos atributos tipo double; x y y, y queremos asegurarnos de que nunca se le asignen valores negativos.

public class Punto
{
this(double xVal, double yVal)
{
x = xVal;
y = yVal;
}

/* Setter para _x */
void x(double newVal)
{
if(newVal >= 0.0)
_x = newVal;
else
_x = 0.0;
}

/* Getter para _x */
double x()
{
return _x;
}

/* Setter para _y */
void y(double newVal)
{
if(newVal >= 0.0)
_y = newVal;
else
_y = 0.0;
}

/* Getter para _y */
double y()
{
return _y;
}

private:
double _x;
double _y;
}


Una clara diferencia con C# es que en D las propiedades no son funciones especiales sino como cualquier otra función. En C# queda más explícito que se trata de una prpiedad, pero la nueva sintáxis para ello podría parecer confusa. Además, en D tu eliges el nombre de la variable que se recibe en el setter :P.

Ahora el cliente de la clase puede hacer:

Punto punto = new Punto(1.0, 2.0);

Stdout.formatln("El valor del punto.x = {}, y punto.y = {}", punto.x, punto.y);


Y recibirá a la salida:

El valor del punto.x = 1.00, y punto.y = 2.00


¿Fácil no?.
Happy Coding!

0 comentarios: