Псевдонимы


Предыдущая страница
Следующая страница  

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

alias новое_имя = существующее_имя;

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

alias существующее_имя новое_имя; 

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

alias выражение имя_псевдонима;

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

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

void main() { 
   int a = 10;  
   string s = "Проверка "~toString(a); 
   writeln(s); 
}

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

Проверка 10 

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

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

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

import std.stdio; 
import std.typetuple; 
 
alias TL = TypeTuple!(int, long); 
 
void method1(TL tl) { 
   writeln(tl[0],"\t", tl[1] ); 
} 
 
void main() { 
   method1(5, 6L);    
}

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

5	6

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

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

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

Пример

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

void main() { 
   myAppNumber i = 10; 
   myAppString s = "ТестоваяСтрока"; 
   
   writeln(i,s);   
}

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

10ТестоваяСтрока

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

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

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

Пример

Ниже приведен простой пример.

import std.stdio; 
 
class Shape { 
   int area; 
}
  
class Square : Shape { 
   string name() const @property { 
      return "Square"; 
   } 
   alias squareArea = Shape.area; 
}
   
void main() { 
   auto square = new Square;  
   square.squareArea = 42;  
   writeln(square.name); 
   writeln(square.squareArea); 
}

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

Square 
42

Псевдоним this

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

alias переменная_член_или_метод this; 

Пример

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

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

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

30

Предыдущая страница
Следующая страница