D 프로그래밍-모듈

모듈은 D의 빌딩 블록입니다. 간단한 개념을 기반으로합니다. 모든 소스 파일은 모듈입니다. 따라서 프로그램을 작성하는 단일 파일은 개별 모듈입니다. 기본적으로 모듈 이름은 확장자가 .d 인 파일 이름과 동일합니다.

명시 적으로 지정된 경우 모듈 이름은 module 키워드로 정의되며 소스 파일에서 주석이 아닌 첫 번째 줄로 나타나야합니다. 예를 들어 소스 파일의 이름이 "employee.d"라고 가정합니다. 그런 다음 모듈의 이름은 employee 다음에 모듈 키워드로 지정됩니다 . 아래와 같습니다.

module employee;

class Employee {
   // Class definition goes here. 
}

모듈 라인은 선택 사항입니다. 지정하지 않으면 확장자가 .d 인 파일 이름과 동일합니다.

파일 및 모듈 이름

D는 소스 코드와 모듈 이름에서 유니 코드를 지원합니다. 그러나 파일 시스템의 유니 코드 지원은 다양합니다. 예를 들어 대부분의 Linux 파일 시스템은 유니 코드를 지원하지만 Windows 파일 시스템의 파일 이름은 소문자와 대문자를 구분하지 못할 수 있습니다. 또한 대부분의 파일 시스템은 파일 및 디렉토리 이름에 사용할 수있는 문자를 제한합니다. 이식성을 위해 파일 이름에 소문자 ASCII 문자 만 사용하는 것이 좋습니다. 예를 들어, "employee.d"는 employee라는 클래스에 적합한 파일 이름입니다.

따라서 모듈의 이름도 ASCII 문자로 구성됩니다.

module employee;  // Module name consisting of ASCII letters 

class eëmployëë { }

D 패키지

관련 모듈의 조합을 패키지라고합니다. D 패키지도 간단한 개념입니다. 동일한 디렉토리에있는 소스 파일은 동일한 패키지에 속하는 것으로 간주됩니다. 디렉토리 이름은 패키지 이름이되며 모듈 이름의 첫 부분으로도 지정되어야합니다.

예를 들어, "employee.d"와 "office.d"가 "company"디렉토리 내에있는 경우 모듈 이름과 함께 디렉토리 이름을 지정하면 동일한 패키지의 일부가됩니다.

module company.employee; 
 
class Employee { }

마찬가지로 사무실 모듈의 경우-

module company.office; 
 
class Office { }

패키지 이름은 디렉터리 이름에 해당하므로 한 디렉터리 수준보다 깊은 모듈의 패키지 이름은 해당 계층을 반영해야합니다. 예를 들어, "company"디렉토리에 "branch"디렉토리가 포함 된 경우 해당 디렉토리 내의 모듈 이름에도 branch가 포함됩니다.

module company.branch.employee;

프로그램에서 모듈 사용

지금까지 거의 모든 프로그램에서 사용한 import 키워드는 현재 모듈에 모듈을 도입하기위한 것입니다.

import std.stdio;

모듈 이름에는 패키지 이름도 포함될 수 있습니다. 예를 들어, std. 위의 부분은 stdio가 std 패키지의 일부인 모듈임을 나타냅니다.

모듈 위치

컴파일러는 패키지 및 모듈 이름을 디렉토리 및 파일 이름으로 직접 변환하여 모듈 파일을 찾습니다.

예를 들어, employee 및 office 두 모듈은 각각 "company / employee.d"및 "animal / office.d"(또는 "company \ employee.d"및 "company \ office.d", company.employee 및 company.office의 경우 파일 시스템).

길고 짧은 모듈 이름

프로그램에서 사용되는 이름은 아래와 같이 모듈 및 패키지 이름으로 철자 할 수 있습니다.

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

긴 이름은 일반적으로 필요하지 않지만 때로는 이름 충돌이 있습니다. 예를 들어, 둘 이상의 모듈에 나타나는 이름을 참조 할 때 컴파일러는 어느 것이 의미하는지 결정할 수 없습니다. 다음 프로그램은 회사대학 이라는 두 개의 개별 모듈에 정의 된 두 개의 개별 직원 구조체 를 구별하기 위해 긴 이름을 철자합니다 . .

company 폴더의 첫 번째 사원 모듈은 다음과 같습니다.

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

import 키워드는 모듈을 프로그램의 일부로 만드는 데 충분하지 않습니다. 단순히 현재 모듈 내부의 모듈 기능을 사용할 수 있도록합니다. 이 정도는 코드를 컴파일하는 데만 필요합니다.

위의 프로그램을 빌드하려면 "company / employee.d"및 "college / employee.d"도 컴파일 라인에 지정해야합니다.

위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.

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