====== Coding Rules ======
===== Objectives =====
* 오류 없는 프로그램
* 이해하기 쉬운 코드 -> 유지보수가 쉬운 코드
===== Guide Line =====
* Indent는 Tab이 아닌 Space로, 2또는 4 ( 4를 권장 )
* Function, Method는 한 화면 안에 들어오도록 (20~30줄 내외)
* brace는 새로운 줄에서 시작
if ( condition )
{
// .. do something
}
* 2단계를 초과하는 brace는 새로운 method, function으로 작성
* 변수의 초기화에 주의
* recursive에 주의
* heap에 할당하는 메모리의 해제에 관한 해제 확인 ( GC가 있는 경우 제외 )
* 변수의 이름은 hunggarian notation을 참고한 naming
* static; s_ 접두어
* global; g_ 접두어
* member; m_ 접두어
* string; strName, strAddress, ...
* int; nID, ...
* resource; IDC_BTN_, IDC_EDIT, IDC_TREECTRL, ...
* controls; m_btnOK, m_editAddress, m_treectrlDirectory, ...
* function, method의 naming rule 은 V(동사)+N(명사)를 기본으로 확장
bool GetPropertyWithName( string strName )
{
// .. do something
}
* 같은 프로젝트 내에서 같은 function, method 이름 회피
* 조건문의 경우 가능하다면 '상수 (조건문) 변수'의 형태
if ( NULL == pszAddress )
{
// .. do something
}
* 리턴값의 확인; 리턴 값이 있는 함수의 호출의 경우 가능하면 리턴 값을 확인한다.
* while, goto 사용 자제; 코드의 가독성을 위해 for 문이나 foreach를 권장한다.
* 전역 변수의 사용 자제; 특별한 경우가 아니라면 전역 변수는 사용하지 않기를 권장한다.
* 상수는 한 곳에 정의; 숫자를 직접 사용하기 보다 상수를 정의하여 사용하고, 상수는 하나의 파일에 정의하여 모아두거나 해당 소스의 가장 처음에 정의해둔다.
===== Coding Conventions =====
^ Coding Conventions ^^^^
^ name ^ description ^ Usually used ^ examples ^
| flatcase | | package at Java, etc. | |
| kebab-case \\ lisp-case \\ spinal-case \\ caterpillar-case \\ dash-case \\ hyphen-case \\ css-case | only small cases, spread with hypens | css, | kebab-case, lisp-case, spinal-case |
| camelCase | | variables at Java, C#, etc. | let myVariable: string |
| PascalCase \\ CapitalCamelCase | | Class | class MyClass |
| snake_case \\ c_case | | variables at Python, PHP, c, etc. | snake_case |
| UPPER_CASE_SNAKE_CASE (UPPER_CASE) \\ MACRO_CASE | | | UPPER_CASE_SNAKE_CASE |
| COBOL-CASE \\ TRAIN-CASE | | | COBOL-CASE, HTTP-Header-Case |
| undercore notation | prefixed by "_" followed by camelCase | | _idUser |
| Hungarian Notation | variable names prefixed by metadata data-types which is out-dated | C++, MFC | strUsername |
* [[https://chaseadams.io/posts/most-common-programming-case-types/|Most Common Programming Case Types]]
* [[https://stackoverflow.com/questions/17326185/what-are-the-different-kinds-of-cases|What are the different kinds of cases? @stackoverflow]]