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