====== 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]]