Lập trình D - Mô-đun
Mô-đun là nền tảng của D. Chúng dựa trên một khái niệm đơn giản. Mỗi tệp nguồn là một mô-đun. Theo đó, các tệp đơn mà chúng tôi viết các chương trình là các mô-đun riêng lẻ. Theo mặc định, tên của mô-đun giống với tên tệp của nó mà không có phần mở rộng .d.
Khi được chỉ định rõ ràng, tên của mô-đun được xác định bởi từ khóa mô-đun, từ khóa này phải xuất hiện dưới dạng dòng không chú thích đầu tiên trong tệp nguồn. Ví dụ: giả sử rằng tên của một tệp nguồn là "worker.d". Sau đó, tên của mô-đun được chỉ định bởi từ khóa mô-đun theo sau là nhân viên . Nó như hình dưới đây.
module employee;
class Employee {
// Class definition goes here.
}
Dòng mô-đun là tùy chọn. Khi không được chỉ định, nó giống như tên tệp không có phần mở rộng .d.
Tên tệp và mô-đun
D hỗ trợ Unicode trong mã nguồn và tên mô-đun. Tuy nhiên, sự hỗ trợ Unicode của các hệ thống tệp khác nhau. Ví dụ: mặc dù hầu hết các hệ thống tệp Linux hỗ trợ Unicode, tên tệp trong hệ thống tệp Windows có thể không phân biệt giữa chữ thường và chữ hoa. Ngoài ra, hầu hết các hệ thống tệp đều giới hạn các ký tự có thể được sử dụng trong tên tệp và thư mục. Vì lý do di động, tôi khuyên bạn chỉ nên sử dụng các chữ cái viết thường ASCII trong tên tệp. Ví dụ: "worker.d" sẽ là tên tệp phù hợp cho một lớp có tên là nhân viên.
Theo đó, tên của mô-đun cũng sẽ bao gồm các chữ cái ASCII -
module employee; // Module name consisting of ASCII letters
class eëmployëë { }
D Gói
Một tổ hợp các mô-đun liên quan được gọi là một gói. Gói D cũng là một khái niệm đơn giản: Các tệp nguồn nằm trong cùng một thư mục được coi là thuộc cùng một gói. Tên của thư mục trở thành tên của gói, cũng phải được chỉ định như phần đầu tiên của tên mô-đun.
Ví dụ: nếu "worker.d" và "office.d" nằm trong thư mục "company", thì việc chỉ định tên thư mục cùng với tên mô-đun làm cho chúng trở thành một phần của cùng một gói -
module company.employee;
class Employee { }
Tương tự, đối với mô-đun văn phòng -
module company.office;
class Office { }
Vì tên gói tương ứng với tên thư mục, tên gói của mô-đun sâu hơn một cấp thư mục phải phản ánh hệ thống phân cấp đó. Ví dụ: nếu thư mục "công ty" bao gồm thư mục "chi nhánh", thì tên của mô-đun bên trong thư mục đó cũng sẽ bao gồm cả chi nhánh.
module company.branch.employee;
Sử dụng mô-đun trong chương trình
Từ khóa import, mà chúng tôi đã sử dụng trong hầu hết mọi chương trình cho đến nay, là để giới thiệu một mô-đun cho mô-đun hiện tại -
import std.stdio;
Tên mô-đun cũng có thể chứa tên gói. Ví dụ, std. phần trên chỉ ra rằng stdio là một mô-đun là một phần của gói std.
Vị trí của các mô-đun
Trình biên dịch tìm các tệp mô-đun bằng cách chuyển đổi gói và tên mô-đun trực tiếp thành tên thư mục và tệp.
Ví dụ: hai mô-đun nhân viên và văn phòng sẽ được đặt lần lượt là "company / worker.d" và "súc / văn phòng.d" (hoặc "company \ worker.d" và "company \ office.d", tùy thuộc vào hệ thống tệp) cho company.employee và company.office.
Tên mô-đun dài và ngắn
Các tên được sử dụng trong chương trình có thể được viết bằng tên mô-đun và gói như được hiển thị bên dưới.
import company.employee;
auto employee0 = Employee();
auto employee1 = company.employee.Employee();
Những cái tên dài bình thường không cần thiết nhưng đôi khi có những xung đột về tên. Ví dụ, khi đề cập đến một tên xuất hiện trong nhiều mô-đun, trình biên dịch không thể quyết định tên đó có nghĩa là gì. Chương trình sau đây đánh vần các tên dài để phân biệt giữa hai cấu trúc nhân viên riêng biệt được xác định trong hai mô-đun riêng biệt: công ty và đại học. .
Mô-đun nhân viên đầu tiên trong công ty thư mục như sau.
module company.employee;
import std.stdio;
class Employee {
public:
string str;
void print() {
writeln("Company Employee: ",str);
}
}
Mô-đun nhân viên thứ hai trong trường cao đẳng thư mục như sau.
module college.employee;
import std.stdio;
class Employee {
public:
string str;
void print() {
writeln("College Employee: ",str);
}
}
Mô-đun chính trong hello.d nên được lưu trong thư mục chứa thư mục trường đại học và công ty. Nó như sau.
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();
}
Từ khóa nhập không đủ để làm cho các mô-đun trở thành một phần của chương trình. Nó chỉ đơn giản là cung cấp các tính năng của một mô-đun bên trong mô-đun hiện tại. Chỉ cần nhiều như vậy để biên dịch mã.
Để chương trình ở trên được xây dựng, "company / worker.d" và "college / worker.d" cũng phải được chỉ định trên dòng biên dịch.
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
$ dmd hello.d company/employee.d college/employee.d -ofhello.amx
$ ./hello.amx
Company Employee: emp1
College Employee: emp2