D Программирование - Псевдонимы

Псевдоним, как следует из названия, предоставляет альтернативное имя для существующих имен. Синтаксис псевдонима показан ниже.

alias new_name = existing_name;

Ниже приведен более старый синтаксис, на всякий случай, если вы обратитесь к некоторым более старым примерам формата. Настоятельно не рекомендуется использовать это.

alias existing_name new_name;

Существует также другой синтаксис, который используется с выражением, и он приведен ниже, в котором мы можем напрямую использовать имя псевдонима вместо выражения.

alias expression alias_name ;

Как вы, возможно, знаете, typedef добавляет возможность создавать новые типы. Псевдоним может выполнять работу typedef и даже больше. Ниже показан простой пример использования псевдонима, в котором используется заголовок std.conv, который обеспечивает возможность преобразования типов.

import std.stdio; 
import std.conv:to; 
 
alias to!(string) toString;  

void main() { 
   int a = 10;  
   string s = "Test"~toString(a); 
   writeln(s); 
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

Test10

В приведенном выше примере вместо использования to! String (a) мы присвоили ему псевдоним toString, что сделало его более удобным и простым для понимания.

Псевдоним для кортежа

Давайте посмотрим на другой пример, где мы можем установить псевдоним для кортежа.

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);    
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

5	6

В приведенном выше примере кортеж типа назначается переменной псевдонима, что упрощает определение метода и доступ к переменным. Такой доступ даже более полезен, когда мы пытаемся повторно использовать такие кортежи типов.

Псевдоним для типов данных

Часто мы можем определять общие типы данных, которые необходимо использовать во всем приложении. Когда несколько программистов кодируют приложение, могут быть случаи, когда один человек использует int, другой double и так далее. Чтобы избежать таких конфликтов, мы часто используем типы для типов данных. Ниже показан простой пример.

пример

import std.stdio;
  
alias int myAppNumber; 
alias string myAppString;  

void main() { 
   myAppNumber i = 10; 
   myAppString s = "TestString"; 
   
   writeln(i,s);   
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

10TestString

Псевдоним для переменных класса

Часто возникает требование, когда нам нужно получить доступ к переменным-членам суперкласса в подклассе, это можно сделать с помощью псевдонима, возможно, под другим именем.

Если вы плохо знакомы с концепцией классов и наследования, прочтите руководство по классам и наследованию, прежде чем начинать с этого раздела.

пример

Ниже показан простой пример.

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); 
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

Square 
42

Псевдоним Это

Псевдоним обеспечивает возможность автоматического преобразования типов определяемых пользователем типов. Синтаксис показан ниже, где псевдоним ключевых слов и this написаны по обе стороны от переменной-члена или функции-члена.

alias member_variable_or_member_function this;

пример

Ниже показан пример, демонстрирующий силу псевдонима 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)); 
}

В приведенном выше примере вы можете видеть, что прямоугольник структуры преобразуется в значение типа double с помощью псевдонима этого метода.

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

30