D Programlama - Modüller

Modüller D'nin yapı taşlarıdır. Basit bir konsepte dayanırlar. Her kaynak dosya bir modüldür. Buna göre, programları yazdığımız tek dosyalar ayrı modüllerdir. Varsayılan olarak, bir modülün adı, .d uzantısı olmadan dosya adıyla aynıdır.

Açıkça belirtildiğinde, modülün adı, kaynak dosyada ilk yorum olmayan satır olarak görünmesi gereken module anahtar sözcüğü ile tanımlanır. Örneğin, bir kaynak dosyanın adının "staff.d" olduğunu varsayalım. Daha sonra modülün adı modül anahtar sözcüğü ve ardından çalışan tarafından belirtilir . Aşağıda gösterildiği gibidir.

module employee;

class Employee {
   // Class definition goes here. 
}

Modül hattı isteğe bağlıdır. Belirtilmediğinde, .d uzantısı olmadan dosya adıyla aynıdır.

Dosya ve Modül Adları

D, kaynak kodunda ve modül adlarında Unicode'u destekler. Ancak, dosya sistemlerinin Unicode desteği değişiklik gösterir. Örneğin, çoğu Linux dosya sistemi Unicode'u desteklese de, Windows dosya sistemlerindeki dosya adları küçük ve büyük harfler arasında ayrım yapmayabilir. Ek olarak, çoğu dosya sistemi, dosya ve dizin adlarında kullanılabilen karakterleri sınırlar. Taşınabilirlik nedeniyle, dosya adlarında yalnızca küçük ASCII harfleri kullanmanızı tavsiye ederim. Örneğin, "worker.d", işçi adlı bir sınıf için uygun bir dosya adı olabilir.

Buna göre, modülün adı da ASCII harflerinden oluşacaktır -

module employee;  // Module name consisting of ASCII letters 

class eëmployëë { }

D Paketleri

İlgili modüllerin birleşimine paket adı verilir. D paketleri de basit bir kavramdır: Aynı dizinde bulunan kaynak dosyaların aynı pakete ait olduğu kabul edilir. Dizinin adı, modül adlarının ilk kısımları olarak da belirtilmesi gereken paketin adı olur.

Örneğin, "çalışan.d" ve "ofis.d" "şirket" dizini içindeyse, modül adıyla birlikte dizin adını belirtmek onları aynı paketin bir parçası haline getirir -

module company.employee; 
 
class Employee { }

Benzer şekilde, ofis modülü için -

module company.office; 
 
class Office { }

Paket adları dizin adlarına karşılık geldiğinden, bir dizin düzeyinden daha derin olan modüllerin paket adları bu hiyerarşiyi yansıtmalıdır. Örneğin, "şirket" dizini bir "şube" dizini içeriyorsa, bu dizindeki bir modülün adı şubeyi de içerecektir.

module company.branch.employee;

Programlarda Modülleri Kullanma

Şimdiye kadar neredeyse her programda kullandığımız import anahtar sözcüğü, mevcut modüle bir modül tanıtmak içindir -

import std.stdio;

Modül adı, paket adını da içerebilir. Örneğin, std. yukarıdaki kısım stdio'nun std paketinin bir parçası olan bir modül olduğunu belirtir.

Modüllerin Konumları

Derleyici, paket ve modül adlarını doğrudan dizin ve dosya adlarına dönüştürerek modül dosyalarını bulur.

Örneğin, iki modül çalışan ve ofis, sırasıyla "şirket / çalışan.d" ve "hayvan / ofis.d" (veya "şirket \ çalışan.d" ve "şirket \ ofis.d" olarak konumlandırılır. dosya sistemi) company.employee ve company.office için.

Uzun ve Kısa Modül Adları

Programda kullanılan isimler modül ve paket isimleriyle aşağıda gösterildiği gibi hecelenebilir.

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

Uzun adlar normalde gerekli değildir, ancak bazen ad çatışmaları olabilir. Örneğin, birden fazla modülde görünen bir isme atıfta bulunurken, derleyici hangisinin kastedildiğine karar veremez. Aşağıdaki program, iki ayrı modülde tanımlanan iki ayrı çalışan yapısı arasında ayrım yapmak için uzun adları açıklamaktadır: şirket ve üniversite. .

Klasör şirketinde ilk çalışan modülü aşağıdaki gibidir.

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

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

Klasör kolejindeki ikinci çalışan modülü aşağıdaki gibidir.

module college.employee;
  
import std.stdio;  

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

Merhaba.d'deki ana modül, kolej ve şirket klasörlerini içeren klasöre kaydedilmelidir. Aşağıdaki gibidir.

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

İmport anahtar sözcüğü, modülleri programın parçası haline getirmek için yeterli değildir. Sadece mevcut modülün içindeki bir modülün özelliklerini kullanılabilir hale getirir. Bu kadarı yalnızca kodu derlemek için gereklidir.

Yukarıdaki programın oluşturulabilmesi için derleme satırında "şirket / çalışan.d" ve "kolej / çalışan.d" de belirtilmelidir.

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

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