Учебники

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

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

alias new_name = existing_name;

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

alias existing_name new_name; 

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

alias expression alias_name ;

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

Live Demo

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

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

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

Test10 

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

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

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

Live Demo

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 и так далее. Чтобы избежать таких конфликтов, мы часто используем типы для типов данных. Простой пример показан ниже.

пример

Live Demo

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

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

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

10TestString

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

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

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

пример

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

Live Demo

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

Алиас это

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

alias member_variable_or_member_function this; 

пример

Ниже показан пример, демонстрирующий силу псевдонима this.

Live Demo

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

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

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