Псевдоним, как следует из названия, предоставляет альтернативное имя для существующих имен. Синтаксис для псевдонима показан ниже.
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
В приведенном выше примере вместо использования!! 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
Алиас это
Псевдоним это обеспечивает возможность автоматического преобразования типов пользовательских типов. Синтаксис показан ниже, где ключевые слова псевдоним и это написано по обе стороны от переменной-члена или функции-члена.
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)); }
В приведенном выше примере вы можете видеть, что прямоугольник структуры преобразуется в двойное значение с помощью псевдонима этого метода.
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —