مدرنسازی هدفمند کدهای قدیمی #C با GitHub Copilot
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۵/۲۹ ۱۲:۲۷
آدرس: www.dntips.ir
switch و تعریف فیلدهای پشتیبان (Backing Fields) غیرضروری هستند. ارتقای کدهای قدیمی بدون تعریف چارچوب میتواند منجر به شکست در زمان اجرا (Runtime Breaking Changes) یا تغییر در رفتار مدیریت مقادیر تهی (Nullability) شود. هدف از مدرنسازی، صرفاً استفاده از سینتکس جدید نیست؛ بلکه ارتقای ایمنی، شفافیت و نگهداری آسانتر کد با تکیه بر ویژگیهای مدرن زبان است.public class CustomerService
{
private readonly IRepository _repository;
public CustomerService(IRepository repository)
{
_repository = repository;
}
public string GetCustomerSummary(Customer customer)
{
if (customer != null)
{
var name = customer.Name;
if (name != null)
{
return name.Trim();
}
}
return "Unknown";
}
}این کلاس #C قدیمی را با استفاده از قابلیتهای مدرن بازنویسی و مدرنسازی کن.
قیود و الزامات فنی:
۱. رفتار زمان اجرا (Runtime Behavior) و خروجیها بدون تغییر حفظ شوند.
۲. از ویژگیهای مدرن (مانند Primary Constructors، Nullable Reference Types و Pattern Matching) در صورت افزایش شفافیت استفاده شود.
۳. پیامدهای فعالسازی Nullable Reference Types (NRT) و تغییر قراردادها را توضیح بده.
۴. هر تغییری که ممکن است رفتار لایه اجرایی یا تخصیص حافظه را تغییر دهد، به صورت مشخص پرچمگذاری (Flag) کن.
۵. از انتزاعهای بیمورد و سینتکسهای گمراهکننده پرهیز کن.
namespace MyApp.Services;
// ۱. استفاده از Primary Constructor جهت کاهش کدهای Boilerplate
public sealed class CustomerService(IRepository repository)
{
// ۲. فعالسازی NRT و استفاده از بررسی مستقیم و امن مقادیر تهی
public string GetCustomerSummary(Customer? customer)
{
return customer?.Name?.Trim() switch
{
{ Length: > 0 } validName => validName,
_ => "Unknown"
};
}
}ifهای تودرتو جای خود را به تطبیق الگو داده که وضعیت رشته خالی ("") و مقادیر تهی (null) را به صورت شفاف و یکپارچه مدیریت میکند.Customer? در امضای متد، کامپایلر وضعیت ورودی را صراحتاً کنترل کرده و هشدارهای مربوط به ارجاعات تهی احتمالی را قبل از کامپایل آشکار میسازد.new List یا new int[] { ... } با براکتهای ساده [1, 2, 3].switch / case.record یا readonly record struct.? یا الگوها نباید ارزیابی منطقی شروط (Short-circuit Evaluation) یا ترتیب پرتاب استثناها (Exceptions) را ناخواسته دستخوش تغییر کند.