더 나은 프로그램 작성을 돕기 위한 선임 개발자의 5가지 C# 팁
이 강력한 언어로 코딩 능력을 향상시키는 데 도움이 될 것이므로 프로그래밍 여정을 계속하면서 이 팁이 유용하기를 바랍니다.
이 지침은 혼자서 엄청난$140M in its latest round of investment을 올린 거대한 기술 회사인 의 선임 소프트웨어 엔지니어가 제공합니다!
그는 항상 C#에 대한 귀중한 콘텐츠를 공유하고 있기 때문에 매우 추천합니다.
표현식 바디 생성자
이를 위해 Milan은 tuples에 의해 도입된 다양한 특성을 사용하여 표현식 바디 생성자를 생성할 가능성이 있다고 보고합니다.
“You can create a tuple from the constructor arguments and then deconstruct that tuple into the respective properties.”
Expression-bodied members 멤버 구현을 쉽게 제공할 수 있는 기능이 있습니다. 이는 속성 또는 메서드가 단일 식으로만 구성된 경우에 유용합니다.
여기 밀라노는 이전을 먼저 보여줍니다.
public class Person
{
public string Name { get; }
public int Age { get; }
public Person (string name, int age)
{
Name = name;
Age = age;
}
}
그런 다음 Milan은 다음과 같은 모습을 보여줍니다.
public class Person
{
public string Name { get; }
public int Age { get; }
public Person(string name, int age) => (Name, Age) = (name, age);
}
어떤 사람들은 언뜻 이것이 성능에 영향을 미친다고 생각할 수도 있지만,
“It won’t affect performance! The compiler is smart enough to optimize the expression-bodied assignment into single statements.”
이 팁은 특히 많은 코드 줄을 피하고 코드를 깨끗하고 읽기 쉽게 유지하는 매우 좋은 방법으로 보입니다.
DateOnly 및 TimeOnly 유형
Milan은 여러분 중 한 명 이상이 자신에게 물어본 질문으로 이 팁을 소개하는 것으로 시작합니다.
“How many times did you only need to know about the Date component of a DateTime object?”
이전에는 불가능했지만 .NET 6이 출시되면서 유형DateOnly 및 TimeOnly이 추가되었습니다.
그래서 밀란은 우리에게 다음과 같이 가르칩니다.
DateOnly todaysDate = new DateOnly(22, 1, 20);
DateOnly currentUtcDate = DateOnly.FromDateTime(DateTime.UtcNow);
// A couple constructors to choose from.
public TimeOnly(int hour, int minute)
public TimeOnly(int hour, int minute, int second)
public TimeOnly(int hour, int minute, int second, int millisecond)
TimeOnly nineInTheMorning = new TimeOnly(9, 0);
TimeOnly currentUtcTime = TimeOnly.FromDateTime(DateTime.UtcNow);
그러나 Milan은 예를 들어 PostgreSQL EF Core가 이미 이러한 새로운 유형을 문제 없이 처리한다고 경고합니다. 반면에 SQL Server는 현재 다음을 수행하지 않습니다.
“Unfortunately, it seems some EF Core providers — looking at you, SQL Server — still aren’t up to speed with the new types.”
게으른 예외 캐싱
이를 위해 Milan은 .NET Lazy 클래스에 대해 조금 알려줍니다. 그는 예외 캐싱 동작에 집중하고 싶었습니다.
“If your initialization logic throws an exception, the Lazy instance will cache that exception. Subsequent access to the Lazy.Value property will throw that exception again.”
또한 그는 코드의 해당 부분에서 무슨 일이 일어나고 있는지 실제로 이해하지 못한다면 앞으로 다른 종류의 문제가 발생할 수 있다고 경고합니다.
var exceptionTrappingLazy = new Lazy(() => CallExternalService());
try{
// Accessing the Value property will execute CallExternalSe4rvice()
// Now, imagine that the external service is down
// The call to CallExternalService() throws an exception
var lazyValue = exceptionTrappingLazy.Value;
}
catch {...}
try
{
//Accesing the Value property again won't call CallExternalService()
//It will throw the trapped exception again!
var lazyValueAgain = exceptionTrappingLazy.Value;
}
catch{...}
마지막으로 Milan은 다음을 상기시킵니다.
“The lazy instance can and will cache exceptions, and keep throwing them during its lifetime.”
이 3가지 팁 후에 . 다음 팁에서 Milan은 .NET 6에 도입된 MinBy 및 MaxBy 방법을 최대한 활용하는 방법을 설명합니다.
그것들을 살펴봅시다!
MinBy 및 MaxBy LinQ 메서드를 사용하는 방법
이 예에서 Milan은 명확한 설명을 위해 몇 가지 과일과 채소를 사용합니다. 먼저
MinBy
및 MaxBy
의 작동 방식을 이해합니다. 이를 위해 MinBy
를 사용하여 가장 작은 값을 찾고 MaxBy
를 사용하여 가장 높은 값을 찾습니다. 다음을 살펴보겠습니다.public record Food (string Name, double Price);
var foodList = new List<Food>
{
new("🍎", 1.15),
new("🍌", 1.51),
new("🥥", 2.99),
new("🍋", 0.70),
new("🥑", 9.13),
new("🍄", 0.05),
};
//How do me find the cheapest food?
// How do we find the most expensive food?
MinBy를 사용하여 가장 작은 값 개체 찾기
먼저
MinBy
없이 .NET 5에서 어떻게 보이는지 보여줍니다.var cheapest = foodList.OrderBy(f => f.Price).List();
그런 다음 Milan은 .NET 6(
MinBy
포함)에서 어떻게 보이는지 보여줍니다.var cheapest = foodList.MinBy(f => f.Price);
이 경우 결과는 값이
0.05
인 버섯 "🍄"이 됩니다(이 예에서는 인플레이션의 영향을 받지 않는 것 같습니다).죄송합니다. Milan의 예를 계속 살펴보겠습니다.
MaxBy를 사용하여 가장 높은 가치 객체 찾기
먼저
MaxBy
없이 .NET 5에서 어떻게 보이는지 보여줍니다.var mostExpensive = foodList
.OrderByDescending(f => f.Price)
.First();
그런 다음 Milan은 .NET 6(
MaxBy
포함)에서 어떻게 보이는지 보여줍니다.var mostExpensive = foodList.MaxBy(f => f.Price);
이 경우 결과는 값이
9.13
인 아보카도 "🥑"가 됩니다(이 값은 인플레이션의 영향을 받았습니다...).이러한 모범 사례를 통해 다음과 같은 경우에도 더 깨끗한 코드를 유지할 수 있습니다.
“Also, don’t try using them inside an EF Core query!
At the moment, they are not present in the EF provider.”
개발자를 염두에 두십시오!
이러한 지침을 공유하고 훌륭하고 훌륭한 C# 개발자 커뮤니티에 가치를 제공한 Milan Jovanović에게 다시 한 번 감사드립니다. 당신이 그들을 좋아한다면 나는 그가 항상 활동하고 많은 귀중한 C# 콘텐츠를 업로드하기 때문에 당신을 추천할 것입니다!
Reference
이 문제에 관하여(더 나은 프로그램 작성을 돕기 위한 선임 개발자의 5가지 C# 팁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bytehide/5-c-tips-from-a-senior-developer-to-help-you-program-better-2212텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)