qingrui li Charles Calvert의 Object Pascal 스타일 가이드를 기반으로 컴파일되고 주석이 추가되었습니다.
참고: Delphi를 사용하는 많은 사람들은 코딩 스타일에 주의를 기울이지 않고 종종 비표준 코드를 작성하므로 다른 사람들이 이해하기 어렵고 오류가 발생하기 쉽습니다. 나는 이 기사가 델파이를 사랑하는 대다수의 사람들이 표준 스타일로 통합하고 함께 나아갈 수 있도록 격려할 수 있기를 바랍니다.
이 문서에서는 Delphi 코드 형식 지정을 위한 표준 스타일을 설명합니다. 이 하위 스타일은 Delphi 개발 팀의 코딩 규칙을 기반으로 합니다. 우리는 많은 인기 있는 소스 코드가 우리와 다른 스타일을 사용한다는 것을 인정하지만 공개 소스 코드 커뮤니티에서는 Borland 스타일을 사용할 것을 강력히 권장합니다.
Delphi는 아름다운 언어이며 가장 중요한 장점 중 하나는 가독성입니다. 이 표준은 가독성을 높이기 위해 고안되었습니다. 개발자가 이 표준을 따르면 모든 개발자는 일관되고 읽기 쉬운 스타일의 이점을 누릴 수 있습니다. 스타일 표준을 시행하려는 노력은 특히 디버깅 및 유지 관리 주기 동안 소스 프로그램의 가치를 높일 수 있습니다.
InfixCaps 명명 스타일
CamelCaps라고도 불리는 이름은 의미를 표현하는 여러 단어로 구성됩니다. 각 단어의 첫 글자는 대문자이고 나머지는 소문자입니다.
예: MyFile, IntToStr, Items.
Delphi는 헝가리어 표기법을 사용하지 않으며 의미 있는 이름을 권장합니다. 예를 들어 lpszAppName 대신 AppName을 사용하고, bSuccess 대신 Success를 사용하고, lPRectClientRect 대신 ClientRect를 사용합니다.
소스 파일 이름 지정
InfixCaps 양식을 사용하세요. C/C++ 헤더 파일을 트랜스파일하는 경우 원본 헤더 파일과 동일한 이름을 사용하십시오. 여러 헤더 파일을 하나의 단위로 병합해야 하는 경우 다음과 같은 기본 헤더 파일의 이름을 사용합니다. WinBase.h, Windows.h는 Windows.pas에 병합됩니다.
명명 규칙
모두 소문자인 예약어와 지시어를 제외하고 다른 식별자는 InfixCaps 스타일을 사용합니다.
참고: 최근에는 지역 변수와 형식 매개변수에 간단한 소문자나 약어를 사용하는 경향이 있는 것 같습니다.
예외는 트랜스파일된 헤더 파일의 식별자가 원래 스타일을 유지한다는 것입니다.
유형 이름은 모두 T(Type의 첫 글자)로 시작합니다.
함수, 프로시저, 메소드 이름은 동사 또는 동사구를 사용하고, 기타 식별자는 명사 또는 명사구를 사용합니다.
클래스 데이터 멤버는 F(Field의 첫 글자)로 시작합니다.
열거형 멤버 앞에는 소문자 유형 약어(보통 두 글자)가 옵니다. 예를 들면 다음과 같습니다.
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
부울 값을 반환하는 함수는 Is로 시작합니다(예: IsVisible, IsRessible).
공백의 활용
클래스 선언, 함수 구현 등 코드의 여러 부분을 구분하려면 적절한 위치에 빈 줄을 삽입하세요.
공백 사용 위치: 구두점 오른쪽, 이진 연산자 양쪽
공백을 삽입하면 안되는 위치:
올바른 예:
function TMyClass.MyFunc(var Value: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
오류 예:
function TMyClass.MyFunc( var Value: Integer ) ;MyPointer := @ MyRecord;MyClass := TMyClass ( MyPointer ) ;MyInteger := MyIntegerArray [ 5 ] ;
톱니 모양
두 공백 들여쓰기를 사용해야 하며 탭 문자를 사용해서는 안 됩니다.
시작...끝 사이의 코드는 들여쓰기되어야 하며, 시작...끝 자체는 들여쓰기되어서는 안 됩니다.
줄을 이어갈 때 공백 두 개 들여쓰기
올바른 예:
함수 CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; if ((X = Y) 또는 (Y = X) 또는 (Z = P) 또는 (F = J) thenbegin S := J;end;
while (LongExpression1 또는 LongExpression2) do start // DoSomething // DoSomethingElse;end;if (LongExpression1) 또는 (LongExpression2) 또는 (LongExpression3) then
친절한
클래스 선언은 다음 순서로 구성됩니다.
데이터 필드
방법
재산
액세스 계층 구조는 IDE에서 자동으로 생성된 코드를 제외하고 다음 순서로 구성됩니다.
생성자와 소멸자는 메서드 선언 전에 선언됩니다. TObject.Destroy는 가상 함수이고 TObject.Free는 Destroy를 호출하므로 소멸자에 다른 이름을 사용하지 마십시오. 생성자는 Create 이외의 이름을 사용할 수 있지만 일반적으로 Create를 사용하는 것이 가장 좋습니다.
예:
TMyClass = class(TObject) 개인 보호 공개 공개 end;
데이터는 private 섹션에서만 선언해야 하며 F(Field의 첫 글자)로 시작해야 합니다.
type TMyClass = class(TObject) private FMyData: Integer; function GetData: Integer; 프로시저 SetData(Value: Integer); 공개 게시 속성 MyData: Integer read SetData;
인터페이스는 동일한 규칙을 따릅니다.