이것은 다소 논란의 여지가있는 주제이며 프로그래머가있는만큼 많은 의견이 있다고 생각합니다. 그러나 그것을 위해, 나는 사업 (또는 직장)에서 일반적인 관행이 무엇인지 알고 싶습니다.
우리 직장에는 엄격한 코딩 지침이 있습니다. 그 중 한 섹션은 마법의 문자열 / 숫자 전용입니다. (C #의 경우)
기호 상수를 정의하기 위해 코드에 리터럴 값 (숫자 또는 문자열)을 사용하지 마십시오. 상수를 정의하려면 다음 패턴을 사용하십시오.
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
예외는 0, 1 및 null 값을 거의 항상 안전하게 사용할 수 있습니다. 종종 값 2와 -1도 OK입니다. 로깅 또는 추적 용 문자열은이 규칙에서 제외됩니다. 리터럴은 문맥에서 의미가 명확 할 때 허용되며 향후 변경 될 수 없습니다.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
이상적인 상황은 다음과 같은 경우 코드의 가독성 / 유지 보수성에 영향을 미치는 공식 연구 논문입니다.
- 마법의 숫자 / 문자열이 여기 저기 있습니다
- 매직 문자열 / 숫자는 합리적으로 (또는 다른 범위의 범위에서) 일정한 선언으로 대체됩니다. "합리적으로"사용하여 나에게 소리 지르지 마십시오. 모든 사람들이 "합리적으로"가 무엇인지 다른 생각을 가지고 있음을 알고 있습니다
- 매직 스트링 / 넘버는 초과되거나 필요하지 않은 곳에 교체됩니다 (아래 예 참조).
나는 내 동료 중 한 사람과 논쟁 할 때 과학적 기반의 논쟁을하기 위해이 작업을 수행하고 싶습니다.
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
또 다른 예는 다음과 같습니다 (이것은 JavaScript입니다).
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
해당 ID가 한 곳에서만 사용되는 경우 Javascript 파일 위에 DOM ID를 사용합니까?
다음 항목을 읽었습니다.
StackExchange
StackOverflow
바이트 IT 커뮤니티
더 많은 기사가 있으며 이러한 패턴을 읽은 후 더 많은 패턴이 나타납니다.
그래서 내 질문은 코드에서 마술 문자열과 숫자를 사용해야합니까? 가능한 경우 참조로 뒷받침되는 전문가 답변을 찾고 있습니다.
NumberTen = 10
숫자 10이 재정의되지 않으므로 무의미합니다. MaxRetryCount = 10
최대 재시도 횟수를 변경하려는 점이 있습니다. private const char SemiColon = ';';
우둔한. private const char LineTerminator = ';'
; 똑똑한.