깨끗한 C# 코드를 작성하는 방법? 프로그래밍 시간을 절약할 수 있는 5가지 팁
20042 단어 dotnetcsharpprogrammingbeginners
이미 알고 있듯이 - 모르는 사람들을 위해 - 저는 Writing Clean C# Code 전용 기사 시리즈를 만들고 있습니다. 이제 두통을 완화하는 새로운 방법을 살펴보겠습니다.
함수 인수 제한
함수가 가지는 매개변수의 수를 제한하는 것은 매우 중요합니다. 기억하세요: 간단할수록 좋습니다. 함수가 3개 이상의 인수를 가질 때 문제가 발생합니다. 함수가 수행하는 작업을 이해하는 데 많은 문제가 발생할 수 있기 때문입니다.
나쁜 방법:
public void ProtectApplication(string path, string configurationPath, string outPutPath, CancellationToken cancellationToken)
{
// ...
}
좋은 방법:
public class ProtectionConfig
{
public string Path { get; set; }
public string ConfigurationPath { get; set; }
public string OutPutPath { get; set; }
public CancellationToken cancellationToken { get; set; }
}
var config = new ProtectionConfig
{
Path = "./app.exe",
ConfigurationPath = "./shield.config.json",
OutPutPath = "./app_protected.exe",
CancellationToken = source.Token;
};
public void ProtectApplication(ProtectionConfig config)
{
// ...
}
가장 좋은 옵션은 1개 또는 2개의 인수를 사용하는 것입니다. 더 사용할 수 있습니까? 물론 할 수 있지만 몇 달 안에 무엇을 해야 하는지 파악해야 한다는 것을 알고 있는 경우에만 가능합니다. 이상은 3명 이상이 있을 때 그룹화하는 것입니다.
함수에 2개 이상의 인수가 있으면 함수가 너무 많은 작업을 수행하고 있음을 의미합니다.
기능에 기능 이름 지정
또 다른 나쁜 습관은 부정확하거나 불완전한 이름으로 함수 이름을 지정하는 것입니다. 함수의 이름만 읽어도 함수가 정확히 무엇을 하는지 거의 100% 알 수 있습니다. 그렇지 않으면 혼란만 야기할 뿐입니다.
나쁜 방법:
public class SlackNotification
{
//...
public void Handle()
{
SendMessage(this._to, this._files, this._body);
}
}
var message = new SlackNotification(...);
// What is this? A handle for the message? Are we writing to a file now?
message.Handle();
좋은 방법:
public class SlackNotification
{
//...
public void Send()
{
SendMessage(this._to, this._files, this._body);
}
}
var message = new SlackNotification(...);
// Clear and obvious
message.Send();
가장 좋은 권장 사항은 기능을 매우 잘 설명하는 이름을 생각하는 데 시간을 조금 더 보내는 것입니다. 좋은 이름을 정의하는 데 몇 초를 절약하기 위해 이 모범 사례를 수행하지 않으면 앞으로 해당 코드 줄을 읽고 그 내용을 이해하려고 노력하는 데 훨씬 더 많은 시간을 낭비하게 될 것입니다.
사용하지 않는 코드를 저장하지 마세요.
이 나쁜 습관은 우리가 집에 "물건"을 보관하거나 수집하지만 결코 사용하지 않는 경우를 생각나게 합니다. 이것은 동일하며 사용하지 않는 코드가 있으면 삭제하십시오. 공간을 차지하고 귀찮게 하는 것은 의미가 없습니다.
나쁜 방법:
public void OldRequestMethod(string url)
{
// ...
}
public void NewRequestMethod(string url)
{
// ...
}
var request = NewRequestMethod(requestUrl);
SlackChannel("bytehide", request, "get users");
좋은 방법:
public void RequestMethod(string url)
{
// ...
}
var request = RequestMethod(requestUrl);
SlackChannel("bytehide", request, "get users");
기억하세요: 씹을 수 있는 것보다 더 많이 물지 마세요. 해당 코드를 사용하지 않았다면 거기에 보관할 필요가 없습니다. 필요할 경우를 대비하여 버전 기록에서 다시 확인할 수 있습니다.
기능당 하나의 추상화 수준
개발 중이고 함수에 하나의 추상화 수준만 있는 것이 아니라 여러 수준이 있는 경우 이는 함수가 자체적으로 너무 많은 작업을 수행하고 있음을 의미합니다.
이 나쁜 습관은 미래에 다음과 같은 질문을 생성하는 것 외에는 다음과 같습니다. 이것은 무엇입니까? 정확히 무엇을합니까? 동시에 많은 작업을 수행하기 때문에 코드를 재사용하기 어렵습니다.
나쁜 방법:
public string ParseBetterJSAlternative(string code)
{
var regexes = [
// ...
];
var statements = explode(" ", code);
var tokens = new string[] {};
foreach (var regex in regexes)
{
foreach (var statement in statements)
{
// ...
}
}
var ast = new string[] {};
foreach (var token in tokens)
{
// lex...
}
foreach (var node in ast)
{
// parse...
}
}
좋은 방법:
class Tokenizer
{
public string Tokenize(string code)
{
var regexes = new string[] {
// ...
};
var statements = explode(" ", code);
var tokens = new string[] {};
foreach (var regex in regexes)
{
foreach (var statement in statements)
{
tokens[] = /* ... */;
}
}
return tokens;
}
}
class Lexer
{
public string Lexify(string[] tokens)
{
var ast = new[] {};
foreach (var token in tokens)
{
ast[] = /* ... */;
}
return ast;
}
}
class BetterJSAlternative
{
private string _tokenizer;
private string _lexer;
public BetterJSAlternative(Tokenizer tokenizer, Lexer lexer)
{
_tokenizer = tokenizer;
_lexer = lexer;
}
public string Parse(string code)
{
var tokens = _tokenizer.Tokenize(code);
var ast = _lexer.Lexify(tokens);
foreach (var node in ast)
{
// parse...
}
}
}
이렇게 하면 코드가 더 깨끗해지는 것 외에도 코드를 재사용하고 테스트할 수 있습니다(함수가 수행하는 많은 작업으로 인해 이전에는 제대로 수행할 수 없었음).
전역 함수에 작성하지 마십시오.
이 나쁜 습관은 전역을 "오염"시키는 것으로 구성됩니다. 문제가 있을 수 있고 다른 라이브러리와 충돌할 수도 있기 때문에 이것은 좋은 일이 아닙니다. 모든 사용자가 이 문제에 부딪힐 수 있으며 예외가 발생할 때까지 이를 인식하지 못합니다.
나쁜 방법:
public Dictionary<string, string> Config()
{
return new Dictionary<string,string>(){
["product"] = "shield"
};
}
좋은 방법:
class Configuration
{
private Dictionary<string, string> _configuration;
public Configuration(Dictionary<string, string> configuration)
{
_configuration = configuration;
}
public string[] Get(string key)
{
return _configuration.ContainsKey(key) ? _configuration[key] : null;
}
}
그런 다음 구성을 로드하고 준비가 되면
Configuration
클래스의 인스턴스를 만듭니다.var configuration = new Configuration(new Dictionary<string, string>() {
["product"] = "shield"
});
이제 예, 응용 프로그램에서
Configuration
의 한 인스턴스를 사용해야 합니다.이러한 방법은 이전 기사의 방법보다 약간 더 발전된 방법이지만 여전히 간단하지만 매우 유용합니다. 내가 말했듯이 C#에서 더 깔끔한 코드를 작성하는 방법의 수는 우주보다 더 무한합니다. 이것이 제가 Cleaner C# 코드 목록을 만드는 이유입니다. 예, 확인하는 것이 좋습니다.
관심이 있으신 분들은 팔로우를 잊지 마시고 소식을 놓치지 마세요!
Reference
이 문제에 관하여(깨끗한 C# 코드를 작성하는 방법? 프로그래밍 시간을 절약할 수 있는 5가지 팁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bytehide/how-to-write-clean-c-code-5-tips-that-will-save-you-hours-of-programming-d36텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)