D Programmierung - Module

Module sind die Bausteine ​​von D. Sie basieren auf einem einfachen Konzept. Jede Quelldatei ist ein Modul. Dementsprechend sind die einzelnen Dateien, in die wir die Programme schreiben, einzelne Module. Standardmäßig entspricht der Name eines Moduls dem Dateinamen ohne die Erweiterung .d.

Wenn explizit angegeben, wird der Name des Moduls durch das Modulschlüsselwort definiert, das als erste Zeile ohne Kommentar in der Quelldatei angezeigt werden muss. Angenommen, der Name einer Quelldatei lautet "employee.d". Dann wird der Name des Moduls durch das Modulschlüsselwort gefolgt von einem Mitarbeiter angegeben . Es ist wie unten gezeigt.

module employee;

class Employee {
   // Class definition goes here. 
}

Die Modulzeile ist optional. Wenn nicht angegeben, entspricht dies dem Dateinamen ohne die Erweiterung .d.

Datei- und Modulnamen

D unterstützt Unicode in Quellcode- und Modulnamen. Die Unicode-Unterstützung von Dateisystemen variiert jedoch. Obwohl die meisten Linux-Dateisysteme Unicode unterstützen, unterscheiden die Dateinamen in Windows-Dateisystemen möglicherweise nicht zwischen Klein- und Großbuchstaben. Darüber hinaus beschränken die meisten Dateisysteme die Zeichen, die in Datei- und Verzeichnisnamen verwendet werden können. Aus Gründen der Portabilität empfehle ich, in Dateinamen nur ASCII-Kleinbuchstaben zu verwenden. Beispielsweise wäre "employee.d" ein geeigneter Dateiname für eine Klasse mit dem Namen employee.

Dementsprechend würde der Name des Moduls auch aus ASCII-Buchstaben bestehen -

module employee;  // Module name consisting of ASCII letters 

class eëmployëë { }

D Pakete

Eine Kombination verwandter Module wird als Paket bezeichnet. D-Pakete sind ebenfalls ein einfaches Konzept: Die Quelldateien, die sich im selben Verzeichnis befinden, gehören zum selben Paket. Der Name des Verzeichnisses wird zum Namen des Pakets, das auch als erster Teil der Modulnamen angegeben werden muss.

Befinden sich beispielsweise "employee.d" und "office.d" im Verzeichnis "company", werden sie durch Angabe des Verzeichnisnamens zusammen mit dem Modulnamen Teil desselben Pakets.

module company.employee; 
 
class Employee { }

Ebenso für das Büromodul -

module company.office; 
 
class Office { }

Da Paketnamen Verzeichnisnamen entsprechen, müssen die Paketnamen von Modulen, die tiefer als eine Verzeichnisebene sind, diese Hierarchie widerspiegeln. Wenn das Verzeichnis "Firma" beispielsweise ein Verzeichnis "Zweig" enthält, enthält der Name eines Moduls in diesem Verzeichnis auch Zweig.

module company.branch.employee;

Verwenden von Modulen in Programmen

Das Import-Schlüsselwort, das wir bisher in fast allen Programmen verwendet haben, dient zur Einführung eines Moduls in das aktuelle Modul -

import std.stdio;

Der Modulname kann auch den Paketnamen enthalten. Zum Beispiel die std. Teil oben zeigt an, dass stdio ein Modul ist, das Teil des std-Pakets ist.

Positionen der Module

Der Compiler findet die Moduldateien, indem er die Paket- und Modulnamen direkt in Verzeichnis- und Dateinamen konvertiert.

Beispielsweise würden sich die beiden Module Mitarbeiter und Büro als "Unternehmen / Mitarbeiter.d" bzw. "Tier / Büro.d" (oder "Unternehmen \ Mitarbeiter.d" und "Unternehmen \ Büro.d", je nach) befinden das Dateisystem) für company.employee und company.office.

Lange und kurze Modulnamen

Die Namen, die im Programm verwendet werden, können wie unten gezeigt mit den Modul- und Paketnamen geschrieben werden.

import company.employee; 
auto employee0 = Employee(); 
auto employee1 = company.employee.Employee();

Die langen Namen werden normalerweise nicht benötigt, aber manchmal gibt es Namenskonflikte. Wenn sich der Compiler beispielsweise auf einen Namen bezieht, der in mehr als einem Modul vorkommt, kann er nicht entscheiden, welcher gemeint ist. Das folgende Programm beschreibt die langen Namen, um zwischen zwei separaten Mitarbeiterstrukturen zu unterscheiden, die in zwei separaten Modulen definiert sind: Unternehmen und Hochschule. .

Das erste Mitarbeitermodul in der Ordnerfirma lautet wie folgt.

module company.employee; 
 
import std.stdio;
  
class Employee {
   public: 
      string str; 

   void print() {
      writeln("Company Employee: ",str); 
   } 
}

Das zweite Mitarbeitermodul in der Ordnerhochschule lautet wie folgt.

module college.employee;
  
import std.stdio;  

class Employee {
   public: 
      string str;
	
   void print() {
      writeln("College Employee: ",str); 
   } 
}

Das Hauptmodul in hello.d sollte in dem Ordner gespeichert werden, der die College- und Firmenordner enthält. Es ist wie folgt.

import company.employee; 
import college.employee; 
 
import std.stdio;  

void main() {
   auto myemployee1 = new company.employee.Employee();
   myemployee1.str = "emp1"; 
   myemployee1.print();
   
   auto myemployee2 = new college.employee.Employee(); 
   myemployee2.str = "emp2"; 
   myemployee2.print(); 
}

Das Schlüsselwort import reicht nicht aus, um Module zu Teilen des Programms zu machen. Es stellt einfach die Funktionen eines Moduls innerhalb des aktuellen Moduls zur Verfügung. So viel wird nur benötigt, um den Code zu kompilieren.

Damit das obige Programm erstellt werden kann, müssen in der Kompilierungszeile auch "company / employee.d" und "college / employee.d" angegeben werden.

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

$ dmd hello.d company/employee.d college/employee.d -ofhello.amx 
$ ./hello.amx 
Company Employee: emp1 
College Employee: emp2