Programmation D - Alias

L'alias, comme le nom le désigne, fournit un autre nom pour les noms existants. La syntaxe de l'alias est indiquée ci-dessous.

alias new_name = existing_name;

Ce qui suit est l'ancienne syntaxe, juste au cas où vous feriez référence à des exemples de formats plus anciens. Son utilisation est fortement déconseillée.

alias existing_name new_name;

Il existe également une autre syntaxe utilisée avec expression et elle est donnée ci-dessous dans laquelle nous pouvons directement utiliser le nom d'alias au lieu de l'expression.

alias expression alias_name ;

Comme vous le savez peut-être, un typedef ajoute la possibilité de créer de nouveaux types. Alias ​​peut faire le travail d'un typedef et même plus. Un exemple simple d'utilisation d'alias est montré ci-dessous qui utilise l'en-tête std.conv qui fournit la capacité de conversion de type.

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

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Test10

Dans l'exemple ci-dessus, au lieu d'utiliser to! String (a), nous l'avons attribué au nom d'alias toString, ce qui le rend plus pratique et plus simple à comprendre.

Alias ​​pour un tuple

Jetons un œil à un autre exemple où nous pouvons définir un nom d'alias pour un Tuple.

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

5	6

Dans l'exemple ci-dessus, le type tuple est affecté à la variable d'alias et simplifie la définition de la méthode et l'accès aux variables. Ce type d'accès est encore plus utile lorsque nous essayons de réutiliser de tels tuples de type.

Alias ​​pour les types de données

Plusieurs fois, nous pouvons définir des types de données communs qui doivent être utilisés dans l'application. Lorsque plusieurs programmeurs codent une application, il peut s'agir de cas où une personne utilise int, un autre double, etc. Pour éviter de tels conflits, nous utilisons souvent des types pour les types de données. Un exemple simple est présenté ci-dessous.

Exemple

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

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

10TestString

Alias ​​pour les variables de classe

Il y a souvent une exigence où nous devons accéder aux variables membres de la superclasse dans la sous-classe, cela peut être rendu possible avec un alias, éventuellement sous un nom différent.

Si vous êtes nouveau dans le concept de classes et d'héritage, jetez un œil au tutoriel sur les classes et l' héritage avant de commencer par cette section.

Exemple

Un exemple simple est présenté ci-dessous.

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Square 
42

Alias ​​ceci

Alias ​​ceci fournit la possibilité de conversions automatiques de types de types définis par l'utilisateur. La syntaxe est indiquée ci-dessous où les mots-clés alias et ceci sont écrits des deux côtés de la variable membre ou de la fonction membre.

alias member_variable_or_member_function this;

Exemple

Un exemple est montré ci-dessous pour montrer la puissance de l'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)); 
}

Dans l'exemple ci-dessus, vous pouvez voir que le rectangle struct est converti en valeur double à l'aide de l'alias cette méthode.

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

30