การเขียนโปรแกรม D - โมดูล

โมดูลเป็นส่วนประกอบพื้นฐานของ D. พวกเขาตั้งอยู่บนแนวคิดง่ายๆ ไฟล์ต้นฉบับทุกไฟล์เป็นโมดูล ดังนั้นไฟล์เดียวที่เราเขียนโปรแกรมจึงเป็นแต่ละโมดูล ตามค่าเริ่มต้นชื่อของโมดูลจะเหมือนกับชื่อไฟล์ที่ไม่มีนามสกุล. d

เมื่อระบุอย่างชัดเจนชื่อของโมดูลจะถูกกำหนดโดยคีย์เวิร์ดของโมดูลซึ่งจะต้องปรากฏเป็นบรรทัดแรกที่ไม่ใช่ความคิดเห็นในไฟล์ต้นฉบับ ตัวอย่างเช่นสมมติว่าชื่อของไฟล์ต้นฉบับคือ "พนักงาน d" จากนั้นชื่อของโมดูลระบุโดยโมดูลคำหลักตามด้วยการทำงานของพนักงาน ดังที่แสดงด้านล่าง

module employee;

class Employee {
   // Class definition goes here. 
}

สายโมดูลเป็นทางเลือก เมื่อไม่ได้ระบุจะเหมือนกับชื่อไฟล์ที่ไม่มีนามสกุล. d

ชื่อไฟล์และโมดูล

D สนับสนุน Unicode ในซอร์สโค้ดและชื่อโมดูล อย่างไรก็ตามการสนับสนุน Unicode ของระบบไฟล์แตกต่างกันไป ตัวอย่างเช่นแม้ว่าระบบไฟล์ Linux ส่วนใหญ่จะรองรับ Unicode แต่ชื่อไฟล์ในระบบไฟล์ Windows อาจไม่แยกความแตกต่างระหว่างอักษรตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ นอกจากนี้ระบบไฟล์ส่วนใหญ่ จำกัด อักขระที่สามารถใช้ในชื่อไฟล์และไดเร็กทอรี ด้วยเหตุผลด้านความสามารถในการพกพาฉันขอแนะนำให้คุณใช้ตัวอักษร ASCII ตัวพิมพ์เล็กในชื่อไฟล์เท่านั้น ตัวอย่างเช่น "staff.d" จะเป็นชื่อไฟล์ที่เหมาะสมสำหรับคลาสชื่อพนักงาน

ดังนั้นชื่อของโมดูลจะประกอบด้วยตัวอักษร ASCII เช่นกัน -

module employee;  // Module name consisting of ASCII letters 

class eëmployëë { }

D แพ็คเกจ

การรวมกันของโมดูลที่เกี่ยวข้องเรียกว่าแพ็คเกจ แพ็กเกจ D เป็นแนวคิดง่ายๆเช่นกัน: ซอร์สไฟล์ที่อยู่ในไดเร็กทอรีเดียวกันจะถือว่าเป็นของแพ็กเกจเดียวกัน ชื่อของไดเร็กทอรีกลายเป็นชื่อของแพ็กเกจซึ่งต้องระบุเป็นส่วนแรกของชื่อโมดูลด้วย

ตัวอย่างเช่นถ้า "staff.d" และ "office.d" อยู่ในไดเร็กทอรี "company" การระบุชื่อไดเร็กทอรีพร้อมกับชื่อโมดูลจะทำให้เป็นส่วนหนึ่งของแพ็กเกจเดียวกัน -

module company.employee; 
 
class Employee { }

ในทำนองเดียวกันสำหรับโมดูลสำนักงาน -

module company.office; 
 
class Office { }

เนื่องจากชื่อแพ็กเกจสอดคล้องกับชื่อไดเร็กทอรีชื่อแพ็กเกจของโมดูลที่ลึกกว่าระดับไดเร็กทอรีหนึ่งจะต้องแสดงถึงลำดับชั้นนั้น ตัวอย่างเช่นหากไดเร็กทอรี "company" มีไดเร็กทอรี "branch" ชื่อของโมดูลภายในไดเร็กทอรีนั้นจะรวมสาขาด้วย

module company.branch.employee;

การใช้โมดูลในโปรแกรม

คีย์เวิร์ดนำเข้าซึ่งเราใช้ในเกือบทุกโปรแกรมเพื่อแนะนำโมดูลให้กับโมดูลปัจจุบัน -

import std.stdio;

ชื่อโมดูลอาจมีชื่อแพ็กเกจด้วย ตัวอย่างเช่นมาตรฐาน ส่วนด้านบนระบุว่า stdio เป็นโมดูลที่เป็นส่วนหนึ่งของแพ็คเกจ std

ตำแหน่งของโมดูล

คอมไพเลอร์ค้นหาไฟล์โมดูลโดยการแปลงชื่อแพ็กเกจและโมดูลเป็นชื่อไดเร็กทอรีและไฟล์โดยตรง

ตัวอย่างเช่นพนักงานและสำนักงานทั้งสองโมดูลจะอยู่ในชื่อ "บริษัท / พนักงาน d" และ "สัตว์ / office.d" ตามลำดับ (หรือ "บริษัท \ พนักงาน d" และ "บริษัท \ office.d" ขึ้นอยู่กับ ระบบไฟล์) สำหรับ บริษัท พนักงานและ บริษัท สำนักงาน

ชื่อโมดูลแบบยาวและแบบสั้น

ชื่อที่ใช้ในโปรแกรมอาจสะกดด้วยชื่อโมดูลและชื่อแพ็กเกจดังที่แสดงด้านล่าง

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

โดยปกติไม่จำเป็นต้องใช้ชื่อยาว แต่บางครั้งก็มีความขัดแย้งของชื่อ ตัวอย่างเช่นเมื่ออ้างถึงชื่อที่ปรากฏในโมดูลมากกว่าหนึ่งโมดูลคอมไพลเลอร์ไม่สามารถตัดสินใจได้ว่าหมายถึงอันใด โปรแกรมต่อไปนี้กำลังสะกดชื่อยาว ๆ เพื่อแยกความแตกต่างระหว่างโครงสร้างพนักงานสองชุดที่แยกจากกันซึ่งกำหนดไว้ในโมดูลแยกกันสองโมดูล: บริษัทและวิทยาลัย .

โมดูลพนักงานแรกใน บริษัท โฟลเดอร์มีดังนี้

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

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

โมดูลพนักงานที่สองในโฟลเดอร์คอลเลจมีดังนี้

module college.employee;
  
import std.stdio;  

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

โมดูลหลักใน hello.d ควรบันทึกไว้ในโฟลเดอร์ซึ่งมีโฟลเดอร์ของวิทยาลัยและ บริษัท เป็นดังนี้.

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

คีย์เวิร์ดนำเข้าไม่เพียงพอที่จะทำให้โมดูลกลายเป็นส่วนหนึ่งของโปรแกรม เพียงแค่ทำให้คุณสมบัติของโมดูลภายในโมดูลปัจจุบันพร้อมใช้งาน สิ่งนั้นจำเป็นสำหรับการคอมไพล์โค้ดเท่านั้น

สำหรับโปรแกรมข้างต้นที่จะสร้างขึ้นต้องระบุ "company / staff.d" และ "college / staff.d" ในบรรทัดการคอมไพล์ด้วย

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

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