C#의 깨끗한 코드 3부 주석
소개
bob 아저씨에 따르면 댓글은 어떤 대가를 치르더라도 피해야 합니다. 잘 작성된 코드는 다른 개발자가 이해하기 쉬운 방식으로 작성되어야 합니다. 주석을 피하는 데 설명된 대로 개발자가 깨끗한 메서드 작성 규칙을 따른다면 훨씬 더 의미가 있습니다.
코드 설명
개발자는 때때로 논리를 작성하고 주석을 통해 코드를 설명하려고 합니다. 대부분의 경우 이러한 주석은 아래 코드에 표시된 것처럼 필요하지 않습니다.
// Verify if user has access to every module.
if ((user.Type == ADMINISTRATOR || user.Type == MANAGER) &&
user.IsActive) { }
if (user.HasAccessToWholeModule) { }
두 경우 모두 위의 코드는 동일한 책임이 있습니다. 두 번째 경우는 목적을 설명하기 위해 주석이 필요하지 않은 훨씬 더 깔끔한 접근 방식입니다. 코드가 발전함에 따라 프로그래머가 주석을 업데이트하지 않으면 주석도 쓸모없게 될 수 있습니다.
유용한 댓글
경우에 따라 주석을 작성하는 것이 유용할 수 있지만 주석이 없는 것이 주석이 있는 것보다 항상 낫다는 점을 명심하는 것이 중요합니다. 다음 코드를 분석합니다.
services.AddQuartz(q =>
{
q.UseMicrosoftDependencyInjectionScopedJobFactory();
var jobKey = new JobKey(JOB_NAME);
q.AddJob<HelloWorldJob>(opts => opts.WithIdentity(jobKey));
q.AddTrigger(opts =>
opts.ForJob(jobKey)
.WithIdentity(JOB_TRIGGER_NAME)
.WithCronSchedule("0/5 * * * * ?")); // run every 5 seconds
});
위의 코드는 quartz이라는 오픈 소스 작업 스케줄링 시스템 라이브러리의 미들웨어 구성 예입니다. cron을 사용하여 일정을 정의하고 이 경우 일정을 해석하기 위해 주석을 추가하는 것이 좋습니다.
다음과 같은 코드에서 다른 주석도 적절할 수 있습니다.
개발자는 때때로 논리를 작성하고 주석을 통해 코드를 설명하려고 합니다. 대부분의 경우 이러한 주석은 아래 코드에 표시된 것처럼 필요하지 않습니다.
// Verify if user has access to every module.
if ((user.Type == ADMINISTRATOR || user.Type == MANAGER) &&
user.IsActive) { }
if (user.HasAccessToWholeModule) { }
두 경우 모두 위의 코드는 동일한 책임이 있습니다. 두 번째 경우는 목적을 설명하기 위해 주석이 필요하지 않은 훨씬 더 깔끔한 접근 방식입니다. 코드가 발전함에 따라 프로그래머가 주석을 업데이트하지 않으면 주석도 쓸모없게 될 수 있습니다.
유용한 댓글
경우에 따라 주석을 작성하는 것이 유용할 수 있지만 주석이 없는 것이 주석이 있는 것보다 항상 낫다는 점을 명심하는 것이 중요합니다. 다음 코드를 분석합니다.
services.AddQuartz(q =>
{
q.UseMicrosoftDependencyInjectionScopedJobFactory();
var jobKey = new JobKey(JOB_NAME);
q.AddJob<HelloWorldJob>(opts => opts.WithIdentity(jobKey));
q.AddTrigger(opts =>
opts.ForJob(jobKey)
.WithIdentity(JOB_TRIGGER_NAME)
.WithCronSchedule("0/5 * * * * ?")); // run every 5 seconds
});
위의 코드는 quartz이라는 오픈 소스 작업 스케줄링 시스템 라이브러리의 미들웨어 구성 예입니다. cron을 사용하여 일정을 정의하고 이 경우 일정을 해석하기 위해 주석을 추가하는 것이 좋습니다.
다음과 같은 코드에서 다른 주석도 적절할 수 있습니다.
services.AddQuartz(q =>
{
q.UseMicrosoftDependencyInjectionScopedJobFactory();
var jobKey = new JobKey(JOB_NAME);
q.AddJob<HelloWorldJob>(opts => opts.WithIdentity(jobKey));
q.AddTrigger(opts =>
opts.ForJob(jobKey)
.WithIdentity(JOB_TRIGGER_NAME)
.WithCronSchedule("0/5 * * * * ?")); // run every 5 seconds
});
과도한 댓글
과도한 주석이 있는 코드에 자주 부딪칩니다. 프로그래머는 이러한 주석이 있는 코드가 우아해 보인다고 생각할 수 있지만 중복되고 필요하지 않습니다. 아래 코드에는 과도한 주석의 예가 있습니다.
/// <summary>
/// User Class
/// </summary>
public class User
{
/// <summary>
/// User Type
/// </summary>
public string Type { get; set; }
/// <summary>
/// Verifies if user is active
/// </summary>
public bool IsActive { get; set; }
}
지역
C#의 영역은 때때로 "코드 가독성 향상"을 위해 메서드 내에서 사용됩니다. 메서드 내부의 영역은 실제로 메서드의 크기를 증가시키므로 어떤 희생을 치르더라도 피해야 합니다. 코드를 구성하기 위해 메서드 외부에서 영역을 사용할 수 있지만 이 역시 피해야 합니다. 클래스에 수백 또는 수천 줄의 코드가 포함된 일부 경우에는 다음 그림과 같이 영역을 갖는 것이 합리적일 수 있습니다.
결론
여기에서 살펴보지 않고 피해야 하는 주석의 다른 많은 예가 있습니다. 이 시점에 이르렀을 때 알아야 할 주요 아이디어는 가능할 때마다 항상 코드에 주석을 달지 않는 것입니다. 시스템, 요구 사항 및 아키텍처에 대한 간결한 외부 문서가 있으면 코드에서 많은 불필요한 주석을 피할 수 있습니다.
참조
/// <summary>
/// User Class
/// </summary>
public class User
{
/// <summary>
/// User Type
/// </summary>
public string Type { get; set; }
/// <summary>
/// Verifies if user is active
/// </summary>
public bool IsActive { get; set; }
}
C#의 영역은 때때로 "코드 가독성 향상"을 위해 메서드 내에서 사용됩니다. 메서드 내부의 영역은 실제로 메서드의 크기를 증가시키므로 어떤 희생을 치르더라도 피해야 합니다. 코드를 구성하기 위해 메서드 외부에서 영역을 사용할 수 있지만 이 역시 피해야 합니다. 클래스에 수백 또는 수천 줄의 코드가 포함된 일부 경우에는 다음 그림과 같이 영역을 갖는 것이 합리적일 수 있습니다.
결론
여기에서 살펴보지 않고 피해야 하는 주석의 다른 많은 예가 있습니다. 이 시점에 이르렀을 때 알아야 할 주요 아이디어는 가능할 때마다 항상 코드에 주석을 달지 않는 것입니다. 시스템, 요구 사항 및 아키텍처에 대한 간결한 외부 문서가 있으면 코드에서 많은 불필요한 주석을 피할 수 있습니다.
참조
Reference
이 문제에 관하여(C#의 깨끗한 코드 3부 주석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/caiocesar/clean-code-in-c-part-3-comments-17p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)