프로시저 및 기능 1. 명명 및 형식 (1) 프로시저 이름은 대문자로 시작해야 하며, 대문자와 소문자를 엇갈리게 배치하여 가독성을 높인다. 다음은 잘못된 작성 방법입니다. PRocedure thisisapoorlyformattedroutinename; 다음으로 변경하십시오: Procedure ThisIsMuchMoreReadableRoutineName; (2) 프로세스 이름은 의미가 있어야 합니다. 작업을 수행하는 루틴은 해당 작업을 나타내는 동사를 이름 앞에 붙이는 것이 가장 좋습니다. 예를 들면 다음과 같습니다. 입력 매개변수 값을 설정하는 루틴 이름에는 Set이라는 접두어가 붙어야 합니다. 예를 들어, 값을 가져오는 루틴 이름에는 Get이라는 접두어가 붙어야 합니다. 예: function GetUserName: string; 형식 매개변수( 1) 형식: 가능하면 동일한 유형의 형식 매개변수를 함께 그룹화해야 합니다. 예를 들면 다음과 같습니다. 프로시저 ProcedureName(Param1, Param2, Param3: 정수; Param4: 문자열) (2) 이름 지정: 모든 형식 매개변수의 이름은 해당 목적을 표현해야 합니다. 적절한 경우 형식 매개변수 이름 앞에 문자 A를 붙여야 합니다. 예를 들면 다음과 같습니다. 프로시저 ProcedureName (AUserName: 문자열; AUserAge: 정수); 매개변수 이름이 클래스 속성 또는 필드와 동일한 이름을 갖는 경우 접두사 A가 필요합니다. (3) 매개변수 순서: 형식 매개변수의 순서는 주로 레지스터 호출 규칙에 따라 달라집니다. 가장 일반적으로 사용되는 매개변수는 첫 번째 매개변수이며 사용 빈도 순으로 왼쪽에서 오른쪽으로 정렬됩니다. 입력 매개변수는 출력 매개변수보다 우선합니다. 범위가 큰 매개변수는 범위가 작은 매개변수 앞에 배치되어야 합니다. 예: 프로시저 ProcedureName(APlanet, AContinent, ACountry, AState, ACity). 일부는 예외입니다. 예: 이벤트 처리 중에 TObject 유형의 Sender 매개변수가 전달되는 첫 번째 매개변수인 경우가 많습니다. (4) 상수 매개변수: 레코드, 배열, 짧은 문자열 또는 인터페이스 유형의 매개변수가 루틴에 의해 수정되는 것을 방지하려면 형식 매개변수를 Const로 표시해야 합니다. 이러한 방식으로 컴파일러는 가장 효율적인 방식으로 코드를 생성하여 전달된 매개변수가 변경되지 않도록 보장합니다. 다른 유형의 매개변수가 루틴에 의해 수정되지 않을 것으로 예상되는 경우 C onst로 표시할 수도 있습니다. 이는 효율성에 영향을 주지 않지만 루틴 호출자에게 더 많은 정보를 제공합니다. (5) 이름 충돌: 두 개의 유닛에 동일한 이름의 루틴이 포함되어 있는 경우 해당 루틴을 호출하면 나중에 Uses 절에 나타나는 유닛의 루틴이 실제로 호출됩니다. 이러한 상황을 방지하려면 메서드 이름 앞에 원하는 단위 이름을 추가하면 됩니다(예: SysUtils.FindClose (SR);Windows.FindClose(Handle);3). 변수 (1) 변수의 명명 및 형식: 변수의 이름은 그 목적을 표현할 수 있어야 합니다. 루프 제어 변수는 I, J, K와 같은 단일 문자인 경우가 많습니다. UserIndex와 같이 보다 의미 있는 이름을 사용할 수도 있습니다. 부울 변수 이름은 True 및 False 값의 의미를 명확하게 나타내야 합니다. (2) 지역 변수: 지역 변수는 루틴 내에서 사용되며 다른 변수의 명명 규칙을 따릅니다. 필요한 경우 루틴 시작 시 변수를 즉시 초기화해야 합니다. 로컬 AnsiString 유형 변수는 자동으로 빈 문자열로 초기화됩니다. 로컬 인터페이스 및 dispinterface 유형 변수는 자동으로 nil로 초기화됩니다. 로컬 Variant 및 OleVariant 유형 변수는 자동으로 할당되지 않음으로 초기화됩니다. (3) 전역 변수: 전역 변수의 사용은 일반적으로 권장되지 않습니다. 그러나 때로는 필요할 때도 있습니다. 그렇더라도 전역 변수는 필요한 환경으로 제한되어야 합니다. 전역 변수는 단위의 구현 부분에서만 전역일 수 있습니다. 전역 데이터가 여러 단위에서 사용되는 경우 공통 단위로 이동해야 하며 전역 데이터는 선언 시 값으로 직접 초기화될 수 있습니다. . (모든 전역 변수는 자동으로 0으로 초기화되므로 전역 변수를 0, nil 또는 할당되지 않음과 같은 null 값으로 초기화하지 마십시오. 0으로 초기화된 전역 변수는 .EXE 파일에서 공간을 차지하지 않습니다. 데이터는 가상 데이터 세그먼트에 저장되며, 가상 데이터 세그먼트는 응용 프로그램이 시작될 때만 메모리를 할당합니다. 0이 아닌 초기화된 전역 데이터는 EXE 파일에서 공간을 차지합니다. 유형(1) 대소문자 규칙: 유형 식별자는 예약어이므로 모두 소문자여야 합니다. Win32 API 유형은 모두 대문자로 표시되는 경우가 많으며 Windows.pas 또는 기타 API 단위와 같은 특정 유형 이름에 대한 규칙을 따릅니다. 기타 변수명의 경우 첫 글자는 대문자로, 나머지 글자는 대소문자를 번갈아 표기해야 합니다. 예: varMyString: string; // 예약어 WindowsHandle: HWND; // Win32 API 유형 I: Integer; // 시스템 유닛에 도입된 유형 식별자 (2) 부동 소수점 유형: Real 유형의 사용은 권장되지 않습니다. 이전 Pascal 코드와의 호환성을 위해 예약되었습니다. 일반적으로 부동 소수점 숫자에는 Double을 사용해야 합니다. Double은 프로세서에 의해 최적화될 수 있으며 IEEE에서 정의한 표준 데이터 형식입니다. Extend는 Double이 제공하는 것보다 더 큰 범위가 필요할 때 사용할 수 있습니다. 확장은 Intel 특정 유형이며 Java에서는 지원되지 않습니다. 부동 소수점 변수의 물리적 바이트 수가 중요한 경우(다른 언어를 사용하여 DLL을 작성하는 경우) Single을 사용해야 합니다. (3) 열거 유형: 열거 유형 이름은 열거의 목적을 나타내야 합니다. 데이터 유형임을 나타내기 위해 이름 앞에 T 문자가 앞에 와야 합니다. 열거형 식별자 목록의 접두사는 서로 연관되도록 2~3자의 소문자를 포함해야 합니다. 예: TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB); 열거 유형의 변수 인스턴스 이름은 유형과 동일하지만 접두사 T가 없습니다. 변수에 more를 지정할 수도 있습니다. FavoriteSongTpe1, FavoriteSongTpe2 등과 같은 특수 이름입니다. (4)Variant 및 OleVariant: 일반적으로 Variant 및 OleVariant를 사용하지 않는 것이 좋습니다. 그러나 이 두 가지 유형은 데이터 유형이 런타임에만 알려진 경우(종종 COM 및 데이터베이스 응용 프로그램에서) 프로그래밍에 필요합니다. ActiveX 컨트롤 자동화와 같은 COM 프로그래밍을 수행할 때는 COM이 아닌 프로그래밍에는 OleVariant를 사용해야 하며 Variant를 사용해야 합니다. 이는 Variant가 Delphi의 기본 문자열을 효과적으로 저장할 수 있는 반면 OleVariant는 참조 계산 없이 모든 문자열을 OLE 문자열(예: Wide Char 문자열)로 변환하기 때문입니다. 5. 구축형 (1) 배열형 : 배열형 이름은 배열의 목적을 표현해야 한다. 유형 이름 앞에는 문자 T가 붙어야 합니다. 배열 유형에 대한 포인터를 선언하려면 포인터 앞에 문자 P를 붙이고 유형 선언 앞에 선언해야 합니다. 예를 들면 다음과 같습니다. typePCycleArray = ^TCycleArray; TCycleArray=array [1..100] of 정수입니다. 실제로 배열 유형의 변수 인스턴스는 유형과 이름이 동일하지만 T 접두사가 없습니다. (2) 기록형 : 기록형명은 기록의 목적을 표현하여야 한다. 유형 이름 앞에는 문자 T가 붙어야 합니다. 레코드 유형에 대한 포인터를 선언하려면 포인터 앞에 문자 P를 붙이고 유형 선언 앞에 선언해야 합니다. 예: typePStudent = ^ TStudent;TStudent = RecordStudentName: 문자열;StudentAge: Double;6. 클래스 (1) 이름 지정 및 형식 클래스 이름은 클래스의 목적을 표현해야 합니다. 클래스 이름 앞에 문자 T가 추가되어 유형임을 나타냅니다. 예: typeTStudent= class (TObject); 클래스의 인스턴스 이름은 클래스 이름과 동일하지만 접두사 T가 없습니다. varStudent: TStudent; 구성 요소 이름에 대해서는 섹션 6.6 "구성 요소"를 참조하세요. (2) 필드 이름 지정 및 형식: 필드 이름 지정은 필드임을 나타내기 위해 접두사 F가 추가된다는 점을 제외하면 변수와 동일한 규칙을 따릅니다. 가시성: 모든 필드는 비공개여야 합니다. 클래스 범위 밖의 필드에 액세스하려면 클래스 속성을 사용하면 됩니다. (3) 메소드 이름 지정 및 형식: 메소드 이름 지정은 프로시저 및 함수와 동일한 규칙을 따릅니다. 정적 메서드: 파생 클래스가 메서드를 재정의하지 않으려는 경우 정적 메서드를 사용해야 합니다. 가상 메서드 대 동적 메서드: 파생 클래스로 메서드를 재정의하려면 가상 메서드를 사용해야 합니다. 여러 파생 클래스에서 클래스 메서드를 직접 또는 간접적으로 사용하려면 동적 메서드를 사용해야 합니다. 예를 들어, 클래스에 자주 재정의되는 메서드가 포함되어 있고 100개의 파생 클래스가 있는 경우 메서드를 동적으로 정의해야 메모리 오버헤드를 줄일 수 있습니다. 추상 메서드: 클래스가 인스턴스를 생성하는 경우 추상 메서드를 사용하지 마세요. 추상 메서드는 인스턴스를 생성하지 않는 기본 클래스에서만 사용할 수 있습니다. 속성 액세스 메서드: 모든 속성 액세스 메서드는 클래스의 private 또는 protected 부분에서 정의되어야 합니다. 속성 액세스 방법은 프로시저 및 함수와 동일한 규칙을 따릅니다. 읽기에 사용되는 메소드에는 Get이 앞에 오고, 쓰기에 사용되는 메소드에는 Set이 앞에 와야 하며, 속성 유형과 동일한 유형의 Value라는 매개변수가 있어야 합니다. 예: TStudent = class (TObject)privateFName: string;protectedfunction GetName: string;procedure SetName (Value: string);publicproperty Name: string read GetName write SetName;end;(4) 속성 속성은 개인 필드에 대한 접근자 역할을 하며 이를 따릅니다. 동일 필드에는 동일한 명명 규칙이 있지만 F 접두사는 없습니다. 속성 이름은 동사가 아닌 명사여야 합니다. 속성은 데이터이고 메서드는 작업입니다. 배열 속성 이름은 복수형이어야 하고, 일반 속성은 단수형이어야 합니다. (5) 접근 방법을 반드시 사용해야 하는 것은 아니지만, private 필드를 나타내는 속성에 접근하려면 쓰기 접근 방법을 사용하는 것이 좋습니다.