D-programming-aliases
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
上記の例では、タイプタプルがエイリアス変数に割り当てられ、メソッド定義と変数のアクセスを簡素化します。 この種のアクセスは、そのようなタイプのタプルを再利用しようとする場合にさらに便利です。
データ型のエイリアス
多くの場合、アプリケーション全体で使用する必要がある一般的なデータ型を定義します。 複数のプログラマーがアプリケーションをコーディングする場合、1人がint、もう1人がdoubleなどを使用する場合があります。 このような競合を避けるために、データ型に型を使用することがよくあります。 以下に簡単な例を示します。
例
import std.stdio;
alias int myAppNumber;
alias string myAppString;
void main() {
myAppNumber i = 10;
myAppString s = "TestString";
writeln(i,s);
}
上記のコードをコンパイルして実行すると、次の結果が生成されます-
10TestString
クラス変数のエイリアス
サブクラス内のスーパークラスのメンバー変数にアクセスする必要があることがよくあります。これは、別名を使用して、別名で可能にすることができます。
クラスと継承の概念に慣れていない場合は、このセクションを始める前にlink:/d_programming/d_programming_classes_objects [classes]およびlink:/d_programming/d_programming_inheritance [inheritance]のチュートリアルをご覧ください。
例
以下に簡単な例を示します。
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とこれは、メンバー変数またはメンバー関数の両側に記述されています。
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