주석은 코드가 수행하지 않는 것을 알려 주어야하며 반드시 WHY , HOW 또는 WHAT에 의해 제거되지는 않습니다 . 좋은 이름을 가지고 있고 명확한 기능을 가지고 있다면, 코드가 정확히 무슨 일인지 알려줄 수 있습니다. 예를 들면 다음과 같습니다.
List<LightMap> maps = makeLightmaps(receivingModels);
TrianglePartitioner partition = new Octree(castingTriangles);
List<Photon> photons = firePhotons(lights, partition);
if (photons.Count > 0)
{
PhotonPartitioner photonMap = new KDTree(photons);
gatherPhotons(maps, photonMap, partition, lights);
}
이 코드는 실제로 주석이 필요하지 않습니다. 함수와 타입 이름은 이해하기 쉽습니다.
그러나 때로는 위와 같이 유창한 코드를 만들기가 어렵거나 불가능할 수 있습니다. 예를 들어, 다음 코드 스 니펫은 구에서 통계적으로 임의의 점을 찾는 것입니다. 수학은 매우 불투명하기 때문에 설명에 대한 링크에 코멘트 알 수 있도록하는 것입니다 방법 이 작동합니다. 이 알려줄 수있는 기능에 싸여 수 있습니다 무엇 그렇지 않으면 링크 제목은 해당 부서에 도움이, 그것은 두 번 이상 필요한 경우 설명을 필요로하지 않습니다.
double randomA = localGenerator.NextDouble();
double randomB = localGenerator.NextDouble();
//http://mathworld.wolfram.com/SpherePointPicking.html
double theta = 2 * Math.PI * randomA;
double phi = Math.Acos(2 * randomB - 1);
Vector3 randomDirection = new Vector3(Settings.ambientRayLength * (float)(Math.Cos(theta) * Math.Sin(phi)),
Settings.ambientRayLength * (float)(Math.Sin(theta) * Math.Sin(phi)),
Settings.ambientRayLength * (float)Math.Cos(phi));
주석이 코드에없는 것을 알려주는 다른 예는 결정을 설명하기위한 것입니다. 다음 예제에서 코드는 스레드 코드가 아닌 내부의 비스 레드 로컬 변수를 잠그지 않습니다. 이에 대한 이유가 있으며 의견은 WHY를 설명합니다 . 의견이 없으면 버그로 간주되거나 눈치 채지 못할 수도 있습니다.
Random random = new Random();
Parallel.For(0, maxPhotons, delegate(int photonIndex, ParallelLoopState state)
{
...
//I don't actually care if this random number is unique between threads, threadsafty is not that big of a deal
// in this case and locking the random object could cause a lot of lock contention
while (random.NextDouble() > reflectProbability)
{
...
}
...
}
아마도 왜 랜덤 객체가 병렬 루프 내부에서 처음 생성되지 않는지 말하기 위해 향상 될 수 있습니다. 이유가 없다면, 누군가가 와서 전체 아이디어가 어리 석고 리팩토링하기에 좋은 장소라는 것을 깨달을 수도 있습니다.