TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 549 subscribers
Post #266 72
2️⃣: ادغام دستورات If برای بهبود خوانایی 🔄

اصل بازگشت زودهنگام، متد Process را خواناتر می‌کند.
اما نیازی نیست که یک guard clause پس از دیگری داشته باشیم.
بنابراین می‌توانیم همه آن‌ها را در یک دستور if ادغام کنیم.
رفتار متد Process بدون تغییر باقی می‌ماند، اما ما مقدار زیادی کد اضافی را حذف می‌کنیم.
public void Process(Order? order)
{
if (order is null
!order.IsVerified
order.Items.Count == 0)
{
return;
}

if (order.Items.Count > 15)
{
throw new Exception(
"The order " + order.Id + " has too many items");
}

if (order.Status != "ReadyToProcess")
{
throw new Exception(
"The order " + order.Id + " isn't ready to process");
}

order.IsProcessed = true;
}

3️⃣: استفاده از LINQ برای کد خلاصه‌تر ✨

یک بهبود سریع می‌تواند استفاده از LINQ برای خلاصه‌تر و گویاتر کردن کد باشد.
به جای بررسی Items.Count == 0، من ترجیح می‌دهم از متد Any در LINQ استفاده کنم.
شما می‌توانید استدلال کنید که LINQ عملکرد بدتری دارد، اما من همیشه برای خوانایی بهینه‌سازی می‌کنم.
عملیات بسیار پرهزینه‌تری در یک اپلیکیشن نسبت به یک فراخوانی متد ساده وجود دارد.
public void Process(Order? order)
{
if (order is null
!order.IsVerified
!order.Items.Any()) // استفاده از Any()
{
return;
}

if (order.Items.Count > 15)
{
throw new Exception(
"The order " + order.Id + " has too many items");
}

if (order.Status != "ReadyToProcess")
{
throw new Exception(
"The order " + order.Id + " isn't ready to process");
}

order.IsProcessed = true;
}


4️⃣: عبارت بولین با متد توصیفی 🗣

ادغام چندین شرط در یک دستور if به معنای نوشتن کد کمتر است، اما می‌تواند خوانایی را در شرایط پیچیده کاهش دهد.
با این حال، شما می‌توانید این مشکل را برطرف کرده و خوانایی را با استفاده از یک متغیر یا متد با نام توصیفی بهبود ببخشید.
من استفاده از متدها را ترجیح می‌دهم، بنابراین متد IsProcessable را برای نمایش چک پیش‌شرط معرفی خواهم کرد.
public void Process(Order? order)
{
if (!IsProcessable(order))
{
return;
}

if (order.Items.Count > 15)
{
throw new Exception(
"The order " + order.Id + " has too many items");
}

if (order.Status != "ReadyToProcess")
{
throw new Exception(
"The order " + order.Id + " isn't ready to process");
}

order.IsProcessed = true;
}

static bool IsProcessable(Order? order)
{
return order is not null &&
order.IsVerified &&
order.Items.Any();
}
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →