Programação D - Aliases
Alias, como o nome se refere, fornece um nome alternativo para nomes existentes. A sintaxe do alias é mostrada abaixo.
alias new_name = existing_name;
A seguir está a sintaxe mais antiga, apenas no caso de você consultar alguns exemplos de formato mais antigos. É fortemente desencorajado o uso disso.
alias existing_name new_name;
Há também outra sintaxe que é usada com expressão e é fornecida a seguir, na qual podemos usar diretamente o nome do alias em vez da expressão.
alias expression alias_name ;
Como você deve saber, um typedef adiciona a capacidade de criar novos tipos. Alias pode fazer o trabalho de um typedef e ainda mais. Um exemplo simples de uso de alias é mostrado abaixo, que usa o cabeçalho std.conv, que fornece a capacidade de conversão de tipo.
import std.stdio;
import std.conv:to;
alias to!(string) toString;
void main() {
int a = 10;
string s = "Test"~toString(a);
writeln(s);
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Test10
No exemplo acima, em vez de usar to! String (a), atribuímos a ele o nome alternativo toString, tornando-o mais conveniente e simples de entender.
Alias de Tupla
Vejamos outro exemplo onde podemos definir um nome alternativo para uma 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);
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
5 6
No exemplo acima, o tipo tupla é atribuído à variável alias e simplifica a definição do método e o acesso às variáveis. Esse tipo de acesso é ainda mais útil quando tentamos reutilizar tuplas desse tipo.
Alias para tipos de dados
Muitas vezes, podemos definir tipos de dados comuns que precisam ser usados em todo o aplicativo. Quando vários programadores codificam um aplicativo, podem ser casos em que uma pessoa usa int, outra double e assim por diante. Para evitar tais conflitos, geralmente usamos tipos para tipos de dados. Um exemplo simples é mostrado abaixo.
Exemplo
import std.stdio;
alias int myAppNumber;
alias string myAppString;
void main() {
myAppNumber i = 10;
myAppString s = "TestString";
writeln(i,s);
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
10TestString
Alias para variáveis de classe
Freqüentemente, há um requisito em que precisamos acessar as variáveis de membro da superclasse na subclasse, isso pode ser possível com um alias, possivelmente com um nome diferente.
Caso você seja novo no conceito de classes e herança, dê uma olhada no tutorial sobre classes e herança antes de começar esta seção.
Exemplo
Um exemplo simples é mostrado abaixo.
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);
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Square
42
Alias This
Alias, fornece a capacidade de conversões automáticas de tipos definidos pelo usuário. A sintaxe é mostrada abaixo, onde o alias de palavras-chave e este são escritos em qualquer um dos lados da variável de membro ou função de membro.
alias member_variable_or_member_function this;
Exemplo
Um exemplo é mostrado abaixo para mostrar o poder do alias isso.
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));
}
No exemplo acima, você pode ver que o retângulo de estrutura é convertido em valor duplo com a ajuda do apelido deste método.
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
30