Programación D - Alias
Alias, como se refiere el nombre, proporciona un nombre alternativo para los nombres existentes. La sintaxis de alias se muestra a continuación.
alias new_name = existing_name;
La siguiente es la sintaxis anterior, en caso de que consulte algunos ejemplos de formatos anteriores. Se desaconseja encarecidamente su uso.
alias existing_name new_name;
También hay otra sintaxis que se usa con expresión y se proporciona a continuación en la que podemos usar directamente el nombre de alias en lugar de la expresión.
alias expression alias_name ;
Como sabrá, un typedef agrega la capacidad de crear nuevos tipos. Alias puede hacer el trabajo de typedef e incluso más. A continuación, se muestra un ejemplo simple de uso de alias que usa el encabezado std.conv que proporciona la capacidad de conversión de tipos.
import std.stdio;
import std.conv:to;
alias to!(string) toString;
void main() {
int a = 10;
string s = "Test"~toString(a);
writeln(s);
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Test10
En el ejemplo anterior, en lugar de usar to! String (a), lo asignamos al nombre de alias toString, lo que lo hace más conveniente y sencillo de entender.
Alias de una tupla
Echemos un vistazo a otro ejemplo en el que podemos establecer un nombre de alias para una tupla.
import std.stdio;
import std.typetuple;
alias TypeTuple!(int, long) TL;
void method1(TL tl) {
writeln(tl[0],"\t", tl[1] );
}
void main() {
method1(5, 6L);
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
5 6
En el ejemplo anterior, el tipo tupla se asigna a la variable de alias y simplifica la definición del método y el acceso a las variables. Este tipo de acceso es aún más útil cuando intentamos reutilizar este tipo de tuplas.
Alias para tipos de datos
Muchas veces, podemos definir tipos de datos comunes que deben usarse en toda la aplicación. Cuando varios programadores codifican una aplicación, pueden darse casos en los que una persona utilice int, otra double, etc. Para evitar tales conflictos, a menudo usamos tipos para tipos de datos. A continuación se muestra un ejemplo sencillo.
Ejemplo
import std.stdio;
alias int myAppNumber;
alias string myAppString;
void main() {
myAppNumber i = 10;
myAppString s = "TestString";
writeln(i,s);
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
10TestString
Alias para variables de clase
A menudo existe un requisito en el que necesitamos acceder a las variables miembro de la superclase en la subclase, esto puede hacerse posible con un alias, posiblemente con un nombre diferente.
En caso de que sea nuevo en el concepto de clases y herencia, eche un vistazo al tutorial sobre clases y herencia antes de comenzar con esta sección.
Ejemplo
A continuación se muestra un ejemplo sencillo.
import std.stdio;
class Shape {
int area;
}
class Square : Shape {
string name() const @property {
return "Square";
}
alias Shape.area squareArea;
}
void main() {
auto square = new Square;
square.squareArea = 42;
writeln(square.name);
writeln(square.squareArea);
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Square
42
Alias This
Alias: proporciona la capacidad de conversiones automáticas de tipos de tipos definidos por el usuario. La sintaxis se muestra a continuación donde el alias de las palabras clave y esto se escriben en ambos lados de la variable miembro o función miembro.
alias member_variable_or_member_function this;
Ejemplo
A continuación se muestra un ejemplo para mostrar el poder del alias this.
import std.stdio;
struct Rectangle {
long length;
long breadth;
double value() const @property {
return cast(double) length * breadth;
}
alias value this;
}
double volume(double rectangle, double height) {
return rectangle * height;
}
void main() {
auto rectangle = Rectangle(2, 3);
writeln(volume(rectangle, 5));
}
En el ejemplo anterior, puede ver que el rectángulo de estructura se convierte en valor doble con la ayuda de alias de este método.
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
30